Macro pour publipostage, copier ligne en fonction d'une valeur

Bonjour à tous,

Je me permets de poster une question sur ce forum car je bloque sur le développement d'un macro vba.

Je suis en train de lancer mon entreprise de vente de pantoufles et je dois créer un publipostage (word/excel) pour créer des étiquettes que j'irais coller sur mes boites de pantoufles. Jusque là pas de problème il y'a beaucoup d'informations sur internet.

Mais maintenant je n'arrive plus à avancer. En effet dans le fichier ci-joint : https://www.cjoint.com/c/HDkoJVZmbgT

-Il y'a dans la première feuille, les commandes que j'ai passé à mes fournisseurs (modèle, couleur & pointure)

Ensuite dans la deuxième feuille j'aimerais réussir à créer une macro me permettant d'aller copier les informations de la première en fonction du nombre de modèle que j'ai par pointure.

Par exemple :

Référence/Couleur/35/36/37

3086 / Rouge / 3/ 6 / 12==> dans la première feuille

Devrait arriver dans la deuxième feuille :

Ref3086 / Rouge / 35

Ref3086 / Rouge / 35

Ref3086/ Rouge / 35

Ref3086/Rouge /36

... 6 fois

Pour le 37, 12 fois

Etc

Me permettant ainsi de faire mon publipostage.

Si quelqu'un pourrais juste m'aiguiller sur la bonne voie, j'ai essayé avec l'écriture automatique de macro mais je n'arrive avec les bonnes boucles à tomber sur mes pieds.

Merci d'avance, j'espère que ma demande pourra trouver une aide.

Bonne journée à tous.

Bonjour,

tu as besoin de la fonction vba Split() qui découpe ton texte avec un "délimiteur" ,

pour toi , c'est "/"

avec : Data = "3086 / Rouge / 3/ 6 / 12"

la formule "façon 1"

Valeur36 = Val( Split( Data , "/" )(2) )

Valeur37 = Val( Split( Data , "/" )(3) )

Valeur38 = Val( Split( Data , "/" )(4) )

la formule "façon 2"

TabElement = Split( Data , "/" )

résultat :

TabElement(0) = "3086"

TabElement(1) = "Rouge"

TabElement(2) = "3"

TabElement(3) = "6"

TabElement(4) = "12"

en complément , tu as

Trim() qui supprime les espaces devant / derrière

Val() qui transforme le texte "3" en valeur 3

déclare ton tableau : Dim TabElement(20) as string

pour 0 à 4 ce serait TabElement(5) , mais tu peux prévoir large

@+JP

Bonjour JP,

Merci pour ta réponse, cependant j'ai mis les "/" pour mettre un exemple sur la discussion sans que vous ayez besoin d'ouvrir le fichier excel que j'ai uploadé.

En effet mes informations sont contenues dans des cellules différentes.

Désolé pour le dérangement.

Bonjour,

c'est quel "bout" de code qui te bloque ?

@+JP

Sub Macro3()
Dim i As Integer
Dim x As Integer
Dim j As Integer
Dim col As Integer
Dim z As Integer

With ActiveSheet
Sheets("Feuil1").Select
x = .Cells(.Rows.Count, 1).End(xlUp).Row
Endcol = .Cells(1, Cells.Columns.Count).End(xlToLeft).Column

For col = 3 To Endcol
For i = 2 To x

j = .Cells(i, col)

For z = 1 To j

Range("A" & i & ":B" & i).Select
    Selection.Copy

    Sheets("Feuil3").Select
    Range("A" & i).Select
    ActiveSheet.Paste
    Sheets("Feuil1").Select
    Cells(1, col).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil3").Select
    Range("C" & i).Select
    ActiveSheet.Paste
    Sheets("Feuil1").Select

   Next z

Next i
Next col

End With
End Sub

Voilà où j'en suis c'est vraiment nul

Range("A" & i & ":B" & i).Select

Selection.Copy

Sheets("Feuil3").Select

If Not IsEmpty(Range("A" & i)) Then

Range("A" & i + 1).Select

Else

Range("A" & i).Select

End If

ActiveSheet.Paste

Sheets("Feuil1").Select

Cells(1, col).Select

Application.CutCopyMode = False

Selection.Copy

Sheets("Feuil3").Select

If Not IsEmpty(Range("C" & i)) Then

Range("C" & i + 1).Select

Else

Range("C" & i).Select

End If

ActiveSheet.Paste

Sheets("Feuil1").Select

J'ai ajouté une fonction If qui m'a débloqué un petit peu

Voilà après un test le code marche bien que celui là ne soit pas très beau je pense, si jamais vous avez des améliorations à me suggérer je suis preneur.

Sub Macro3()
Dim i As Integer
Dim x As Integer
Dim j As Integer
Dim col As Integer
Dim z As Integer

With ActiveSheet
Sheets("Feuil1").Select
x = .Cells(.Rows.Count, 1).End(xlUp).Row
Endcol = .Cells(1, Cells.Columns.Count).End(xlToLeft).Column

For i = 2 To x

For col = 3 To Endcol

j = .Cells(i, col)

For z = 1 To j

Range("A" & i & ":B" & i).Select
    Selection.Copy

    Sheets("Feuil3").Select

    PremLigVide = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row + 1

    Range("A" & PremLigVide).Select
    ActiveSheet.Paste

    Sheets("Feuil1").Select

    Cells(1, col).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil3").Select

    Range("C" & PremLigVide).Select
    ActiveSheet.Paste
    Sheets("Feuil1").Select

   Next z

Next col

Next i

End With
End Sub

Bonjour,

il n'y a pas de code null

il y a des codes à améliorer , coté visibilité , coté rapidité,...

au départ tu écris ton code pour que çà fonctionne et après tu recodes...

pour le code suivant , j'ai testé un mini code pour savoir si c'était ok ...

à toi de faire pareil , tester des tout petit bout de code

en premier et c'est important évite au max les active.... et les select...

pour ton code

Range("A" & i & ":B" & i).Select
    Selection.Copy

    Sheets("Feuil3").Select
    Range("A" & i).Select
    ActiveSheet.Paste

tu peux écrire ou tester : Sheets("Feuil3").Range("A" & i & ":B" & i).Value = Sheets("Feuil1").Range("A" & i & ":B" & i).Value

et aussi

x = .Cells(.Rows.Count, 1).End(xlUp).Row
Endcol = .Cells(1, Cells.Columns.Count).End(xlToLeft).Column
EndLig = Sheets("Feuil1").Cells(.Rows.Count, 1).End(xlUp).Row
EndCol = Sheets("Feuil1").Cells(1, Cells.Columns.Count).End(xlToLeft).Column

@+JP

Rechercher des sujets similaires à "macro publipostage copier ligne fonction valeur"