Microsoft 365 Transposer lignes vers planche d'étiquette

Tophe2845

XLDnaute Nouveau
Bonjour à tous
Lecteur régulier du forum , celui-ci m'a souvent sauvé la mise sur certains projets , cependant aujourd'hui je bute sur un problème que j'ai du mal à solutionner , je fais donc appel a vous , je pense que la solution doit être simple , mais je maitrise mal les boucles en VBA

je cherche a créer un module VBA pour transposer les lignes de la feuille "Report" vers une feuille "Eti"
"Report" est alimenté par une macro qui fait un copié collé des valeurs d'une autre feuille contenant des formules , filtré pour supprimer les valeurs nulle et contient 2000 lignes maximum
"Eti" est une feuille mise en forme pour correspondre à des planches d'étiquettes A4 ( 8 étiquettes au format paysage) , tout effacement de cette feuille doit conserver la mise en forme , entre chaque étiquette ( qui contient 9 champs) une ligne vide est présente
Je pense qu'il faut constituer une boucle qui vérifie la feuille "Report" jusqu'a la première ligne vide puis un collage transposé des valeurs vers la feuille "Eti" par contre je n'arrive pas à mettre en forme pour qu'a la 4eme colonne le collage se fasse 10 lignes plus bas

Je joins un exemple anonymisé avec le résultat souhaité

Merci par avance pour l'aide que vous pourrez m'apporter
 

Pièces jointes

  • Etiquettes.xlsx
    17.3 KB · Affichages: 11
Solution
Bonjour Tophe,
Un essai en PJ avec :
VB:
Sub Etiquettes()
Dim L As Integer, C As Integer, Leti As Integer, Ceti As Integer, NoBloc As Integer
Sheets("Eti").Range("A1:D1000").ClearContents    ' Efface contenu étiquettes
Derlig = Sheets("Report").Range("A65500").End(xlUp).Row ' Calcul nb lignes de report
Leti = 1: Ceti = 1      ' Ligne colonne dans feuille Eti
NoBloc = 1              ' Donne le N° de bloc ( 1 bloc c'est 4 étiquettes horizontales )
For L = 1 To Derlig     ' Pour toutes les lignes de report
    For C = 1 To 9      ' Pour chaque colonne de Report
        Sheets("Eti").Cells(Leti, Ceti) = Sheets("report").Cells(L, C)
        Leti = Leti + 1 ' Ligne suivante
    Next C
    ' Gestion Ligne Colonne de Eti
    Ceti = Ceti + 1...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Tophe,
Un essai en PJ avec :
VB:
Sub Etiquettes()
Dim L As Integer, C As Integer, Leti As Integer, Ceti As Integer, NoBloc As Integer
Sheets("Eti").Range("A1:D1000").ClearContents    ' Efface contenu étiquettes
Derlig = Sheets("Report").Range("A65500").End(xlUp).Row ' Calcul nb lignes de report
Leti = 1: Ceti = 1      ' Ligne colonne dans feuille Eti
NoBloc = 1              ' Donne le N° de bloc ( 1 bloc c'est 4 étiquettes horizontales )
For L = 1 To Derlig     ' Pour toutes les lignes de report
    For C = 1 To 9      ' Pour chaque colonne de Report
        Sheets("Eti").Cells(Leti, Ceti) = Sheets("report").Cells(L, C)
        Leti = Leti + 1 ' Ligne suivante
    Next C
    ' Gestion Ligne Colonne de Eti
    Ceti = Ceti + 1     ' Prochaine colonne
    If Ceti = 5 Then    ' Si 5eme colonne alors
        Ceti = 1        ' On revient à la première colonne
        Leti = Leti + 1 ' On passe à ligne +1
        NoBloc = NoBloc + 1 ' 4 étiquettes étant générées on passe au bloc suivant
    Else
        Leti = 10 * NoBloc - 9    ' Sinon si pas 5eme colonne, on recalcul le No de ligne ( NoLigne=10 NoBloc - 9)
    End If
