USF

Fermé
Utilisateur anonyme - 13 mars 2022 à 20:31
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 14 mars 2022 à 11:09
Bonjour,
Pourriez-vous m'aidez?
J'aimerais avoir une USF où se trouve 5 cases (Français,Italien,Allemand,Espagnol,Anglais)
On saisi un mot dans l'une des cases en respectant la langue choisie
on clic sur TRADUCTION et les 4 mots correspondant à la saisie effectuée apparaissent.
ci-join-t fichier avec modèle USF
https://www.cjoint.com/c/LCntCeicLM7

merci

3 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
14 mars 2022 à 10:56
Bonjour,

cela serait plus simple d'utiliser des ComboBox à la place des TextBox.
Avec des ComboBox il suffit de sélectionner l'item, tu n'auras pas de faute de frappe que tu peux avoir avec des TextBox.
En plus le code est plus simple, il suffit d'indiquer l'index sélectionné à tous les ComboBox
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié le 14 mars 2022 à 11:05
Bonjour Geoff, bonjour le forum,

Ton fichier modifié : https://www.cjoint.com/c/LCoj6aPGemT
J'ai remis les langues de l'UserForm dans le même ordre que celles du tableau (c'était couillon) ! J'ai rajouté un bouton pour remettre à zéro. Et le code ci-dessous :

Private Sub CommandButton1_Click() 'bouton "Traduction"
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim LI As Long 'déclare la variable LI (LIgne)

Set O = Worksheets("Traduction") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For J = 1 To 5 'boucle sur les 5 TextBoxes
    'si la textBox de la boucle n'est pas vide, définit la colonne COL, sort de la boucle
    If Me.Controls("TextBox" & J) <> "" Then COL = J: Exit For
Next J 'prochaine TextBox de la boucle
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    'si la donnée ligne I colonne COL est égale à la valeur de la TextBox(COL), définit la ligne LI, sort de la boucle
    If TV(I, COL) = Me.Controls("TextBox" & COL).Value Then LI = I: Exit For
Next I 'prochaine ligne de la boucle
For J = 1 To 5 'boucle sur les 5 TextBoxes
    Me.Controls("TextBox" & J) = TV(LI, J) 'récupère dans la TextBox de la boucle la donnée ligne LI colonne J du tableau des valeurs TV
Next J 'prochaine TextBox de la boucle
End Sub

Private Sub CommandButton2_Click() 'bouton "Quitter"
Unload Me 'vide et ferme l'UserForm
End Sub

Private Sub CommandButton3_Click() 'Bouton "Vider"
For J = 1 To 5 'boucle sur les 5 TextBoxes
    Me.Controls("TextBox" & J) = "" 'vide la TextBox de la boucle
Next J 'prochaine TextBox de la boucle
End Sub


0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
14 mars 2022 à 11:09
Remplace le code dans le fichier par celui-ci. J'ai rajouté quelques lignes pour évité le bug si le texte tapé n'était pas trouvé:

Private Sub CommandButton1_Click() 'bouton "Traduction"
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim LI As Long 'déclare la variable LI (LIgne)

Set O = Worksheets("Traduction") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For J = 1 To 5 'boucle sur les 5 TextBoxes
'si la textBox de la boucle n'est pas vide, définit la colonne COL, sort de la boucle
If Me.Controls("TextBox" & J) <> "" Then COL = J: Exit For
Next J 'prochaine TextBox de la boucle
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
'si la donnée ligne I colonne COL est égale à la valeur de la TextBox(COL), définit la ligne LI, sort de la boucle
If TV(I, COL) = Me.Controls("TextBox" & COL).Value Then LI = I: Exit For
Next I 'prochaine ligne de la boucle
If LI = 0 Then 'si la Ligne LI n'est pas définie
MsgBox "Non trouvé !" 'message
With Me.Controls("TextBox" & COL) 'prend en compte la TextBox éditée
.SetFocus 'place le curseur
.SelStart = 0 'début de la sélection
.SelLength = Len(Me.Controls("TextBox" & COL).Value) 'longueur de la sélection
Exit Sub 'sort de la procédure
End With 'fin de la prise en compte de la TextBox éditée
End If 'fin de la condition
For J = 1 To 5 'boucle sur les 5 TextBoxes
Me.Controls("TextBox" & J) = TV(LI, J) 'récupère dans la TextBox de la boucle la donnée ligne LI colonne J du tableau des valeurs TV
Next J 'prochaine TextBox de la boucle
End Sub

Private Sub CommandButton2_Click() 'bouton "Quitter"
Unload Me 'vide et ferme l'UserForm
End Sub

Private Sub CommandButton3_Click() 'Bouton "Vider"
For J = 1 To 5 'boucle sur les 5 TextBoxes
Me.Controls("TextBox" & J) = "" 'vide la TextBox de la boucle
Next J 'prochaine TextBox de la boucle
End Sub

0