XL 2016 VBA - Dupliquer des données en fonction de quantités se trouvant dans différentes colonnes

EmileRoss

XLDnaute Nouveau
Bonjour,

En préambule, je précise que mes connaissances de VBA sont très limitées ; vous trouverez en pièce jointe le fichier permettant d'illustrer ma question.

J'ai créé (avec inspiration trouvée sur internet) une macro me permettant de dupliquer un certain nombre d'infos se trouvant dans un premier onglet "data" (Date, Produit, Colisage, Fournisseur, Certification), que j'utilise ensuite pour un publipostage Word et l'impression d'étiquettes. Mais je ne parviens pas à dupliquer toutes les infos dont j'ai besoin, qui se trouvent dans les colonnes K a AA (code client et quantité par client ) dans le fichier en pièce jointe.

Dans l'onglet "data": toutes les infos à disposition
Dans l'onglet "impression": ce que j'arrive à dupliquer aujourd'hui
Dans l'onglet "impression_resultat souhaité": ce que j'aimerais arriver à dupliquer (objet de ce message).

Pouvez-vous m'apporter votre aide, c'est à dire me guider pour compléter ma macro pour dupliquer le code client ainsi que la quantité par client ?
Je précise également que le code "original" doit probablement pouvoir être simplifié

Merci, Emile
 

Pièces jointes

  • Etiquettes B2B.xlsm
    37.9 KB · Affichages: 13

job75

XLDnaute Barbatruc
Bonjour EmileRoss, bienvenue sur XLD,

Voyez le fichier joint et cette macro dans le code de la feuille "Impression" :
VB:
Private Sub Worksheet_Activate()
Dim ncol%, nlig&, tablo, resu(), j%, i&, n&
With Sheets("Data").UsedRange
    ncol = 10 + Application.CountIf(.Rows(1), "Client*")
    nlig = .Rows.Count
    tablo = .Resize(, ncol)
End With
ReDim resu(1 To Rows.Count, 1 To 8)
For j = 11 To ncol
    For i = 2 To nlig
        If tablo(i, j) > 0 Then
             n = n + 1
             resu(n, 1) = tablo(i, 1) 'date
             resu(n, 2) = tablo(i, 4)
             resu(n, 3) = tablo(i, 7)
             resu(n, 4) = tablo(i, 2)
             resu(n, 5) = tablo(i, 8)
             resu(n, 6) = "=TEXT(RC[-2],""000"")"
             resu(n, 7) = Mid(tablo(1, j), 8, 3) 'client
             resu(n, 8) = tablo(i, j) 'Qté copiée
        End If
Next i, j
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] '1ère cellule de restitution, à adapter
    If n Then .Resize(n, 8) = resu
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 8).ClearContents 'RAZ en dessous
End With
End Sub
Elle se déclenche quand on active la feuille.

A+
 

Pièces jointes

  • Etiquettes B2B(1).xlsm
    26.9 KB · Affichages: 5

EmileRoss

XLDnaute Nouveau
Bonjour @job75 , et un grand merci pour votre aide , solution et votre message de bienvenue!

Il me reste à comprendre votre code, cela semble plutôt efficace. Petit bémol, car j'avais besoin que le code duplique en autant de ligne que la quantité copiée ; dans votre fichier et pour exemple : cerfeuil bottes devrait apparaitre sur 4 lignes différentes = 4 etiquettes différentes. Mais je crois que je vais pouvoir m'en sortir comme cela :)

En tout cas, très impressionné par votre solution.

A bientôt
 

Statistiques des forums

Discussions
298 015
Messages
1 965 154
Membres
200 865
dernier inscrit
lylia654