Passer d'une ligne à plusieurs en fonction des données présentes dans chaque lignes

jomier

XLDnaute Nouveau
Bonjour,

Objectif :
Faire un publipostage (ça je sais faire)

Problème :
Je dois décomposer des données actuellement sur 1 lignes et X colones en autant de lignes que la quantités de chaque colonne mentionne...

Je vous ai mis une exemple en PJ
D'avance merci
 

Pièces jointes

  • New Microsoft Excel Worksheet.xlsx
    9.5 KB · Affichages: 19

jomier

XLDnaute Nouveau
Hello,

Merci pour le retour, c'est exactement cela, maintenant je ne suis pas un expert VBA mais en bidouillant je me rapproche de la solution.
Cependant je tombe sur l'erreur 9...

Voilà la macro ajusté a mon tableau:

Sub decomp()
Dim Tabinit() As Variant
Tabinit = Range("E7:AG" & Range("E" & Rows.Count).End(xlUp).Row).Value

For i = LBound(Tabinit, 1) To UBound(Tabinit, 1)
For col = 6 To 33
nbrepet = Tabinit(i, col)
If nbrepet <> "" Then
last = Range("F" & Rows.Count).End(xlUp).Row + 1
Range("AI" & last).Resize(nbrepet) = Tabinit(i, 1)
Range("AI" & last).Offset(0, col - 1).Resize(nbrepet) = 1
End If
Next col
Next i
End Sub

Je peux aussi envoyer le fichier final mais je dois d'abord le purger d'infos confidentielles
Merci
 

vgendron

XLDnaute Barbatruc
Re

Alors, voici une autre version, avec des commentaires pour expliquer ce que chaque ligne de code effectue
ici: je colle le résultat dans ta feuille 2 à partir de la colonne A
si tu souhaites rester sur la feuille 1
soit tu supprimes le with sheets("sheet2") et tu enlèves les Points devant les .Range .rows
soit. ce qui me semble mieux . tu remplaces Sheets("Sheet2") par Sheets("Sheet1")

VB:
Sub decomp2()
Dim Tabinit() As Variant
Tabinit = Range("E7:AG" & Range("E" & Rows.Count).End(xlUp).Row).Value ' récupère le tableau en colonnes E à AG+ - avec toutes les lignes

For i = LBound(Tabinit, 1) To UBound(Tabinit, 1) 'pour i allant de la première à la dernière ligne du tablo
    For col = 2 To UBound(Tabinit, 2) 'pour col de 2 à la dernière colonne du tablo
        nbrepet = Tabinit(i, col) 'on récupère le nombre de répétitions
        If nbrepet <> "" And nbrepet <> 0 Then 'si il y a une valeur
            With Sheets("Sheet2") 'dans la feuille 2
                last = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on récupère la première ligne vide de la colonne A
                .Range("A" & last).Resize(nbrepet) = Tabinit(i, 1) 'on colle le Codes autant de fois qu'il le faut
                .Range("A" & last).Offset(0, col - 1).Resize(nbrepet) = 1 'à coté. sur la bonne colonne, on colle un 1
            End With
        End If
    Next col
Next i
End Sub
 

jomier

XLDnaute Nouveau
Merci, je me rapproche de la solution car toutes les données viennent maintenant en bas de mon tableau initial:
- comment les paramétrer pour quelles aillent où je le souhaite?
- comment faire reproduire le code identifiant la donnée (colonne A dans mon premier tableau)
 

vgendron

XLDnaute Barbatruc
C'est dans cette partie que ca se passe
VB:
With Sheets("Sheet2") 'dans la feuille 2
                last = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'on récupère la première ligne vide de la colonne A
               .Range("A" & last).Resize(nbrepet) = Tabinit(i, 1) 'on colle le Codes autant de fois qu'il le faut
                .Range("A" & last).Offset(0, col - 1).Resize(nbrepet) = 1 'à coté. sur la bonne colonne, on colle un 1
           End With

Last étant la ligne ou tu souhaites coller
A, la colonne

mais la. sans fichier exemple. ca va etre dur
suffirait d'une feuille avec des datas bidons comme tu as fait dans ton premier fichier. mais en disant précisement où sont les datas d'entrée, et où tu souhaites les coller
 

jomier

XLDnaute Nouveau
Ton explication est claire, j'ai pu m'en sortir!

Dernière question :) manque de précision de la question initiale ...
En plus de l'identifiant de chaque ligne, je souhaiterai que le fichier duplique aussi du texte (voir PJ ajusté)

J'imagine que c'est possible?
 

Pièces jointes

  • New Microsoft Excel Worksheet.xlsx
    9.6 KB · Affichages: 16

Discussions similaires

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83