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

Microsoft 365 Passer des lignes quand une condition est remplie en Macro

PCharlier

XLDnaute Nouveau
Bonjour à tous!
Je débute sur VBA et je cherche à faire ceci:
J'ai une base de données en onglet "COMMANDES", dont j'aimerai pouvoir copier coller certaines colonnes (A, E, G et F dans cet ordre) dans les 4 premières colonnes d'un onglet "ETIQUETTES" quand celles de la colonne A ne sont pas vides (ça, j'ai réussi à faire!).
C'est là où ça devient plus délicat: j'aimerai faire des étiquettes de 10 lignes x 4 colonnes. On a déjà nos 4 colonnes, mais il faut que toutes les 10 lignes, je saute une ligne, et que s'il y a un changement de valeur en colonne A, on passe à la prochaine étiquette (en sautant le nombre de ligne nécessaire pour que l'étiquette fasse toujours 10 lignes).
En plus de cela, j'aimerai que les valeurs des colonnes A et B dans "ETIQUETTES" ne soient affichées qu'une fois dans la première ligne de chaque étiquette, mais je n'y suis pas encore.
Si ce n'est pas clair, j'ai mis un onglet "Target" dans le fichier joint, c'est ce que j'aimerai réaliser et automatiser dans l'onglet "ETIQUETTES".

Pour le moment mon code ressemble à ça, j'ai réussi à copier les valeurs dans l'onglet qu'il me faut, mais je n'arrive pas à passer de lignes quand une condition se réalise...

Sauriez vous m'aider?

Merci beaucoup!

VB:
Sub generationetiquettes()

'copier les colonnes dans ETIQUETTES
Sheets("COMMANDES").Range("A:A").Copy
Sheets("ETIQUETTES").Range("A1").PasteSpecial xlPasteValues
Sheets("COMMANDES").Range("E:E").Copy
Sheets("ETIQUETTES").Range("B1").PasteSpecial xlPasteValues
Sheets("COMMANDES").Range("G:G").Copy
Sheets("ETIQUETTES").Range("C1").PasteSpecial xlPasteValues
Sheets("COMMANDES").Range("F:F").Copy
Sheets("ETIQUETTES").Range("D1").PasteSpecial xlPasteValues

'supprimer les lignes sans commande dans ETIQUETTES
Sheets("ETIQUETTES").Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

'supprimer ligne 1
Sheets("ETIQUETTES").Range("A1").EntireRow.Delete

'créer les variables
'long = nombre entier
Dim wk_fichier As Workbook
Dim ws_commandes As Worksheet
Dim ws_etiquettes As Worksheet
Dim lastrow_etiquettes As Long

'assigner une valeur aux variables
Set wk_fichier = ActiveWorkbook
Set ws_commandes = wk_fichier.Worksheets("COMMANDES")
Set ws_etiquettes = wk_fichier.Worksheets("ETIQUETTES")

'identifier derniere ligne du numero de Commande dans ETIQUETTES
lastrow_etiquettes = ws_etiquettes.Cells(Rows.Count, 1).End(xlUp).Row

'commencer la boucle sur les lignes dans ETIQUETTES
    Dim i As Long
    For i = lastrow_etiquettes To 2 Step -1
        If Range("a" & i).Value <> Range("a" & i - 1).Value Then Range("a" & i).EntireRow.Insert
    Next

'enregistrer le fichier
wk_fichier.Save

End Sub
 

Pièces jointes

  • Test Stickers.xlsm
    425.7 KB · Affichages: 12
Solution
Ouf. Une nouvelle version en PJ à vérifier.
L'erreur était dans les formules, car dans certains cas une ligne était rajoutée.
Il suffit d'une ligne pour tout décaler, et ensuite comme la première cellule du bloc était vide, le nom était recopié.
J'espère que cette fois ci c'est ok.

PCharlier

XLDnaute Nouveau
Merci beaucoup Sylvanu, pour les macro et pour le détail qui aide à comprendre!
C'est presque exactement ce qu'il me faut, le seul détail est qu'en ligne 11 par exemple, on devrait retrouver le Numero de Commande ainsi que le nom du client répété, comme pour les autres étiquettes.

//EDIT: j'ai résolu le problème des messages d'erreur qui suis, ils étaient du à une liaison avec une version précédente du fichier

J'ai un autre soucis: en lançant la macro dans VBE, la macro tourne parfaitement, cependant j'ai ce message d'erreur:

De même en rajoutant un bouton pour lancer la macro, j'ai ce message d'erreur (alors qu'encore une fois la macro tourne parfaitement):

Savez vous à quoi ça peut être lié?

Merci encore pour votre aide, ça aide beaucoup!
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Pour le premier point, c'est un oubli. Rectifié en PJ.
Pour le reste, je suis dubitatif.
J'ai repasser la macro en module, plutôt que sur la page Commande où elle n'a rien à faire, mais cela ne devrait cependant pas poser de problème.
( mais j'ai suivi l'idée décrite ici )
J'ai mis un bouton sur la page Commandes.
Chez moi ( Win10, XL2007 ) tout marche. Pouvez vous tester ?
 

Pièces jointes

  • Test Stickers 5.xlsm
    458.7 KB · Affichages: 7

PCharlier

XLDnaute Nouveau
J'ai du éditer mon message un peu tard: j'ai trouvé le soucis des messages d'erreur: une liaison avec une version précédente qui "confusait" Excel. J'ai rompu la liaison, la macro marche toujours et je n'ai plus les pop up!
Merci mille fois pour votre aide, je cloture le sujet!
Excellente journée,
 

PCharlier

XLDnaute Nouveau
Bonjour Sylvanu,
Je remets en PJ le fichier car j'ai un soucis: j'ai testé avec une plage plus importante, et j'ai un bug à partir de la commande 23005, qui se répète ensuite à chaque étiquette. Impossible de comprendre pourquoi cela se produit et d'où cela peut provenir, sauriez vous m'aider?
Merci d'avance
 

Pièces jointes

  • FICHIER RECAP FIN D'ANNEE 2021.xlsm
    606.6 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ouf. Une nouvelle version en PJ à vérifier.
L'erreur était dans les formules, car dans certains cas une ligne était rajoutée.
Il suffit d'une ligne pour tout décaler, et ensuite comme la première cellule du bloc était vide, le nom était recopié.
J'espère que cette fois ci c'est ok.
 

Pièces jointes

  • FICHIER RECAP FIN D'ANNEE 2021 V3.xlsm
    657.4 KB · Affichages: 7

Discussions similaires

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