Utiliser une array de dimensions variable
Bonjour,
J'ai un code utilisant une variable array, et je souhaiterai pouvoir définir les dimension de mon array en fonction d'une variable :
Ce code fais un copié collé d'un tableau à un autre endroit de ma feuille en supprimant les doublons et additionnant ces derniers dans la dernière colonne.
Dim mondico(6)
Dim i As Integer
Dim j As Integer
Dim x As Integer
Application.ScreenUpdating = True
Set f1 = Sheets("Feuil10")
a = f1.Range("A1").CurrentRegion.Value
f1.Range("P1").CurrentRegion.Clear
For i = 1 To 6
Set mondico(i) = CreateObject("Scripting.Dictionary")
Next
For i = 1 To 6
mondico(i).RemoveAll
Next
For i = 2 To UBound(a)
temp = a(i, 4) & " / " & a(i, 5) & " / " & a(i, 6) & " / " & a(i, 7) & " / " & a(i, 3)
mondico(1)(temp) = mondico(1)(temp) + a(i, UBound(a, 2))
For j = 2 To 6
mondico(j)(temp) = a(i, j + 1)
Next
Next
For x = 2 To 6
f1.Cells(1, x + 14).Resize(mondico(1).Count) = Application.Transpose(mondico(x).items)
Next
f1.[U1].Resize(mondico(1).Count) = Application.Transpose(mondico(1).items)Comme vous pouvez le voir je définit dès le début mon array sur 6 car je devais bien commencer par faire un test. Mon code fonctionne parfaitement, or j'aurai besoin d'appliquer cette macro à plusieurs tableaux différents n'ayant pas les mêmes nombre de colonnes. Je souhaiterai donc savoir comment faire pour rendre mon array variable pour que tout le reste du code puisse s'adapter et pouvoir rendre mes boucles for variable également.
Je ne sais pas si c'est bien clair sur ce que je souhaite faire.
Pour être plus précis je souhaiterai arriver à un dim mondico(y) mais lorsque je fais ceci vba me met une erreur que je ne sais résoudre. L'erreur: "erreur de compilation, constante requise"
J'espère que vous pourrez m'aider
Bonjour,
Oulala ! Je ne sais pas ou tu as été pêcher ce code mais.... mauvaise pioche !
Déjà pas besoin de dimensionner ton Dico (Un Dico n'est pas un Array)
Dim MonDico suffit.
Pour le reste voir le lien suivant :
Tout sur les Dictionary c'est ici.
A+
Merci de ta réponse, J'ai trouvé sur un autre guide la solution pour éviter mes doublons et après je l'ai beaucoup modifié pour l'adapter à ma situation. Et comme il fonctionne je me contente de ça.
Je vais jeter un œil à ce que vous m'avait envoyé.
Edit : j'avais trouvé le code sur le même site
Application.ScreenUpdating = False
Set f1 = Sheets("BD")
a = f1.Range("A1").CurrentRegion.Value
Set mondico = CreateObject("Scripting.Dictionary")
Set mondico2 = CreateObject("Scripting.Dictionary")
Set mondico3 = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(a)
temp = a(i, 1) & " / " & a(i, 2)
mondico(temp) = mondico(temp) + a(i, UBound(a, 2))
mondico2(temp) = a(i, 1)
mondico3(temp) = a(i, 2)
Next
f1.[G1].Resize(mondico.Count) = Application.Transpose(mondico2.items)
f1.[H1].Resize(mondico.Count) = Application.Transpose(mondico3.items)
f1.[I1].Resize(mondico.Count) = Application.Transpose(mondico.items)J'avais utilisé le array pour pouvoir faire des boucles avec mes différentes dictionnaires. C'était peut-être pas la bonne solution pour pouvoir faire ce que je veux faire maintenant.