Microsoft 365 Edition d'étiquettes en fonction du nombre de colis

AlicePrince

XLDnaute Nouveau
Bonjour à tous,

Je fais fasse à une impasse concernant la création d'une macro.
Je dois créer un outil permettant d'imprimer autant d'étiquettes que de nombre de colis.
J'ai également une contrainte de format car les étiquettes sont par 4 sur une feuille format A4 comme suit :

12
34

Jusqu'à présent, j'ai créé une macro permettant à l'utilisateur de choisir le n° de suivi + la position de l'étiquette sur laquelle il veut imprimer.
Sauf que voilà, s'il y a 3 colis, il va devoir faire la manip 3 fois en changeant à chaque fois la position de l'étiquette. (Je vous joins le fichier)

Est-il possible de faire en sorte que 3 étiquettes se génère automatiquement en une seule manip ?
J'avais trouvé une solution dans le cas d'une étiquette unique (c'est à dire, une étiquette par feuille) mais pas avec un format de 4 étiquettes par feuille.
De plus, je dois faire apparaître les n° de colis sur l'étiquette (ex : colis 1/3 ; colis 2/3 ; colis 3/3).

Est-ce possible ?

Merci d'avance car je sèche complétement.
 

Pièces jointes

  • Projet_etiquettes.xlsm
    66.3 KB · Affichages: 10
Solution
Salut,

Cela devrait fonctionner en remplaçant "etiq = lst_etiq.Value" par :
VB:
etiq = (lst_etiq.Value / 1)
"For j = 1 To (nbcolis / 1)" par :
VB:
For j = etiq To (nbcolis + etiq - 1)
Et "Sheets("Etiquettes").Cells(27 * (lig - 1) + 19, col + 1).Value = j & "/" & (nbcolis / 1)" par :
VB:
Sheets("Etiquettes").Cells(27 * (lig - 1) + 19, col + 1).Value = j - etiq + 1 & "/" & nbcolis

Nairolf

XLDnaute Impliqué
Salut,

Essaye avec ce code en remplacement du tiens :
VB:
Private Sub btn_ok_Click()

    Dim exp(), dest(), recep(), qte(), cp(), ville(), poids() As Variant

    nbexp = 7
    ReDim exp(nbexp)
    ReDim dest(nbexp)
    ReDim recep(nbexp)
    ReDim qte(nbexp)
    ReDim cp(nbexp)
    ReDim ville(nbexp)
    ReDim poids(nbexp)
    
For i = 1 To nbexp
    exp(i) = Sheets("Données").Cells(2 + i, 42).Value
    dest(i) = Sheets("Données").Cells(2 + i, 22).Value
    recep(i) = Sheets("Données").Cells(2 + i, 2).Value
    qte(i) = Sheets("Données").Cells(2 + i, 29).Value
    cp(i) = Sheets("Données").Cells(2 + i, 27).Value
    ville(i) = Sheets("Données").Cells(2 + i, 28).Value
    poids(i) = Sheets("Données").Cells(2 + i, 30).Value
Next i
    

    receplig = lst_crm.ListIndex
    etiq = lst_etiq.Value

For j = 1 To (etiq / 1)
    If j Mod 2 = 0 Then
        col = 5
        lig = j / 2
    Else
        col = 1
        lig = (j + 1) / 2
    End If
    
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 2, col).Value = "GEFCO"
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 5, col).Value = "Date édition étiquette :"
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 7, col).Value = "N° Récépissé :"
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 9, col).Value = "Expéditeur :"
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 11, col).Value = "Destinataire :"
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 13, col).Value = "CP / Ville :"
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 15, col).Value = "Nb total UM :"
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 17, col).Value = "Poids :"
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 5, col + 1).Value = Date
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 7, col + 1).Value = recep(receplig + 1)
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 9, col + 1).Value = exp(receplig + 1)
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 11, col + 1).Value = dest(receplig + 1)
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 13, col + 1).Value = cp(receplig + 1)
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 13, col + 2).Value = ville(receplig + 1)
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 15, col + 1).Value = qte(receplig + 1)
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 17, col + 1).Value = poids(receplig + 1)
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 19, col).Value = "Colis :"
    Sheets("Etiquettes").Cells(27 * (lig - 1) + 19, col + 1).Value = j & "/" & (etiq / 1)
Next j
Unload UserForm1
Sheets("Etiquettes").Activate

End Sub
 

AlicePrince

XLDnaute Nouveau
Merci beaucoup pour ton aide !
Ça a bien allégé mon code !

J'ai légèrement modifié le code que tu m'as donné pour arriver à générer automatiquement le bon nombre d'étiquettes en une seule saisie.
Ça fonctionne mais les étiquettes sont forcément générer au départ de la position 1 de ma feuille.
Or, dans le cas où j'ai 3 étiquettes générées, la 4ème étiquette de ma feuille reste vierge (ce qui est bien). Mais avec mon code actuel, cette étiquette sera perdue car à la prochaine édition d'étiquette, elles seront forcément générées à partir de la position 1.

