Bonjour à tous,
Tout d'abord je suis novice sur VBA et sur ce forum. Je ne sais même pas si je suis au bon endroit pour poser ma question
J'ai écrit du code qui, pour chaque mot d'une liste de mot classés dans une colonne d'une feuille d'un classeur excel (qui regroupe les mots d'un document), vérifie la présence du mot dans une autre feuille du même classeur (il s'agit d'une sorte de dictionnaire, ou des cellules sont marquées d'une étoile "*" en fonction des champs d'application du mot). Si le mot est inconnu, un UserForm s'ouvre afin de demander à l'utilisateur que faire du mot (un UserForm s'ouvre donc pour chaque mot inconnu) et en particulier choisir quels sont les champs d'application du mot (afin d'intégrer le mot et ses champs d'application dans le dictionnaire). Mon maître de stage m'a demandé de faire basculer les champs sélectionnés d'une ListBox vers une autre (il tient au fait que ce soient des ListBox et non des CheckBox ou autres). J'ai donc implémenté une sub ListBox_Change, qui a donc pour but de transférer le champ sélectionné d'une ListBox à une autre dès l'instant qu'il est sélectionné (cette manœuvre est aussi implémentée dans le sens inverse au cas ou on se serait trompé). Mon problème réside dans le fait que, de manière aléatoire, cette sub s'exécute deux fois et transfert donc un mot et son suivant d'une ListBox à l'autre. Cependant ce phénomène suit tout de même quelques "règles" :
-Pour une liste de mot à rechercher dans le dictionnaire, le problème apparaît pour toute la liste ou n'apparaît pas
-Le problème apparaît jusqu'ici soit sur le transfert de la ListBox1 vers la ListBox2, soit sur le transfert inverse, mais pas les deux
-Le problème n'apparaît que lors du premier click dans la ListBox concernée (mais quand même à chaque ouverture du UserForm)
Cela fait un moment que je cherche dans mon code et sur internet et je ne trouve pas d'où vient l'erreur. J'ai quand même remarqué plusieurs choses. La première étant que si le ListIntex est paramétré à 2 ou plus, alors l'erreur est systématique (je ne vois aucune logique la dedans). Ensuite, si la ListBox est paramétrée en sélection unique, le premier click transfert non pas deux, mais tous les éléments de la ListBox. Enfin, en déboguant pas à pas, je me suis rendu compte que la sub de transfert s'exécutait deux fois (elle transfert un élément de la ListBox par exécution)
Je vous joint ci dessous mon code (je sais pas comment le mettre dans les petites cases ou c'est tout joli) qui selon moi ne pose pas problème :
Je tiens à préciser que les variables qui ne sont ni initialisées ni déclarées sont des variables globales définies dans un module.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Private Sub ListBox1_Change() Dim i As Integer i = 0 Do While i < taille1 If ListBox1.Selected(i) = True Then ListBox2.AddItem ListBox1.List(i) ListBox1.RemoveItem i i = i - 1 Exit Sub End If i = i + 1 taille1 = ListBox1.ListCount Loop taille2 = ListBox2.ListCount ok.SetFocus End Sub
Je ne sais plus quoi penser de cette erreur, HELP!!!
Partager