USF

Utilisateur anonyme -  
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   -
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 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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   Statut Membre Dernière intervention   160
 
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   Statut Membre Dernière intervention   160
 
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