IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Sauts de Ligne automatiques sur 2 Textbox [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Sauts de Ligne automatiques sur 2 Textbox
    Bonjour,
    Sur 1 userform, j'ai placé 2 Textbox saisie_txt_1 et saisie_txt_2 dont la longueur maximale de saisie est de 15 caractères.
    J'ai indiqué cette propriété dans la procédure Initialize de l'userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub UserForm_Initialize()
    Me.saisie_txt_1.MaxLength = 15
    Me.saisie_txt_1.AutoTab = True
    Me.saisie_txt_2.MaxLength = 15
    Me.saisie_txt_2.AutoTab = True
    End Sub
    Mon problème :
    En cas de saisie sur saisie_txt_1 supérieure à cette limite, dès le 16ème caractère, j'aurais souhaité que le dernier mot, à partir du dernier espace , se reporte sur saisie_txt_2
    Exemple saisie_txt_1 "PAPA MAMAN MONIQ" Dès la frappe du "Q" de Monique, apparaissent
    en saisie_text_1 "PAPA MAMAN" (le 2ème espace serait supprimé)
    en saisie_txt_2 "MONIQ", dès lors la saisie peut continuer sur ce 2ème textbox.
    Ceci en sachant que la saisie sur saisie_txt_1 peut très bien contenir exactement 15 caratères et donc rester entière (ex PAPA MAMAN PAPI)
    Le code de la procédure "Initialize" ne fonctionne pas pour ce type de saisie car elle ne gère pas les espaces.
    Je ne sais pas comment coder.
    J'ai envoyé une pièce jointe, nommée EssaiTexte.xls, mais je ne sais plus si j'ai initié les longueurs maximales à 8 ou 15 caratères (C'est ma 1ère pièce jointe et je ne sais pas comment la récupérer)
    Merci pour votre aide.
    Bien cordialement.

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Bonjour,

    La propriete focus n'existant pas dans excel, il faut biaiser en mettant a false tous les objets hors celui qui doit prendre le curseur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub TextBox1_Change()
     
    If Len(TextBox1.Text) = 15 Then
        TextBox1.Enabled = False
        TextBox1.Enabled = True
    End If
     
    End Sub

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Userform Sauts de Page sur 2 Textbox
    Merci Jérôme,
    J'ai essayé mais il ne se passe rien.
    Est-ce que la 2ème ligne de ton code ne serait pas Textbox2 ?
    Selon la procédure que j'ai décrite plus haut.
    D'autre part, comment récupérer les 4 caractères M-O-N-I de saisie_txt_1, les placer au début de saisie_txt_2, avant le caractère "Q" saisi en 16ème position, afin d'obtenir MONIQ en début de saisie_txt_2 et continuer la saisie.
    Les 4 caractères M-O-N-I seraient supprimés (avec l'espace les précédant) de saisie_txt_1.
    Cordialement. Marcel.

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Le code fonctionne, il n'y a pas d'erreur.

    Ou as tu copié ce code? dans la userform?

  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Sauts de Ligne 2 Textbox
    En effet, le code fonctionne. La saisie se prolonge bien sur la textbox saisie_txt_2.
    J'obtiens
    saisie_txt_1 PAPA MAMAN MONI
    saisie_txt_2 QUE
    Il fallait que j'efface le code de la procédure "Initialize"
    Bravo pour cette astuce.
    Toujours pour faire suite à ma demande ci-dessus,
    Quand je frappe le caractère Q donc le 16ème (15+1) caractère, je souhaite :
    1 - récupérer les derniers caractères de saisie_txt_1 qui suivent le dernier espace, ici M-O-N-I, ou plutôt les "couper" pour...
    2 - ...les "coller" en début de saisie_txt_2, et obtenir ainsi
    - saisie_txt_1 "PAPA MAMAN"
    avec suppression du n-ième espace avant le 15ème caractère initial (ici le 2ème)
    - saisie_txt_2 "MONIQUE"
    La règle étant qu'à la fois
    - sur chaque textbox je n'aie que des mots entiers
    - sur chaque textbox je n'aie pas d'espace en fin de texte
    - la longueur de chaque textbox ne soit pas supérieure à 15
    Cette règle sera ensuite généralisée(60 caractères avec n espaces), mais je ne sais pas comment coder pour ce 1er cas.
    Merci pour ton aide, Jérôme. Cordialement. Marcel

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Voila qui devrait faire l'affaire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Private Sub TextBox1_Change()
    Dim str() As String
     
    If Len(TextBox1.Text) = 15 Then
     
        str = Split(TextBox1.Text, " ")
        TextBox2.Text = str(UBound(str))
        TextBox1.Text = Left(TextBox1.Text, Len(TextBox1.Text) - Len(str(UBound(str))))
     
     
        TextBox1.Enabled = False
        TextBox1.Enabled = True
    End If
     
    End Sub

  7. #7
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Jérôme Sauts de Ligne 2 Textbox
    Jérôme,

    3 points encore :
    toujours pour l'exemple ci-dessus
    1 - MONI se coupe bien de saisie_txt_1 mais ne se colle pas en début de saisie_txt_2, donc avant Q
    2 - il reste encore un espace après PAPA MAMAN en saisie_txt_1
    3 - Si je rentre une chaîne de 15 caractères ex PAPA MAMAN PAPY, PAPY se coupe sans se coller nulle part
    Si j'ai bien compris, mais ce n'est pas sûr, ton code, l'évènement survient dès le 15ème caractère; Or, mais c'est facile à dire, je pense qu'il devrait survenir au 16ème.
    J'ai esayé d'envoyer une pièce jointe, peux-tu me dire si tu peux y accéder.
    Merci encore Cordialement Marcel.

  8. #8
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Jérôme Pièce jointe
    Jérôme,
    çà y est, j'ai vu comment visualiser la pièce jointe.
    Ci-joint donc, la pièce jointe mise à jour avec ta dernière proposition de code.
    Merci

  9. #9
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Pour le problème d'espace en dernier caractère, utilise l'instruction trim

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TextBox1.Text = trim(Left(TextBox1.Text, Len(TextBox1.Text) - Len(str(UBound(str)))))

  10. #10
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut OK
    La fonction Trim est bien adaptée.
    Pour les autres points, je sais pas comment coder.
    Cordialement. Marcel.

  11. #11
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    ci joint le fichier corrigé

    EssaiTexte.xls

  12. #12
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut rien changé
    J'avais déjà modifié le fichier avec Trim, mais il me rest toujours le fait que MONI ne se reporte pas sur les le 2ème Textbox.
    Si tu as une solution...
    De ton côté, si tu entres en saisie_txt_1 "PAPA MAMAN MONI...Q"
    As-tu le résultat dès la saisie du "Q"
    saisie_txt_1 PAPA MAMAN
    saisie_txt_1 MONIQ
    Chez moi, non. Même avec ce dernier fichier.
    Merci Marcel

  13. #13
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Le problème semble venir de tes controsource lié aux textbox


    Je te remet le fichier a jour

    EssaiTexte 2.xls

  14. #14
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Généralisation
    Bonjour Jérôme,
    J'ai testé ton code et il fonctionne très bien.
    Maintenant, je voudrais généraliser cette saisie en y ajoutant 3 autres Textbox.
    J'ai donc recopié la procédure "change" de saisie_txt_1 en saisie_txt_2 et saisie_txt_3

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Private Sub saisie_txt_1_Change()
    Dim str() As String
     
    If Len(saisie_txt_1.Text) = 15 Then
     
        str = Split(saisie_txt_1.Text, " ")
        saisie_txt_2.Text = str(UBound(str))
     
        saisie_txt_1.Enabled = False
        saisie_txt_1.Enabled = True
     
        saisie_txt_1.Text = Trim(Left(saisie_txt_1.Text, Len(saisie_txt_1.Text) - Len(str(UBound(str)))))
     
    End If
     
    End Sub
     
    Private Sub saisie_txt_2_Change()
    Dim str() As String
     
    If Len(saisie_txt_2.Text) = 15 Then
     
        str = Split(saisie_txt_2.Text, " ")
        saisie_txt_3.Text = str(UBound(str))
     
        saisie_txt_2.Enabled = False
        saisie_txt_2.Enabled = True
     
        saisie_txt_2.Text = Trim(Left(saisie_txt_2.Text, Len(saisie_txt_2.Text) - Len(str(UBound(str)))))
     
    End If
     
    End Sub
    Private Sub saisie_txt_3_Change()
    Dim str() As String
     
    If Len(saisie_txt_3.Text) = 15 Then
     
        str = Split(saisie_txt_3.Text, " ")
        saisie_txt_4.Text = str(UBound(str))
     
        saisie_txt_3.Enabled = False
        saisie_txt_3.Enabled = True
     
        saisie_txt_3.Text = Trim(Left(saisie_txt_3.Text, Len(saisie_txt_3.Text) - Len(str(UBound(str)))))
     
    End If
     
    End Sub
    Le problème est que le saut de ligne s'effectue bien de saisie_txt_2 à saisie_txt_3, mais je ne peux plux continuer la saisie comme précédemment de saisie_txt_1 à saisie_txt_2.
    L'userform comprend 4 textbox. Y aurait-il alors une procédure spéciale "_Change" pour ce dernier. (15 caractères maxi et pas de 5ème textbox.)
    (fichier joint modifié)
    Merci pour ton aide.

  15. #15
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut FICHIER JOINT
    Je fais suite à mon mail précédent.
    Pour plus de clarté, j'ai renommé mon fichier en EssaiTexte3 que j'envoie ci-joint.
    Peut-on supprimer un fichier joint qui n'est pas affiché ?
    Merci Marcel

  16. #16
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Bonjour,

    J'ai apporté les modifications pour que ca fonctionne

    EssaiTexte3.xls

  17. #17
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut çà marche !
    Salut Jérôme,
    J'ai fait un test avec le programme que tu as modifié. Super.
    Juste une question qui me titille
    Pourquoi, à l'origine, mes ControlSource ont-il posé problème, et qu'il fallait dès lors imposer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           Sheets("Feuil1").Range("D5").Value = saisie_txt_1.Text
            Sheets("Feuil1").Range("D6").Value = saisie_txt_2.Text
            Sheets("Feuil1").Range("D7").Value = saisie_txt_3.Text
            Sheets("Feuil1").Range("D8").Value = saisie_txt_4.Text
    avec des ControlSource à vide ? Je ne vois pas.

    Cordialement. Marcel.

  18. #18
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Les controlessources étant liés aux textbox, a chaque modification de la textbox on generait un decrochement vers l'evenement change, et la mise a jour de la cellule regenerait elle aussi un evenement change.

    Je ne sais pas trop si c'est clair ce que j'ai écris

  19. #19
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Autrement dit, si j'ai bien compris, à chaque fois qu'un évènement "Change" lui est codé, alors le Textbox ne devra pas avoir de ControlSource et il faudra forcer les données correspondantes à la sortie du formulaire par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range("D5").Value = saisie_txt_1.Text
    Je considère ce problème comme "Résolu"
    Merci Jérôme pour ton aide précieuse. Cordialement Marcel.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Textbox text et saut de ligne automatique
    Par peltiarn dans le forum VB.NET
    Réponses: 3
    Dernier message: 11/05/2014, 22h41
  2. Saut de ligne automatique sur un champ li
    Par FMaz dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 21/07/2009, 05h17
  3. [W3C] Désactiver les sauts à la ligne automatique ?
    Par Ekinoks dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 17/02/2007, 06h22
  4. Retour à la ligne automatique sur un wxButton
    Par mister3957 dans le forum wxWidgets
    Réponses: 1
    Dernier message: 27/02/2006, 00h26
  5. retour à la ligne automatique sur textarea
    Par jpastier dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 19/10/2005, 00h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo