PierreJeanPierre
XLDnaute Nouveau
Bonsoir,
Je fais mes débuts en VBA, j'arrive à progresser un peu grâce aux divers tutos que je trouve (notamment ici) mais là je sèche sur un truc, et mes recherches google ne m'ont pas débloqué.
J'ai une macro qui ouvre un premier userform me proposant de choisir entre deux années, 2010 et 2011. Une fois que c'est fait je valide avec un commandbutton, qui en profite pour désigner la feuille de données de l'année concernée comme étant la feuille active.
La macro emmène alors sur un second userform, qui contient cette fois-ci une combobox (mais ça aurait tout aussi bien pu être une liste classique, j'ai un peu pris au hasard) qui est supposée afficher les valeurs possibles d'une des colonnes de ma feuille active, idéalement sans doublon. J'ai essayé de faire au plus simple, mais quand l'userform apparaît la liste est désespérément vide.
J'ai en parallèle créé une seconde combobox (numérotée 2 du coup) qui va chercher exactement les mêmes données, sauf que j'ai indiqué la plage directement dans les paramètres de la box. Et là ça fonctionne... sauf qu'il y a des doublons, c'est pas trié, et pareil quand j'essaie de remettre de l'ordre avec un code adéquat (trouvé ici-même) dont je pense avoir compris le fonctionnement mais il ne se passe rien, la liste garde ses doublons.
Voilà la tête de mon userform:
Et donc voilà où j'en suis pour le moment, une ComboBox1 qui ne se remplit pas en dépit de la liste de valeurs que j'indique, et une ComboBox2 qui ne se trie pas malgré l'utilisation d'un code qui avait semble-t-il très bien fonctionné pour l'utilisateur à qui il avait été donné... J'imagine que j'ai juste fait une grossière erreur de débutant mais je n'arrive pas à comprendre où elle peut être, merci par avance pour vos conseils.
Je fais mes débuts en VBA, j'arrive à progresser un peu grâce aux divers tutos que je trouve (notamment ici) mais là je sèche sur un truc, et mes recherches google ne m'ont pas débloqué.
J'ai une macro qui ouvre un premier userform me proposant de choisir entre deux années, 2010 et 2011. Une fois que c'est fait je valide avec un commandbutton, qui en profite pour désigner la feuille de données de l'année concernée comme étant la feuille active.
La macro emmène alors sur un second userform, qui contient cette fois-ci une combobox (mais ça aurait tout aussi bien pu être une liste classique, j'ai un peu pris au hasard) qui est supposée afficher les valeurs possibles d'une des colonnes de ma feuille active, idéalement sans doublon. J'ai essayé de faire au plus simple, mais quand l'userform apparaît la liste est désespérément vide.
J'ai en parallèle créé une seconde combobox (numérotée 2 du coup) qui va chercher exactement les mêmes données, sauf que j'ai indiqué la plage directement dans les paramètres de la box. Et là ça fonctionne... sauf qu'il y a des doublons, c'est pas trié, et pareil quand j'essaie de remettre de l'ordre avec un code adéquat (trouvé ici-même) dont je pense avoir compris le fonctionnement mais il ne se passe rien, la liste garde ses doublons.
Voilà la tête de mon userform:
Code:
Private Sub UserForm2_Initialize()
Me.ComboBox1.List = ActiveSheet.Range("C2:C8000").Value
' Note: j'ai essayé l'instruction précédente en utilisant le nom de la feuille (par exemple Worksheets("Liste 2010")) au lieu d'Activesheet mais le résultat est le même
' La suite est un copier/coller du code évoqué plus haut, en modifiant juste les paramètres nécessaires pour que ça colle
Dim sd As Object 'déclare la variable sd (Sans Doublons)
Dim pl As Range 'déclare la variable pl (Plage)
Dim cel As Range 'déclare la variable cel (Cellule)
Dim tbl As Variant 'déclare la variable tbl (Tableau)
Dim i As Integer 'déclare la variable i (incrément)
Dim j As Integer 'déclare la variable j (incrément)
Dim temp As Variant 'déclare la variable temp (valeur Temporaire)
Set sd = CreateObject("Scripting.Dictionary") 'définit la variable sd
With ActiveSheet 'prend en compte l'onglet "Liste 2010"
Set pl = .Range("C2:C" & .Cells(Application.Rows.Count, 1).End(xlUp).Row) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "Liste 2010"
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
sd(cel.Value) = "" 'alimente la liste sans doublons
Next cel 'prochaine cellule de la boucle
tbl = sd.keys 'définit le tableau des valeurs sans doublons
'tri alphabétique
For i = 0 To UBound(tbl) 'boucle 1 de 0 au nombre de valeur du tableau
For j = 0 To UBound(tbl) 'boucle 2 de 0 au nombre de valeur du tableau
If tbl(i) < tbl(j) Then 'condition : si la valeur de la boucle 1 est invérieure à la valeur de la boucle 2
temp = tbl(i) 'définit la valeur temporaire temp
tbl(i) = tbl(j) 'la valeur de la boucle un devient la valeur de la boucle 2
tbl(j) = temp 'la valeur de la boucle deux devient la valeur temporaire temp
End If 'fin de la condition
Next j 'prochaine valeur de la boucle 2
Next i 'prochaine valeur de la boucle 1
Me.ComboBox2.List = tbl 'alimente la ComboBox1 sans doublons et trié par ordre alphabétique
End Sub
Et donc voilà où j'en suis pour le moment, une ComboBox1 qui ne se remplit pas en dépit de la liste de valeurs que j'indique, et une ComboBox2 qui ne se trie pas malgré l'utilisation d'un code qui avait semble-t-il très bien fonctionné pour l'utilisateur à qui il avait été donné... J'imagine que j'ai juste fait une grossière erreur de débutant mais je n'arrive pas à comprendre où elle peut être, merci par avance pour vos conseils.