En fait, actuellement, il faut choisir le nombre d'étiquettes qu'on veut dans la list_box des étiquettes et j'aimerai qu'on y choisisse la position de départ.
Exemple : Si choisis "2" dans la list_box étiquettes et qu'il y a 3 colis, le résultat attendu est 3 étiquettes générées à partir de la position 2.

VB:
Private Sub btn_ok_Click()


    Dim exp(), dest(), recep(), qte(), cp(), ville(), poids() As Variant

    nbexp = 7
    ReDim exp(nbexp)
    ReDim dest(nbexp)
    ReDim recep(nbexp)
    ReDim qte(nbexp)
    ReDim cp(nbexp)
    ReDim ville(nbexp)
    ReDim poids(nbexp)
    
For i = 1 To nbexp
    exp(i) = Sheets("Données").Cells(2 + i, 42).Value
    dest(i) = Sheets("Données").Cells(2 + i, 22).Value
    recep(i) = Sheets("Données").Cells(2 + i, 2).Value
    qte(i) = Sheets("Données").Cells(2 + i, 29).Value
    cp(i) = Sheets("Données").Cells(2 + i, 27).Value
    ville(i) = Sheets("Données").Cells(2 + i, 28).Value
    poids(i) = Sheets("Données").Cells(2 + i, 30).Value
Next i
    

    receplig = lst_crm.ListIndex
    etiq = lst_etiq.Value
    nbcolis = qte(receplig + 1)
  
  
For k = 1 To nbcolis

    For j = 1 To (nbcolis / 1)
        If j Mod 2 = 0 Then
            col = 5
            lig = j / 2
        Else
            col = 1
            lig = (j + 1) / 2
        End If
        
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 2, col).Value = "GEFCO"
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 5, col).Value = "Date édition étiquette :"
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 7, col).Value = "N° Récépissé :"
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 9, col).Value = "Expéditeur :"
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 11, col).Value = "Destinataire :"
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 13, col).Value = "CP / Ville :"
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 15, col).Value = "Nb total UM :"
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 17, col).Value = "Poids :"
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 5, col + 1).Value = Date
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 7, col + 1).Value = recep(receplig + 1)
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 9, col + 1).Value = exp(receplig + 1)
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 11, col + 1).Value = dest(receplig + 1)
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 13, col + 1).Value = cp(receplig + 1)
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 13, col + 2).Value = ville(receplig + 1)
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 15, col + 1).Value = qte(receplig + 1)
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 17, col + 1).Value = poids(receplig + 1)
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 19, col).Value = "Colis :"
        Sheets("Etiquettes").Cells(27 * (lig - 1) + 19, col + 1).Value = j & "/" & (nbcolis / 1)
    Next j

Next k

Unload UserForm1
Sheets("Etiquettes").Activate
 
End Sub
 

Nairolf

XLDnaute Impliqué
Salut,

Cela devrait fonctionner en remplaçant "etiq = lst_etiq.Value" par :
VB:
etiq = (lst_etiq.Value / 1)
"For j = 1 To (nbcolis / 1)" par :
VB:
For j = etiq To (nbcolis + etiq - 1)
Et "Sheets("Etiquettes").Cells(27 * (lig - 1) + 19, col + 1).Value = j & "/" & (nbcolis / 1)" par :
VB:
Sheets("Etiquettes").Cells(27 * (lig - 1) + 19, col + 1).Value = j - etiq + 1 & "/" & nbcolis
 

Nairolf

XLDnaute Impliqué
Tant mieux si ça correspond à ton besoin.

Pour l'explication du code, j'imagine que tu avais compris que la boucle sur "i" sert à remplir les array (tableau à une dimension) qui sont utilisés dans la suite du code et que la boucle sur j sert à reproduire l'étiquette selon le nombre de colis.

Ensuite il s'agit plus de maths que de programmation, je suis parti sur le principe que l'étiquette était un bloc de données avec les coordonnées col dans le sens de colonnes et lig dans le sens des lignes.

Le "si" permet donc de déterminer ces coordonnées.
Le code "If j Mod 2 = 0 Then" revient à dire "si j est pair alors", car si j est impair la position du bloc est sur la 1ère colonne, sinon elle est sur la 5ème colonne.
Concernant la position de la ligne celle-ci est l'arrondi à l'entier supérieur du nombre de colis divisé par 2.

Les lignes de code du type "Sheets("Etiquettes").Cells(27 * (lig - 1) + 2, col).Value = "GEFCO"" intègrent la valeur "27 * (lig - 1) + 2" car le premier bloc se situe à la ligne 2 et que les blocs sont espacés de 27 lignes, donc pour le premier bloc comme lig=1 sa position sera sur la ligne 2...
 

Webperegrino

XLDnaute Impliqué
Le Forum,
Bonjour à vous,
... et remplacer
VB:
Sheets("Etiquettes").Cells(27 * (lig - 1) + 5, col + 1).Value =Date
par
VB:
Sheets("Etiquettes").Cells(27 * (lig - 1) + 5, col + 1).Value = Format(Date, "dd/mm/YYYY")
Cordialement,
Webperegrino
 

Discussions similaires

Haut Bas