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 !
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 !
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.
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.
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
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 :
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.