MACRO Comment lister dans une seule cellule
Résolu/Fermé
A voir également:
- MACRO Comment lister dans une seule cellule
- Comment aller à la ligne dans une cellule excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Comment imprimer un tableau excel sur une seule page - Guide
- Excel cellule couleur si condition texte - Guide
- Macro word - Guide
10 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
20 oct. 2010 à 19:27
20 oct. 2010 à 19:27
Bonsoir,
à essayer pour un grand nombre de lignes
à essayer pour un grand nombre de lignes
Const col As Byte = 1 'colonne des ref Const lig As Byte = 2 'ligne de départ Const col_r As Byte = 4 'colonne de restitution Sub regrouper_par_ref() Dim derlig As Long, cptr As Long Dim ref 'dépend du type de ref (string ?) Dim dico_ref As Object Dim liste, tablo Dim concat As String, lig_ref As Long, cptr_lig As Integer derlig = Cells(65536, col).End(xlUp).Row Set dico_ref = CreateObject("Scripting.Dictionary") 'crée une liste des ref sans doublons For cptr = lig To derlig ref = Cells(cptr, col) If Not dico_ref.Exists(ref) Then dico_ref.Add ref, ref End If Next liste = dico_ref.items ReDim tablo(UBound(liste), 1) For cptr = 0 To UBound(liste) concat = "" ref = liste(cptr) 'ref en cours tablo(cptr, 0) = ref nbre = Application.CountIf(Columns(col), ref) If lig = 1 Then lig_ref = 65536 Else lig_ref = lig - 1 End If 'concaténète les données de m^ ref For cptr_lig = 1 To nbre 'recherche les ligne de la ref en cours lig_ref = Columns(col).Find(ref, Cells(lig_ref, col), xlValues).Row concat = concat & " " & Cells(lig_ref, col + 1) & " ." tablo(cptr, 1) = concat 'inscrit la concaténation dans la tableau Next Next 'restitution Application.ScreenUpdating = False Range(Cells(lig, col_r), Cells(65536, col_r + 1)).ClearContents Cells(lig, col_r).Resize(UBound(tablo) + 1, 2) = tablo End Sub
Bonjour Michel,
Merci. Je ne suis pas trop expérimentée dans les macros, je vais donc prendre le temps pour adapter le code a mes donnes et le tester. Je te tiendrai au courant.
A+
Merci. Je ne suis pas trop expérimentée dans les macros, je vais donc prendre le temps pour adapter le code a mes donnes et le tester. Je te tiendrai au courant.
A+
Bonsoir Michel,
MERCI ! Ton code marche à merveille mais j'ai besoin de le comprends et de l'adapter a mes donnes. Par contre j'ai mal adapté mon question-exemple. J'ai les doublons surtout dans la colonne B, je souhaiterai donc éviter de les lister tous (je souhaiterai les lister juste une fois). Comment le faire ?
Merci d'avance.
A+
Eliz
MERCI ! Ton code marche à merveille mais j'ai besoin de le comprends et de l'adapter a mes donnes. Par contre j'ai mal adapté mon question-exemple. J'ai les doublons surtout dans la colonne B, je souhaiterai donc éviter de les lister tous (je souhaiterai les lister juste une fois). Comment le faire ?
Merci d'avance.
A+
Eliz
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 21/10/2010 à 11:35
Modifié par michel_m le 21/10/2010 à 11:35
Bonjour,
la modif est en gras
n'oublie pas de déclarer "donnee"
edit: attention! si tu as par exemple comme données "azerty" puis "azer" , le code considère qu'il s'agit d'un doublon (tu ne donnes aucun renseignement sur la forme de tes données...)
bonne journée
la modif est en gras
... 'concaténète les données de m^ ref For cptr_lig = 1 To nbre 'recherche les ligne de la ref en cours lig_ref = Columns(col).Find(ref, Cells(lig_ref, col), xlValues).Row donnee = Cells(lig_ref, col + 1) If InStr(concat, donnee) = 0 Then 'teste si la donnée n'est pas déjà inscrite concat = concat & " " & donnee & " ." tablo(cptr, 1) = concat 'inscrit la concaténation dans la tableau End If Next ...
n'oublie pas de déclarer "donnee"
edit: attention! si tu as par exemple comme données "azerty" puis "azer" , le code considère qu'il s'agit d'un doublon (tu ne donnes aucun renseignement sur la forme de tes données...)
bonne journée
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
22 oct. 2010 à 09:46
22 oct. 2010 à 09:46
Pas de nouvelles ?
Abandon définitif du suivi; refus d'aide futur pour LysdElise
Abandon définitif du suivi; refus d'aide futur pour LysdElise
Bonjour Michel,
Pas de nouvelles pour le moment parce que je suis tellement inexpérimentée avec des macros que j'ai besoin d'attendre une session avec un ami afin de comprendre ton code et de l'adapter a mes donnes. C'est plus compliqué que j'ai pensé. Par instant je laisse la discussion ouverte parce que je pourrai avoir encore des questions. Je te tiendrai au courant. Et toujours merci pour ton aide.
A+, Elisa
Pas de nouvelles pour le moment parce que je suis tellement inexpérimentée avec des macros que j'ai besoin d'attendre une session avec un ami afin de comprendre ton code et de l'adapter a mes donnes. C'est plus compliqué que j'ai pensé. Par instant je laisse la discussion ouverte parce que je pourrai avoir encore des questions. Je te tiendrai au courant. Et toujours merci pour ton aide.
A+, Elisa
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Michel,
En fait mon problème est :
*Dans la col.A j'ai la valeur cherchée = code de commande en format txt (normalement il n'y a pas des doublons mais le formule qui enlève les doublons peut rester par sécurité)
*Dans la col.B j'ai le numéro de livraison le quel peut être en format txt ou num (il y a les doublons à enlever)
*Dans la col.C j'ai la date de livraison en format txt (il y a les doublons à enlever)
Le résultat que je souhaite d'obtenir est le suivant :
*Dans la col.D le code de commande (normalement sans les doublons)
*Dans la col.E liste de valeurs de la col.B - liste de numéros de livraison (sans les doublons)
*Dans la col.F liste de valeurs de la col.C - des dates de livraison (sans les doublons)
Auras-tu la gentillesse de m'aider encore une fois, stp ?
Le reste de mes donnes je devrais pouvoir adapter toute seule, comme une grande ;)
A+,Elise
En fait mon problème est :
*Dans la col.A j'ai la valeur cherchée = code de commande en format txt (normalement il n'y a pas des doublons mais le formule qui enlève les doublons peut rester par sécurité)
*Dans la col.B j'ai le numéro de livraison le quel peut être en format txt ou num (il y a les doublons à enlever)
*Dans la col.C j'ai la date de livraison en format txt (il y a les doublons à enlever)
Le résultat que je souhaite d'obtenir est le suivant :
*Dans la col.D le code de commande (normalement sans les doublons)
*Dans la col.E liste de valeurs de la col.B - liste de numéros de livraison (sans les doublons)
*Dans la col.F liste de valeurs de la col.C - des dates de livraison (sans les doublons)
Auras-tu la gentillesse de m'aider encore une fois, stp ?
Le reste de mes donnes je devrais pouvoir adapter toute seule, comme une grande ;)
A+,Elise
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
22 oct. 2010 à 18:42
22 oct. 2010 à 18:42
je n(ai plus ce truc en tête mais ta demande était sur 2 colonnes et tu me dis maintenant 3 colonnes... pourquoi ne l'avoir pas dit au départ ?
D'autre part j'émettais un doute sur le traitements des doublons en 2° colonne (azerty puis azer) si tu as des nombres, ce sera pareil avec 12345 puis 123...(mais pas avec 1237 ni azerh)
donc
1/regarde ces points
2/ vérifie que tu n'oublies rien ce coup ci dans ta demande
une solution VBA est à 99% unique et demande un"cahier des charges" complet et précis
au besoin met en PJ quelques lignes ( env.100)de ton classeur sans données confidentielles
pour une pièce jointe
http://cijoint.fr/
et colles le lien proposé dans ton message
D'autre part j'émettais un doute sur le traitements des doublons en 2° colonne (azerty puis azer) si tu as des nombres, ce sera pareil avec 12345 puis 123...(mais pas avec 1237 ni azerh)
donc
1/regarde ces points
2/ vérifie que tu n'oublies rien ce coup ci dans ta demande
une solution VBA est à 99% unique et demande un"cahier des charges" complet et précis
au besoin met en PJ quelques lignes ( env.100)de ton classeur sans données confidentielles
pour une pièce jointe
http://cijoint.fr/
et colles le lien proposé dans ton message
Bonsoir Michel,
Voila j'ai posté mon question avec les donnes dans :
http://www.cijoint.fr/cjlink.php?file=cj201010/cijhfPHoCl.xls
A+,Elisa
Voila j'ai posté mon question avec les donnes dans :
http://www.cijoint.fr/cjlink.php?file=cj201010/cijhfPHoCl.xls
A+,Elisa
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 23/10/2010 à 18:56
Modifié par michel_m le 23/10/2010 à 18:56
Bonjour Elisa,
Ci joint tableau avec 3 colonnes
http://www.cijoint.fr/cjlink.php?file=cj201010/cijyASCOsk.xls
j'ai annoté ta présentation bravo pour sa clarté et sa précision ;-)
edit à env 19h:
en rentrant et après des bidouillages , ne faudrait il pas en fait lier le po_pos et sa date (doublon ou pas) pour des questions de lisibilité ? je ne saisis pas bien l'intér^t d'avoir pour un code une liste de po_pos dans une colonne et une liste de dates dans une autre apparemment sans rapport
tu dis...
Ci joint tableau avec 3 colonnes
http://www.cijoint.fr/cjlink.php?file=cj201010/cijyASCOsk.xls
j'ai annoté ta présentation bravo pour sa clarté et sa précision ;-)
edit à env 19h:
en rentrant et après des bidouillages , ne faudrait il pas en fait lier le po_pos et sa date (doublon ou pas) pour des questions de lisibilité ? je ne saisis pas bien l'intér^t d'avoir pour un code une liste de po_pos dans une colonne et une liste de dates dans une autre apparemment sans rapport
tu dis...
Bonjour Michel,
Merci bcp pour ton code. Il est superbe !
Malheureusement je ne suis pas en formation VBA. J'ai juste trouvé un ami qui connait en peu vba et qui m'a décrypté ton code. Par contre on n'a pas compris comment dans le premier code la ligne de départ était définis 2 mais ton code a aussi traité la ligne 1 ?
Mon ami a appris la programmation a l'école. Moi aussi, mais j'étais nulle et c'était turbo pascal. Maintenant j'ai besoin et envie de faire des choses dans XL mais comme tu as vu je me bloque sur les choses presque banales. Heureusement qu'il y a les gens comme toi qui aide. Encore une fois merci.
PS : edit à env 19h:
En fait ca sera encore mieux de lister le numéro et sa date dans la même cellule. Ca permettra de faire des énormes économies de place dans ma matrice... mais encore fois je ne sais pas comment le faire : (
Et encore une fois on en est la, parce que comme je n'ai pas sût comment résoudre ma difficulté, j'ai détricoté mon problème jusqu'aux opérations de base sur les 2 cellules et j'ai testé les possibilités « concatenate if » malheureusement sans résultats satisfaisants. Après j'ai terminé sur le forum avec l'exemple simpliste. Comme on n'est pas bon en VBA on essaye faire ce qu'on peut avec.
Mon XL il est bcp plus compliqué que juste la liste des donnes dans une cellule. Je construis un simulateur des scenarii futures et en cas des incidents je pourra visualiser le détail de l'incident comme son numéro et sa date. Par instant je suis dans le période de conception d'approche et je n'ai pas encore reçu tout les donnes que je souhaite de traiter. C'est pourquoi j'ai constitué les donnes de test différents et avec bcp des doublons. En réalité, je ne pense pas qu'il aura bcp des doublons dans ma simulation. Et les informations listées seront juste un départ pour une autre action qui ne concerne pas ma simulation. Si tu veux en discuter plus hors forum tu pourra me donner ton e-mail.
A+,Elise
Merci bcp pour ton code. Il est superbe !
Malheureusement je ne suis pas en formation VBA. J'ai juste trouvé un ami qui connait en peu vba et qui m'a décrypté ton code. Par contre on n'a pas compris comment dans le premier code la ligne de départ était définis 2 mais ton code a aussi traité la ligne 1 ?
Mon ami a appris la programmation a l'école. Moi aussi, mais j'étais nulle et c'était turbo pascal. Maintenant j'ai besoin et envie de faire des choses dans XL mais comme tu as vu je me bloque sur les choses presque banales. Heureusement qu'il y a les gens comme toi qui aide. Encore une fois merci.
PS : edit à env 19h:
En fait ca sera encore mieux de lister le numéro et sa date dans la même cellule. Ca permettra de faire des énormes économies de place dans ma matrice... mais encore fois je ne sais pas comment le faire : (
Et encore une fois on en est la, parce que comme je n'ai pas sût comment résoudre ma difficulté, j'ai détricoté mon problème jusqu'aux opérations de base sur les 2 cellules et j'ai testé les possibilités « concatenate if » malheureusement sans résultats satisfaisants. Après j'ai terminé sur le forum avec l'exemple simpliste. Comme on n'est pas bon en VBA on essaye faire ce qu'on peut avec.
Mon XL il est bcp plus compliqué que juste la liste des donnes dans une cellule. Je construis un simulateur des scenarii futures et en cas des incidents je pourra visualiser le détail de l'incident comme son numéro et sa date. Par instant je suis dans le période de conception d'approche et je n'ai pas encore reçu tout les donnes que je souhaite de traiter. C'est pourquoi j'ai constitué les donnes de test différents et avec bcp des doublons. En réalité, je ne pense pas qu'il aura bcp des doublons dans ma simulation. Et les informations listées seront juste un départ pour une autre action qui ne concerne pas ma simulation. Si tu veux en discuter plus hors forum tu pourra me donner ton e-mail.
A+,Elise
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 26/10/2010 à 11:01
Modifié par michel_m le 26/10/2010 à 11:01
Bonjour (ou bonsoir),
ca sera encore mieux de lister le numéro et sa date dans la même cellule
OK, c'est fait; la taille des colonnes est calculée pour rentrer sur 1 A4 vertical avec des marges verticales de 1cm
je ne pense pas qu'il aura bcp des doublons dans ma simulation
j'ai donc supprimer le test "doublon"
Par contre on n'a pas compris comment dans le premier code la ligne de départ était définis 2 mais ton code a aussi traité la ligne 1 ?
j'ai mis "lig" (et les colonnes) en constante pour pouvoir faire évoluer facilement l'appli afin d'éviter d'aller trifouiller dans le code.
La fonction find recherche après une cellule de départ; syntaxe d'école find(what:=ref,after:=cells(lig,col)...
il faut donc tester si lig=1 la cellule de départ est donc la cellule d'avant soit 65536; sinon on affecte lig-1
Si tu veux en discuter plus hors forum tu pourra me donner ton e-mail.
tu peux t'inscrire sur CCM: il y a un système de message personnel. mais je ne répond pas à des questions techniques en MP sauf si problème de confidentialité.
la bête:
http://www.cijoint.fr/cjlink.php?file=cj201010/cijfyBwokg.xls
cordialement, @+
Michel
ca sera encore mieux de lister le numéro et sa date dans la même cellule
OK, c'est fait; la taille des colonnes est calculée pour rentrer sur 1 A4 vertical avec des marges verticales de 1cm
je ne pense pas qu'il aura bcp des doublons dans ma simulation
j'ai donc supprimer le test "doublon"
Par contre on n'a pas compris comment dans le premier code la ligne de départ était définis 2 mais ton code a aussi traité la ligne 1 ?
j'ai mis "lig" (et les colonnes) en constante pour pouvoir faire évoluer facilement l'appli afin d'éviter d'aller trifouiller dans le code.
La fonction find recherche après une cellule de départ; syntaxe d'école find(what:=ref,after:=cells(lig,col)...
il faut donc tester si lig=1 la cellule de départ est donc la cellule d'avant soit 65536; sinon on affecte lig-1
Si tu veux en discuter plus hors forum tu pourra me donner ton e-mail.
tu peux t'inscrire sur CCM: il y a un système de message personnel. mais je ne répond pas à des questions techniques en MP sauf si problème de confidentialité.
la bête:
http://www.cijoint.fr/cjlink.php?file=cj201010/cijfyBwokg.xls
cordialement, @+
Michel