[vba excel] afficher collection dans label
Résolu/Fermé
andy_kaufmann
Messages postés
36
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 mars 2013
-
7 sept. 2011 à 18:23
andy_kaufmann Messages postés 36 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 mars 2013 - 22 sept. 2011 à 09:43
andy_kaufmann Messages postés 36 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 mars 2013 - 22 sept. 2011 à 09:43
A voir également:
- Excel vba collection
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si et excel - Guide
- Excel compter cellule couleur sans vba - Guide
2 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 759
14 sept. 2011 à 09:02
14 sept. 2011 à 09:02
Bonjour,
Une méthode pour éviter les doublons : l'ajout d'une clé (paramètre "Key" de l'objet collection).
Il nous faut donc gérer l'erreur provoquée par ce doublon. Pour cela, on active le gestionnaire d'erreur et on traite celle-ci comme ceci :
Ensuite, pour compléter le caption de ton label, il convient de boucler sur tous les éléments de ta collection :
Une méthode pour éviter les doublons : l'ajout d'une clé (paramètre "Key" de l'objet collection).
Dim liste_jour As New Collection 'bla bla bla ton code ici liste_jour.Add entree, entree 'correspond à : Item:=entree, Key:=entreeLa clé doit être unique, sinon provoque une erreur. Le code donné ci-dessus plante en effet dès que l'on rencontre un doublon.
Il nous faut donc gérer l'erreur provoquée par ce doublon. Pour cela, on active le gestionnaire d'erreur et on traite celle-ci comme ceci :
Dim liste_jour As New Collection On Error Resume Next 'bla bla bla ton code ici liste_jour.Add entree, entree On Error GoTo 0
Ensuite, pour compléter le caption de ton label, il convient de boucler sur tous les éléments de ta collection :
Dim Liste As String 'ou autre type Dim Cpt As Integer For Cpt = 1 To coll.Count Liste = Liste & liste_jour(Cpt) Next lbl_liste_jour.Caption = Liste
andy_kaufmann
Messages postés
36
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 mars 2013
6
22 sept. 2011 à 08:14
22 sept. 2011 à 08:14
Bonjour,
merci pour ces réponses, ça marche à merveille !!!
petite question supplémentaire, les items qui sont affichées dans mon label sont tous à la suite sur la même ligne. y a-t-il un moyen pour faire que chaque item commence sur une nouvelle ligne ?
Merci pour vos réponses
andy
merci pour ces réponses, ça marche à merveille !!!
petite question supplémentaire, les items qui sont affichées dans mon label sont tous à la suite sur la même ligne. y a-t-il un moyen pour faire que chaque item commence sur une nouvelle ligne ?
Merci pour vos réponses
andy
michel_m
Messages postés
16602
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 313
22 sept. 2011 à 08:35
22 sept. 2011 à 08:35
Bonjour,
8 jours, ton appli semble ni urgente ni importante...
Sans réponse de ta part, la maquette a été détruite.... on fait des efforts pour répondre rapidement pour soulager le demandeur... pour ma part je n'ai pas envie de refaire une maquette pour te proposer un code fonctionnant correctement surtout que tu ne précises pas sur quelle solution tu désires bosser -apparemment c'est celle de Pijaku
A dans 15 jours ?
8 jours, ton appli semble ni urgente ni importante...
Sans réponse de ta part, la maquette a été détruite.... on fait des efforts pour répondre rapidement pour soulager le demandeur... pour ma part je n'ai pas envie de refaire une maquette pour te proposer un code fonctionnant correctement surtout que tu ne précises pas sur quelle solution tu désires bosser -apparemment c'est celle de Pijaku
A dans 15 jours ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 759
22 sept. 2011 à 08:56
22 sept. 2011 à 08:56
Bonjour,
Lorsque l'on poste un sujet ici, il convient de bien réfléchir à ce que l'on veux au final, et de l'exprimer clairement.
Tu demandes : la collection entière est affichée dans un label, nos deux réponses sont clairement dans ce sens.
Tu ajoutes une remarque, une semaine trop tard, nous ne pouvons effectivement pas garder indéfiniment les fichiers que nous créons pour vous aider...
Mais bon, ta demande est compréhensible.
Alors, sans tester, voici une petite modif (en gras) du code de Michel :
Lorsque l'on poste un sujet ici, il convient de bien réfléchir à ce que l'on veux au final, et de l'exprimer clairement.
Tu demandes : la collection entière est affichée dans un label, nos deux réponses sont clairement dans ce sens.
Tu ajoutes une remarque, une semaine trop tard, nous ne pouvons effectivement pas garder indéfiniment les fichiers que nous créons pour vous aider...
Mais bon, ta demande est compréhensible.
Alors, sans tester, voici une petite modif (en gras) du code de Michel :
Sub labeliser() Dim liste_jour As Object Dim fin As Long, cptr As Long, entree As String Dim tablo 'initialisations With Worksheets("events") 'With Sheets(1) 'maquette fin = .Columns("A").Cells(.Cells.Rows.Count, "A").End(xlUp).Row tablo = .Range("A1:B" & fin).Value Set liste_jour = CreateObject("scripting.dictionary") 'collecte sans doublons For cptr = 1 To UBound(tablo) entree = tablo(cptr, 1) & "," & tablo(cptr, 2) If Not liste_jour.exists(entree) Then liste_jour.Add entree, "x" Next restitutions lbl_liste_jour.Caption = Join(liste_jour.keys, " ; " & Chr(10)) '.Range("D2") = Join(liste_jour.keys, " ; ") 'maquette End With End Sub
andy_kaufmann
Messages postés
36
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 mars 2013
6
22 sept. 2011 à 09:02
22 sept. 2011 à 09:02
Bonjour michel_m
non, en effet mon appli n'est ni urgente ni importante. je le fais pour mon plaisir à coté de mes heures de travail, un projet professionnel en effet mais que je fais sur ma propre initiative. et je cherche simplement à profiter de la connaissance des autres utilisateurs du forum, notamment de la tienne. tu m'as déjà donné des conseils utiles sur beaucoup de sujets, et je t'en remercie. Toutefois, rien ne t'y oblige.
Maintenant, si tu veux bien continuer, je t'en serai reconnaissant. si tu n'as pas le temps, ben dommage, j'espère qu'une autre personne pourra alors m'aider.
Cela dit, pour la partie du code ci-dessus, je suis parti sur ta solution.
Je vais essayer de répondre avant le 1.10.
Bonne journée
non, en effet mon appli n'est ni urgente ni importante. je le fais pour mon plaisir à coté de mes heures de travail, un projet professionnel en effet mais que je fais sur ma propre initiative. et je cherche simplement à profiter de la connaissance des autres utilisateurs du forum, notamment de la tienne. tu m'as déjà donné des conseils utiles sur beaucoup de sujets, et je t'en remercie. Toutefois, rien ne t'y oblige.
Maintenant, si tu veux bien continuer, je t'en serai reconnaissant. si tu n'as pas le temps, ben dommage, j'espère qu'une autre personne pourra alors m'aider.
Cela dit, pour la partie du code ci-dessus, je suis parti sur ta solution.
Je vais essayer de répondre avant le 1.10.
Bonne journée
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 759
22 sept. 2011 à 09:13
22 sept. 2011 à 09:13
cf ma réponse juste au dessus...
andy_kaufmann
Messages postés
36
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 mars 2013
6
22 sept. 2011 à 09:43
22 sept. 2011 à 09:43
C'est nickel, ça fonctionne parfaitement.
Merci pour vos réponses, à bientôt.
Merci pour vos réponses, à bientôt.
Modifié par michel_m le 14/09/2011 à 10:35
Si vous utilisez une collection, il faut absolument la vider à la fin de la macro car elle a été instanciée par un " dim as...new"
set lacollection=nothing
d'autre l'objet "dictionnary" est plus efficace car n'utilisant pas le gestionnaire d'erreur
proposition
Pijaku, excuses moi d'intervenir sur tes propositions ce matin ! ;¤)
14 sept. 2011 à 10:47
T'inquiète, j'en profites également.
continue!!
A+