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

Microsoft 365 Macro ou autre pour préparer fichier publipostage

mozza

XLDnaute Nouveau
Bonjour à tous,

Afin de préparer un fichier publipostage à destination d'un client, je dois mettre en forme celui-ci à la main. Je m'explique :
Ma feuille Excel regroupe des siret, des n°de magasins et des salariés, il y a une ligne par salarié. Pour le publipostage le fichier ne doit plus comporter qu'une ligne par magasin et siret. Ce qui veut dire que dans la colonne des noms, ils sont regroupés dans 1 seule cellule pour 1 mag et siret (voir Fichier en PJ). Aujourd'hui je fais ça à la main mais j'imagine qu'il y a moyen d'automatiser cela par une macro ou autre chose ?

Merci de votre aide
 

Pièces jointes

  • Classeur1.xlsx
    10.2 KB · Affichages: 6

chris

XLDnaute Barbatruc
Bonjour
Assez simple à faire avec PowerQuery, intégré à Excel
Quand la source évolue, actualiser le résultat par un clic droit dans le tableau
 

Pièces jointes

  • Regroupement_PQ.xlsx
    19.2 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Mozza, Chris,
Et pour ceux qui n'ont pas PQ, et comme c'est fait, une solution VBA.
Il suffit de sélectionner la feuille "résultat souhaité" la macro s'exécute automatiquement :

VB:
Sub Worksheet_Activate()
Dim DL%, L%, i%, Chaine$, Numéro
[A:C].Clear                                                                     ' suppression colonnes A:C
Application.ScreenUpdating = False                                              ' figeage écran
DL = Sheets("Source").Cells(Cells.Rows.Count, "A").End(xlUp).Row                ' dernière ligne de la source
tablo = Sheets("Source").Range("A1:C" & DL).Value                               ' données source dans tableau
Range("A1:C" & DL) = Sheets("Source").Range("A1:C" & DL).Value                  ' copie données source dans feuille
[A:C].Resize(DL).Sort key1:=[B1], order1:=xlAscending, Header:=xlYes            ' tri sur N°
[A:C].RemoveDuplicates Columns:=2, Header:=xlYes                                ' suppression doublons
[A:A].NumberFormat = "0"                                                        ' format correct pour Siret
DL = Cells(Cells.Rows.Count, "A").End(xlUp).Row                                 ' dernière ligne de feuille
Range("A1:C" & DL).Borders.Weight = xlThin                                      ' quadrillage
For L = 2 To DL                                                                 ' pour toutes les lignes
    Numéro = Cells(L, "B"): Cells(L, "C") = "": Chaine = ""                     ' mémorisation N°, et init variables
    For i = 2 To UBound(tablo)                                                  ' pour toutes données de source
        If tablo(i, 2) = Numéro Then Chaine = Chaine & tablo(i, 3) & Chr(10)    ' si même N° on l'ajoute
    Next i
    Cells(L, "C").FormulaR1C1 = Mid(Chaine, 1, Len(Chaine) - 1)                 ' à la fin on range le résultat
Next L
[A:C].VerticalAlignment = xlCenter                                              ' mise en forme vertical
[B:B].HorizontalAlignment = xlCenter                                            ' et horizontal
End Sub
 

Pièces jointes

  • Classeur1.xlsm
    19.6 KB · Affichages: 3

Discussions similaires

Réponses
1
Affichages
578
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…