Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Utiliser les Collections

  • Initiateur de la discussion Initiateur de la discussion Flyonets
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

F

Flyonets

Guest
Une Questionpour les pros, non solutionnée par moi à ce jour.
je souhaite utiliser une collection pour récupérer une liste de datas
purgée de ses éventuels doublons.
Cette macro fonctionne sans bug,si et uniquement si dans le menu outils / options de Vbe/ general, je décoche la case :sur toutes les erreurs
car je teste sytématiquement mon code sur toutes les erreurs.
Quelqu'un pourrait il m'en expliquer la raison?
Merci d'avance
ci joint le code de la macro


Sub sansdoublon()
Dim Tout As Range, Cell As Range
Dim Purge As New Collection
Dim i As Integer
Application.Goto Reference:=Feuil1.Cells(2, 1), scroll:=False
Set Tout = Range('A1:A105')

On Error Resume Next
For Each Cell In tout
Purge.Add Cell.Value, CStr(Cell.Value)
Next Cell
On Error GoTo 0

' Renvoie les entrées uniques en colonne G
For i = 1 To Purge.Count
Range('G' & i).Value = purge(i)
Next i

End Sub
 
Salut,

de ce que j'ai pu lire dans l'aide, tu dois surement commettre une erreur sur la parramètre Key.
En effet, il est dis dans l'aide que :
key Facultatif. Expression de chaîne unique indiquant une chaîne de clé susceptible d'être utilisée à la place de l'index de position pour accéder à un membre de la collection.
Donc en résumé si tu mets 2* la même clé il est normal que cela pète.
Je ne vois que ça comme explication ( mais vu que je n'ai jamais utilisé les collections je peux me tromper...)
 
Bonjour Flyonets, Arnaud, le Forum.

Via les options VBE, si tu demandes un Arrêt sur toutes les erreurs, alors tu 'court-circuites' la routine de gestion d'erreur validée dans ton code par l'instruction On Error Resume Next.

La méthode Add de l'objet Collection se présente comme ceci : Collection.Add   Valeur, Clé

L'argument Clé doit être une chaine de caractères unique (car elle peut être utilisée à la place de l'index de position pour accéder à un membre de la collection). Une erreur se produit immédiatement si on tente d'ajouter un élément avec une clé déjà existante dans la collection.

On Error Resume Next
For Each Cell In tout
      Purge.Add Cell.Value, CStr(Cell.Value)
Next Cell
On Error GoTo 0
L'objectif de ce code est d'obtenir une collection d'éléments sans doublon (méthode de J.Walkenbach adaptée d'une astuce de J.G. Hussey).

[ol][ul][li] On Error Resume Next : valide le gestionnaire d'erreur. A partir de cette ligne, lorsqu'une erreur d'exécution survient, l'exécution continue à l'instruction suivante sans aucun arrêt. Dans la boucle qui suit, cela permet donc d'occulter l'ajout de clé déjà existante et donc de membre doublon.[/li]
[li] For Each Cell In tout ... Next Cell : boucle sur chaque cellule de la plage 'tout'...[/li]
[li]Purge.Add Cell.Value, CStr(Cell.Value) : ajoute chaque valeur dans la collection et utilise la valeur elle-même en tant que clé unique (Cstr permet de s'assurer qu'il s'agit bien d'une chaine de caractères)[/li]
[li]On Error Goto 0 : annule le gestionnaire d'erreur.[/li][/ul][/ol]
Cordialement.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
899
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
584
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…