Afficher message d'erreur pour combobox excel

Résolu/Fermé
malaju Messages postés 125 Date d'inscription mercredi 21 novembre 2001 Statut Membre Dernière intervention 19 juin 2022 - 20 oct. 2017 à 23:18
malaju Messages postés 125 Date d'inscription mercredi 21 novembre 2001 Statut Membre Dernière intervention 19 juin 2022 - 21 oct. 2017 à 19:38
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
A voir également:

4 réponses

jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
21 oct. 2017 à 01:26
Bonjour

Deja pour la recherche exact regarde pour la methode find la valeur xlwhole
0
malaju Messages postés 125 Date d'inscription mercredi 21 novembre 2001 Statut Membre Dernière intervention 19 juin 2022 6
21 oct. 2017 à 16:51
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
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
21 oct. 2017 à 17:38
bonjour, si jamais tu modifies ComboBox1, cela me semble normal que ta fonction ComboBox1_Change soit appelée à nouveau, non?
0
malaju Messages postés 125 Date d'inscription mercredi 21 novembre 2001 Statut Membre Dernière intervention 19 juin 2022 6
21 oct. 2017 à 17:51
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
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
21 oct. 2017 à 18:55
ceci ne change-t-il pas la combobox?
ComboBox1.Text = UCase(ComboBox1.Text)
0
malaju Messages postés 125 Date d'inscription mercredi 21 novembre 2001 Statut Membre Dernière intervention 19 juin 2022 6
21 oct. 2017 à 19:22
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
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
21 oct. 2017 à 19:24
impec! peux-tu marquer le sujet comme résolu?
0
malaju Messages postés 125 Date d'inscription mercredi 21 novembre 2001 Statut Membre Dernière intervention 19 juin 2022 6 > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
21 oct. 2017 à 19:38
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