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

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
398

Statistiques des forums

Discussions
313 205
Messages
2 096 211
Membres
106 534
dernier inscrit
JOACHIM N T