[VBA] Problème avec tableau

Problème avec tableau [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 27-06-2016 à 23:12:56    

Bonjour,
 
Je cherche à alimenter un tableau à partir d'une plage de valeur tout en supprimant les doublons.
J'ai trouvé ce code tout fait sur Internet qui utilise un dictionnaire pour repérer les doublons. Ce code répond très bien à mon besoin sauf que le tableau ne se rempli pas ...
Avec des MsgBox, j'arrive à voir que les cellules s'incrémentent bien dans la boucle puis une fois sorti de celle-ci, je constate que seule la dernière valeur du tableau a été enregistrée.
Ci-dessous le code :
 

Code :
  1. Sub Macro1()
  2.   Dim Tableau()
  3.   Set MonDico = CreateObject("Scripting.Dictionary" )
  4.   For Each c In Sheets("Feuil1" ).Range("A2:A292" )
  5.     'si la donnée n'existe pas encore dans le dictionnaire
  6.     If Not MonDico.Exists(c.Value) Then
  7.         'on l'ajoute dans le dictionnaire
  8.         MonDico.Add c.Value, c.Value
  9.         'et dans le tableau VBA
  10.         ReDim Tableau(1 To MonDico.Count)
  11.         Tableau(MonDico.Count) = c.Value
  12.       End If
  13.   Next c
  14. MsgBox Tableau(2)
  15. MsgBox Tableau(20)
  16. End Sub


 
Dans ma feuille, je trouve 20 valeurs différentes, sur les deux msgbox à la fin de mon code, le premier ne retourne rien (msgbox vide) et le second retourne bien la dernière valeur du tableau.
 
Ça fait deux heures que je planche dessus et je n'arrive pas à trouver la raison du pourquoi ça ne marche pas.
 
Merci d'avance pour vos réponses.


Message édité par jhonduff le 27-06-2016 à 23:14:38
Reply

Marsh Posté le 27-06-2016 à 23:12:56   

Reply

Marsh Posté le 28-06-2016 à 14:22:08    

 
            Bonjour.
 

Code :
  1. Sub Macro1_1()
  2.     With CreateObject("Scripting.Dictionary" )
  3.         For Each V In Feuil1.[A2:A292].Value
  4.               If V > "" Then .Item(V) = ""
  5.         Next
  6.         If .Count = 0 Then Exit Sub
  7.         ReDim VT(1 To .Count)
  8.         For N& = 1 To .Count:  VT(N) = .Keys()(N - 1):  Next
  9.         .RemoveAll
  10.     End With
  11.         MsgBox VT(1) & vbLf & VT(UBound(VT))
  12. End Sub

 

Reply

Marsh Posté le 28-06-2016 à 15:06:26    

Code :
  1. Sub Macro1_2()
  2.     With CreateObject("Scripting.Dictionary" )
  3.         For Each V In Feuil1.[A2:A292].Value
  4.               If V > "" Then .Item(V) = ""
  5.         Next
  6.         VT = .Keys
  7.         .RemoveAll
  8.     End With
  9.         If UBound(VT) > -1 Then MsgBox VT(0) & vbLf & VT(UBound(VT))
  10. End Sub

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed