TextBox Multilignes

Bonjour à tous !

Je me permets de venir poster parce que je suis confronté à petit problème sur l'insertion de nouvelles valeurs d'un UserForm dans une feuille de calcul.

Je m'explique, en fait, j'ai deux formulaires d'insertion de nouvelles données. Le premier UserForm2 (Le UserForm1 est le formulaire principal) appeler par le bouton "Ajouter" du UserForm1. Ce UserForm2 va me permettre d'ajouter un seul équipement à ma liste d'équipement.

Le second formulaire, UserForm3 (toujours appeler le bouton Ajouter + CheckBox cochée du UserForm1), lui doit permettre l'ajout de plusieurs équipements (équipements de même modèle mais numéros de série différents)

La grosse différence entre ces deux UserForm, c'est que la TextBox du Numéro de série permet le multiligne (UserForm3) donc exemple, 3 numéros de série dans la textbox = 3 équipements à enregistrer.

J'ai bien une idée de comment mis prendre pour l'ajout, des items, par exemple via un For ou un While en fonction du notre de ligne de ma textbox multiligne mais en revanche je ne sais pas comment faire pour "Spliter" le contenu de ma textbox qui contiendra X numéros de série.

En espérant avoir été assez clair dans mes explications, je vous ai joint mon fichier.

Merci par avance de votre aide !

2018 09 17 15 21 34 userform3 2018 09 17 15 21 14 userform2
42stock-v12.xlsm (50.23 Ko)

Bonjour Thibault,

essaye avec : Split(TextBox1.Value, Chr$(13))

ou avec : Split(TextBox1.Value, Chr$(10))

ou avec : Split(TextBox1.Value, vbCrLf)

dhany

Bonjour,

J'ai un peu regardé de loin ton sujet précédent, et je note que tu ouvres tes Userforms en Non modal !

C'est toujours une mauvaise idée (sauf pour des usages marginaux, telle une utilisation comme support de message...)

Un Userform ça se masque et ça se réaffiche, sans changement ou avec, selon besoins...

Enfin !

Pour splitter le contenu d'une TextBox multiligne, tu le fais sur les sauts de ligne :

    SN = Split(SN_TextBox.Value, Chr(10))

SN = variable de type Variant pour recueillir le tableau de valeurs contenues dans la TextBox.

Cordialement.

Bonjour,

J'ai un peu regardé de loin ton sujet précédent, et je note que tu ouvres tes Userforms en Non modal !

C'est toujours une mauvaise idée (sauf pour des usages marginaux, telle une utilisation comme support de message...)

Un Userform ça se masque et ça se réaffiche, sans changement ou avec, selon besoins...

Enfin !

Pour splitter le contenu d'une TextBox multiligne, tu le fais sur les sauts de ligne :

    SN = Split(SN_TextBox.Value, Chr(10))

SN = variable de type Variant pour recueillir le tableau de valeurs contenues dans la TextBox.

Cordialement.

Bonjour MFerrand,

Merci de ta réponse !

Concernant mon sujet précédent, ton avis m'intéresse

Je suppose que l'ouverture des mes UserForm en Non modal, est dû au paramètre vbModeless .

Le truc c'est que sans ce paramètre, mes UserForms (à la validation d'un formulaire) et bien ça plante.

Enfin pour échanger sur ce problème, il serait plus intéressant d'échanger sur le bon post !

En effet ! Pas le temps tout de suite, je vais passer à m'occuper du repas, mais on y reviendra !

Bye

Bonjour,

J'ai un peu regardé de loin ton sujet précédent, et je note que tu ouvres tes Userforms en Non modal !

C'est toujours une mauvaise idée (sauf pour des usages marginaux, telle une utilisation comme support de message...)

Un Userform ça se masque et ça se réaffiche, sans changement ou avec, selon besoins...

Enfin !

Pour splitter le contenu d'une TextBox multiligne, tu le fais sur les sauts de ligne :

    SN = Split(SN_TextBox.Value, Chr(10))

SN = variable de type Variant pour recueillir le tableau de valeurs contenues dans la TextBox.

Cordialement.

Du coup ca fonctionne

Juste petit détail, sur la première valeur de ta textbox multiligne prend aussi le retour a la ligne.

Comment puis-je faire pour ne pas le prendre en compte.

2018 09 18 16 57 40 microsoft visual basic pour applications stock v12 xlsm 2018 09 18 16 57 07 userform1

Bonjour,

Je ne vois pas de première ligne vide dans ton image de TextBox ?

Tu récupères les valeurs dans un tableau de base 0. S'il y avait un saut de ligne au démarrage, tu auras l'élément 0 du tableau vide ! Tu le testes, s'il est vide tu traites à partir de 1, sinon tu traites à partir de 0.

