USF

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

  1. Contributeur
    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
    1. 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
      1. 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