Bonjour,
J'ai un tableau de plus de 40.000 lignes dont chaque ligne représente une facture. Chaque facture est attribuée à une entreprise, qui dépend d'un groupe. Il peut y avoir toute une série de factures par entreprise.
J'ai créé un Userform qui permet de générer des listes de factures déjà formatées. J'aimerais qu'on puisse sélectionner les factures par groupe. Je dois donc alimenter les items d'une liste déroulante, de façon à ce qu'il liste les noms des groupes, par ordre alphabétique et sans doublon. Après m'être cassé la cervelle avec l'enregistreur de macros, utilisant l'extraction sans doublon d'excel sur une feuille à part, etc., je me suis dit qu'il vaudrait peut-être mieux faire tout dans le code, en créant par exemple un Array du genre "Groupe() As String".
Mais voilà : je suis habitué à des langages où on teste simplement si un élément figure dans un Array, grâce à une méthode de l'objet Array. J'ai l'impression que cette méthode n'existe pas en VBA.
En regardant sur StackOverflow, j'ai trouvé ceci :
How to find if an array contains a string
Mais lorsque j'essaie ce code, où les groupes sont dans la colonne "Groupe" du tableau "Liste_Factures", j'ai une erreur "L'indice n'appartient pas à la sélection" qui pointe sur la ligne 25 :
Je ne vois pas où est l'erreur. Y a-t-il des façons plus pratiques de manipuler les Arrays/Collections/Listes en VBA ?
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Sub Liste_groupes() Dim Groupes() As String Dim groupe As Range Workbooks("Factures.xlsx").Activate For Each groupe In Range("Liste_Factures[Groupe]").Cells If groupe.Text <> "" And Not IsInArray(groupe.Text, Groupes) Then Groupes(i) = groupe.Text i = i + 1 End If Next For i = 0 To UBound(Groupes) Range("A" & i) = Groupes(i) Next End Sub Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean IsInArray = False For i = 0 To UBound(arr) If arr(i) = stringToBeFound Then IsInArray = True Exit Function End If Next End Function
Merci d'avance de votre aide.
Partager