Cordialement.

Bonjour,

Je ne vois pas de première ligne vide dans ton image de TextBox ?

Tu récupères les valeurs dans un tableau de base 0. S'il y avait un saut de ligne au démarrage, tu auras l'élément 0 du tableau vide ! Tu le testes, s'il est vide tu traites à partir de 1, sinon tu traites à partir de 0.

Cordialement.

Excuse, je me suis mal exprimé, quand je valide l'ajout des valeurs de la textbox multiligne (par exemple deux valeurs).

La première valeur ajouté aura aussi le retour à la ligne (screen de la listbox on voit le caractère de retour à la ligne, surligné en jaune).

D'ailleurs quand je regarde directement dans la feuil de calcul, on voit bien le retour à la ligne.

2018 09 18 16 57 07 userform1 2018 09 19 14 15 02 stock v12 xlsm excel

Bonjour,

Indique comment tu procèdes précisément, car ta question initiale sur ce point parlait de splitter !

Or quand tu utilises la fonction Split, tu transformes une chaîne en tableau d'éléments dissociés sur la base d'un séparateur que tu indiques (ou par défaut l'espace si tu n'en indiques pas).

Le tableau obtenu contient donc autant d'éléments +1 qu'il y avait de séparateurs dans la chaîne.

Mais le séparateur ne figure plus dans aucun des éléments ! Il a joué son rôle de séparer la chaîne en éléments distincts...

Si donc tu splittes sur le caractère saut-de-ligne, je ne vois pas comment tu pourrais te retrouver avec un saut-de-ligne ensuite.

Cordialement.

Bonjour,

Indique comment tu procèdes précisément, car ta question initiale sur ce point parlait de splitter !

Or quand tu utilises la fonction Split, tu transformes une chaîne en tableau d'éléments dissociés sur la base d'un séparateur que tu indiques (ou par défaut l'espace si tu n'en indiques pas).

Le tableau obtenu contient donc autant d'éléments +1 qu'il y avait de séparateurs dans la chaîne.

Mais le séparateur ne figure plus dans aucun des éléments ! Il a joué son rôle de séparer la chaîne en éléments distincts...

Si donc tu splittes sur le caractère saut-de-ligne, je ne vois pas comment tu pourrais te retrouver avec un saut-de-ligne ensuite.

Cordialement.

C'est simple, lorsque je souhaite ajouter plusieurs équipements de même modèle, je vais scanner les numéros de série de mes trois équipement (la scan, lit le code barre et renvoie à la ligne). Une fois tout scanné, j'enregistre.

Pour enregistrer les entrées je fais de cette manière :

