Afficher message d'erreur pour combobox excel

Résolu
malaju Messages postés 136 Statut Membre -  
malaju Messages postés 136 Statut Membre -
Bonsoir,
Sous Excel 2013 j'ai fait un conjugueur de verbes provençaux. Sur la feuil4 (Sesido) se trouve le formulaire de saisie, sur la feuil2 (Verbe) la liste des 14000 verbes référencés avec en regard de chacun les verbes de référence pour la conjugaison. Les autres feuilles (feuil1 (Counjugueson), feuil3 (Indicatiéu), feuil5 (Sujountiéu) et feuil6 (Coundiciounau-Emperatiéu) affichent les conjugaisons des verbes de référence.
Le principe de mon conjugueur est de rentrer un verbe dans la combobox1. Celui-ci est recherché dans la liste de la feuille "verbe" et affiche dans la textbox1 en dessous le verbe de référence. En cliquant sur le bouton adéquat (conjugaison complète, indicatif, subjonctif ou conditionnel-impératif, Excel affiche la conjugaison désirée du verbe de référence (ex : le verbe "coungela" se conjugue comme "abarbela" et en cliquant sur le bouton "Indicatiéu" s'affiche la conjugaison du verbe de référence "abarbela" à tous les temps de l'indicatif).
Tout cela marche parfaitement sauf quand on rentre un verbe qui ne figure pas dans la liste des 14000 verbes. Dans ce cas la textbox1 affiche un verbe de référence pour un verbe proche de celui entré dans la combobox1. J'aimerais quand on entre un verbe erroné que d'une part la textbox1 n'affiche rien et que d'autre part une msgbox apparaisse pour signifier que le verbe n'a pas été trouvé. Voici le code que j'ai fait pour recherche du verbe (qui fonctionne) et affichage de la msgbox (qui ne fonctionne pas) :
"Private Sub ComboBox1_Change()
v = ComboBox1.Text
ComboBox1.Text = UCase(ComboBox1.Text)
If v <> "" Then
With Sheets("Verbe")
Set c = .Columns(2).Find(v, , xlValues, xlWhole)
If Not c Is Nothing Then
TextBox1.Text = c.Offset(, 1).Value
Else If v <> c Then
MsgBox ("Désolé ! Verbe inconnu. Vérifiez l'orthographe")
ComboBox1.Text = " "
TextBox1.Text = " "
End If
End If
End With
End If

End Sub "

Quelqu'un a-t-il une idée de l'erreur commise et la solution pour y remédier ?
Merci d'avance

4 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour

    Deja pour la recherche exact regarde pour la methode find la valeur xlwhole
    0
  2. malaju Messages postés 136 Statut Membre 6
     
    Merci jordane, mais pour l'instant je préfère garder la valeur xlWhole car j'ai trouvé un début de solution à mon problème. J'ai modifié mon code après Else, ce qui donne :
    "Private Sub ComboBox1_Change()
    v = ComboBox1.Text
    ComboBox1.Text = UCase(ComboBox1.Text)
    If v <> "" Then
    With Sheets("Verbe")
    Set c = .Columns(2).Find(v, , xlValues, xlWhole)
    If Not c Is Nothing Then
    TextBox1.Text = c.Offset(, 1).Value
    Else
    TextBox1 = Range("AA1") 'affiche le contenu de la cellule càd rien
    MsgBox "MON MESSAGE", vbExclamation, "Titre de la MsgBox"
    Me.ComboBox1.SelStart = Len(Me.ComboBox1.Text) 'replace le curseur à la fin du mot entré ds la combo pour pouvoir le modifier
    End If
    End With
    End If"
    Ça marche super bien, sauf que je ne m'explique pas pourquoi la MsgBox apparait une deuxième fois quand je clique sur son bouton OK.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bonjour, si jamais tu modifies ComboBox1, cela me semble normal que ta fonction ComboBox1_Change soit appelée à nouveau, non?
      0
  3. malaju Messages postés 136 Statut Membre 6
     
    bonjour yg_be,
    J'ai modifié le code en mettant un ' devant Me.ComboBox1.SelStart = Len(Me.ComboBox1.Text) pour que la fonction ne s'exécute pas mais j'ai toujours la même chose
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      ceci ne change-t-il pas la combobox?
      ComboBox1.Text = UCase(ComboBox1.Text)
      0
  4. malaju Messages postés 136 Statut Membre 6
     
    J'ai encore modifié le code en supprimant l'affichage de la msgbox (MsgBox "MESSAGE", vbExclamation, "TITRE").
    Celle-ci est désormais affichée quand je clique sur un des boutons qui me permettent d'afficher le mode de conjugaison du verbe de référence.
    Dans le code de chaque module (1 module par bouton donc par mode de conjugaison) j'ai ajouté le code suivant (en gras):
    "Sub conjug_indicatif()
    Sheets("Indicatiéu").Visible = True
    Dim v As String, c As Range
    v = Sheets("Sesido").TextBox1.Text
    If v <> "" Then
    With Sheets("Indicatiéu")
    Set c = .Columns(1).Find(v, , xlValues, xlWhole)
    If Not c Is Nothing Then
    Application.Goto c, True
    End If
    End With
    Else
    MsgBox "MESSAGE", vbExclamation, "TITRE"

    With Sheets("Sesido")
    .ComboBox1.Text = ""
    .Select
    End With
    Sheets("Indicatiéu").Visible = False

    End If

    End Sub"

    Et là ça marche impec
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      impec! peux-tu marquer le sujet comme résolu?
      0
      1. malaju Messages postés 136 Statut Membre 6 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        OK, c'est fait.
        Merci à tous de m'avoir apporté vos idées de solutions. Grâce à vous j'ai pu me concentrer sur le sujet et résoudre le problème.
        SUPER ! Encore merci
        0