Next L
End Sub
Il faut gérer ligne colonne report et ligne colonne Eti de façon indépendante, et compter le nombre de fois qu'on a générer 4 étiquettes pour passer 10 lignes plus bas.
 

Pièces jointes

  • Etiquettes.xlsm
    33.4 KB · Affichages: 11

Tophe2845

XLDnaute Nouveau
Bonjour Sylvanu

Cela parait si simple quand on maitrise pleinement le VBA , j'ai encore des progrès a faire , j'avais cette idée précise de colonne =4 alors on descend de 9 lignes mais j'étais incapable de le mettre en forme
Merci beaucoup pour cette procédure très bien commentée que je pourrais ajuster si besoin
 

Tophe2845

XLDnaute Nouveau
Bonjour

Un grand merci pour cette fonctionnalité qui me sert toujours aujourd'hui , cependant afin de ne pas gacher les planches d'étiquettes entamées , je souhaite choisir la première etiquette à imprimer , j'ai ajouté un userform pour choisir l'étiquette de départ ( dans mon fichier source ça fonctionne jusqu'a l'étiquette 4 , mais a la 5eme etiquette c'est là que les problèmes commencent ) par contre dans la copie fournie ça ne marche pas quelque soit la saisie dans l'userform
Je suis a votre disposition pour tout renseignement complémentaire , au cas ou mon explication ne serait pas claire
 

Pièces jointes

  • Etiquettes_v2.xlsm
    41.6 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Tophe,
Pas tout compris, dans votre userform vous écrivez : 1234 et 5678, à quoi cela correspond il ?
En PJ sur appui sur le bouton il faut entrer le N° de la première étiquette choisie, un des nombres de la colonne D de Report.
 

Pièces jointes

  • Etiquettes_v3.xlsm
    41.4 KB · Affichages: 6

Tophe2845

XLDnaute Nouveau
Merci pour votre retour rapide
1234 5678 correspond à la position de la première étiquette à imprimer , toutes les valeurs de la feuille "report" sont à imprimer , il s'agit juste de décaler l'impression de 1 à 8 etiquette
Si on imagine une planche d'étiquette de 8 au format paysage la 1ere etiquette est en haut à gauche et la 8eme etiquette en bas à droite , j'ai réussi à reproduire le fonctionnement du fichier original dans la pj
Cela fonctionne jusqu'a la 4eme etiquette , a la 5eme cela plante ( au deuxieme bloc )
Pour le fichier envoyé je n'ai pas compris le fonctionnement
 

Pièces jointes

  • Etiquettes_v3.xlsm
    43.3 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
il s'agit juste de décaler l'impression de 1 à 8 etiquette
Désolé, je ne comprends pas.
Peux être que quelqu'un d'autre se montrera plus perspicace.
Pour le fichier envoyé je n'ai pas compris le fonctionnement
Je pensais qu'il fallait imprimer par ex de l'étiquette N°536 à la fin. Donc dans l'uerform on entrait 536. Donc à coté de la plaque.
Sorry.
 

Tophe2845

XLDnaute Nouveau
Les planches d'etiquette se présentent comme ceci , il faut l'imaginer au format paysage , la feuille eti du fichier excel représente ces planches
les cellules A1 à A10 représentent la première etiquette B1 à B10 la 2eme et ainsi de suite
Dans le cas d'une planche entamée , je souhaite faire demarrer l'impression sur l'une de ces 8 etiquette au choix , imaginons qu'il manque 4 etiquettes ( au format paysage les 4 etiquettes du haut de la feuille ) je souhaite commencer l'impression à la 5eme etiquette ( au format paysage la première etiquette en bas a gauche )
Je ne sais pas si c'est plus clair
1626964359395.png
 

Discussions similaires

Statistiques des forums

Discussions
314 850
Messages
2 113 552
Membres
111 898
dernier inscrit
jerry jp72