Private Sub Appliquer_CommandButton_Click()
   Dim Nlig

    'Split le champ SN
    SplitSN = Split(SN_TextBox.Value, Chr(10))

    'Boucle For pour ajouter le nombre d'equipement par rapport au nombre de SN
    For i = 0 To UBound(SplitSN)

        Nlig = Sheets("EquipementsFeuil").Range("B65536").End(xlUp).Row + 1

         ''''AJOUT DES NOUVELLES VALEURS
            'Détermine quel est la sélection de l'état de stock
            With Sheets("EquipementsFeuil")

                If Stock_OptionButton.Value = True Then
                    .Range("A" & Nlig).Value = "EN STOCK"
                End If

                If EnService_OptionButton = True Then
                    .Range("A" & Nlig).Value = "EN SERVICE"
                End If

                If Spare_OptionButton = True Then
                   .Range("A" & Nlig).Value = "SPARE"

                Else
                   .Range("A" & Nlig).Value = "HORS SERVICE"
                End If
                .Range("B" & Nlig).Value = UCase(Reference_ComboBox.Text)
                .Range("C" & Nlig).Value = UCase(Categorie_ComboBox.Text)
                .Range("D" & Nlig).Value = UCase(Type_ComboBox.Text)
                .Range("E" & Nlig).Value = UCase(Constructeur_ComboBox.Text)
                .Range("F" & Nlig).Value = UCase(Modele_ComboBox.Text)
                .Range("G" & Nlig).Value = UCase(SplitSN(i))
                .Range("H" & Nlig).Value = UCase(Fournisseur_ComboBox.Text)
                .Range("I" & Nlig).Value = UCase(NumeroFacture_TextBox.Text)
                .Range("J" & Nlig).Value = UCase(DateFacture_TextBox.Text)
                .Range("K" & Nlig).Value = UCase(ClientNom_TextBox.Text)
                .Range("L" & Nlig).Value = UCase(ClientTelephone_TextBox.Text)
                .Range("M" & Nlig).Value = UCase(ClientAdresse_TextBox.Text)
                .Range("N" & Nlig).Value = UCase(ClientCP_TextBox.Text)
                .Range("O" & Nlig).Value = UCase(ClientVille_TextBox.Text)
                .Range("P" & Nlig).Value = UCase(ClientMES_TextBox.Text)
            End With
    Next i

        'Fermeture du Formulaire d'ajout d'équipement
    Unload Me

    'Revoie sur UserForm1
    UserForm1.Show vbModeless

End Sub
53stock-v12.xlsm (62.02 Ko)

Re,

Si tu as un caractère parasite, ce ne peut être un saut-de-ligne puisqu'il sert de séparateur...

Il faut donc savoir quel séparateur insère ton scanneur.

Tu scannes plusieurs éléments (au moins 3). Pour un test rapide :

Sub Test()

Dim chscan$

chscan = SN_TextBox.Value

chscan = Replace(Replace(chscan, Chr(13), "<CR>"), Chr(10), "<LF>")

MsgBox chscan

End Sub

Tu introduis cette proc dans ton module du userform (tu pourras ainsi plus facilement supprimer ensuite).

Dans ta proc citée tu ajoutes une ligne (avant de splitter) : Test pour l'exécuter.

Elle t'affichera un message dans lequel les caractères saut-de-ligne et retour-chariot du texte contenu dan sla TextBox auront été remplacés respectivement par <LF> et <CR>.

Ce qui permettra de voir immédiatement si le saut-de-ligne est doublé d'un retour-chariot d'une part, et si un séparateur figurerait en début de chaîne.

Cordialement.

Re,

Si tu as un caractère parasite, ce ne peut être un saut-de-ligne puisqu'il sert de séparateur...

Il faut donc savoir quel séparateur insère ton scanneur.

Tu scannes plusieurs éléments (au moins 3). Pour un test rapide :

Sub Test()

Dim chscan$

chscan = SN_TextBox.Value

chscan = Replace(Replace(chscan, Chr(13), "<CR>"), Chr(10), "<LF>")

MsgBox chscan

End Sub

Tu introduis cette proc dans ton module du userform (tu pourras ainsi plus facilement supprimer ensuite).

Dans ta proc citée tu ajoutes une ligne (avant de splitter) : Test pour l'exécuter.

Elle t'affichera un message dans lequel les caractères saut-de-ligne et retour-chariot du texte contenu dan sla TextBox auront été remplacés respectivement par <LF> et <CR>.

Ce qui permettra de voir immédiatement si le saut-de-ligne est doublé d'un retour-chariot d'une part, et si un séparateur figurerait en début de chaîne.

Cordialement.

Bonjour MFerrand,

Voilà ce que ça donne avec la douchette :

2018 09 20 10 45 32 userform1

Crois-tu que je pourrais Splitter à partir des deux caractères ?

Bonjour,

Oui ! Tu splittes avec séparateur : Chr(13) & Chr(10).

Mais si ça se termine sur un séparateur, ça veut dire que ton dernier élément de tableau splitté sera vide.

Cordialement.

Bonjour,

Oui ! Tu splittes avec séparateur : Chr(13) & Chr(10).

Mais si ça se termine sur un séparateur, ça veut dire que ton dernier élément de tableau splitté sera vide.

Cordialement.

Ok,

Malheureusement, la douchette est configurée pour faire un retour à la ligne lorsqu'elle lit un code barre.

Donc avec le dernier code barre il y aura forcement de retour chariot pour rien.

Tu boucles de 0 à UBound(tablo) -1...

Bye.

Bonjour

pour faire du multilines dans une textbox

A mettre dans UserForm_Initialize

A voir bien sur si sa te va

    With TextBox14    ' a changer bien sur
        .EnterKeyBehavior = True
        .MultiLine = True
        .ScrollBars = 0
        .TabKeyBehavior = True
        .TextAlign = 1
    End With

A+

Maurice

@Archer :

Thibault a les propriétés de sa TextBox définies ainsi, à la conception, dans la boîte de dialogue propriétés, comme il est de règle pour les propriétés par défaut, cela évite de polluer l'Initialize avec des éléments qui une fois définis ne varieront plus (il vaut mieux réserver l'Initialize pour les éléments à actualiser au lancement, cela allège le code)...

A l'exception de TabKeyBehavior : c'est sans doute qu'il n'a pas besoin d'insérer des tabulations dans la TextBox, qui de toutes façons est alimentée par scan. Cela laisse la touche Tab disponible pour sortir du contrôle.

Cordialement.

Tu boucles de 0 à UBound(tablo) -1...

Bye.

Super ! Ca fonctionne parfaitement !

Merci beaucoup !

Rechercher des sujets similaires à "textbox multilignes"