Afficher message d'erreur pour combobox excel [Résolu/Fermé]

Signaler
Messages postés
115
Date d'inscription
mercredi 21 novembre 2001
Statut
Membre
Dernière intervention
5 juillet 2020
-
Messages postés
115
Date d'inscription
mercredi 21 novembre 2001
Statut
Membre
Dernière intervention
5 juillet 2020
-
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

Messages postés
29219
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 août 2020
2 693
Bonjour

Deja pour la recherche exact regarde pour la methode find la valeur xlwhole
Messages postés
115
Date d'inscription
mercredi 21 novembre 2001
Statut
Membre
Dernière intervention
5 juillet 2020
4
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.
Messages postés
11803
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
13 août 2020
674
bonjour, si jamais tu modifies ComboBox1, cela me semble normal que ta fonction ComboBox1_Change soit appelée à nouveau, non?
Messages postés
115
Date d'inscription
mercredi 21 novembre 2001
Statut
Membre
Dernière intervention
5 juillet 2020
4
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
Messages postés
11803
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
13 août 2020
674
ceci ne change-t-il pas la combobox?
ComboBox1.Text = UCase(ComboBox1.Text)
Messages postés
115
Date d'inscription
mercredi 21 novembre 2001
Statut
Membre
Dernière intervention
5 juillet 2020
4
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
Messages postés
11803
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
13 août 2020
674
impec! peux-tu marquer le sujet comme résolu?
Messages postés
115
Date d'inscription
mercredi 21 novembre 2001
Statut
Membre
Dernière intervention
5 juillet 2020
4 >
Messages postés
11803
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
13 août 2020

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