Dupliquer lignes selon une variable

de Bizemont

XLDnaute Nouveau
Bonjour à tous,

Je fais appel à votre science d'Exel car je suis maintenant un peu rouillé et je tourne en rond sur ce sujet.

J'ai un tableau Excel avec des variables allant de A2 à N6000 et j'ai besoin de dupliquer chaque ligne autant de fois que la valeur mentionnée en colonne E.
Pour être plus précis, il s'agit des résultats d'un concours et la valeur précisé à chaque ligne dans la colonne E concerne le nombre de parrainage. Le réglement stipule que chaque parrainage augmente les chances de gagner. Je veux donc inscrire le nom de chaque participant X fois.
J'ai besoin que les résultats s'inscrivent soit dans le même onglet soit dans un onglet différent, cela n'a pas d'importance.

En cherchant sur internet j'ai trouvé une macro que j'ai essayé d'adapter mais quand j'essaye de la lancer j'ai un message d'erreur : "Erreur d'exécution 91, variable objet ou variable de bloc With non définie".
Voici la macro en question :

Sub dupliquer_n_fois()
Dim Derlig1 As Long, Lig As Long, Nbre As Integer, T_in()
Dim Derlig2 As Long

Application.ScreenUpdating = False
Sheets(2).Range("A2:N6000").Clear

With Sheets(1)
Derlig1 = .Columns("A").Find("*", , , , , xlPrevious).Row
For Lig = 2 To Derlig1
Nbre = .Cells(Lig, "E")
T_in = .Range(.Cells(Lig, "A"), .Cells(Lig, "N")).Value

With Sheets(2)
Derlig2 = .Columns("A").Find("", .Range("A1")).Row
.Cells(Derlig2, "A").Resize(Nbre, 14) = T_in
End With
Next
End With
Sheets(2).Select
End Sub


La ligne qui semble poser problème est celle-ci : Derlig2 = .Columns("A").Find("", .Range("A1")).Row


Avez-vous une idée de comment corriger cette macro (ou en réaliser une autre) pour atteindre mon objectif ?

D'avance merci pour votre aide !
 

sousou

XLDnaute Barbatruc
Bonsoir
Je pense qu'il ne trouve pas de réponse à ta recherche, derlig2=0 impossible
soit tu géres ton find sans le .row, dans ce cas il te renvoi nothing si pas trouvé, et tu traite ce cas
Soit tu est sûr qu'il trouvera une réponse.
Comme tu n'as pas joint ton fichier difficile d' approfondir
 

de Bizemont

XLDnaute Nouveau
Bonsoir
Je pense qu'il ne trouve pas de réponse à ta recherche, derlig2=0 impossible
soit tu géres ton find sans le .row, dans ce cas il te renvoi nothing si pas trouvé, et tu traite ce cas
Soit tu est sûr qu'il trouvera une réponse.
Comme tu n'as pas joint ton fichier difficile d' approfondir

Merci pour ta réponse !

Malheureusement les données sont confidentiels, je ne peux pas les transmettre. Mais je t'ai représenté dans la pièce jointe ce à quoi ressemble le fichier. Il s'étend sur un peu moins de 6000 lignes et je cherche à dupliquer chaque ligne selon le nombre prévu en colonne E. Ainsi dans l'exemple j'aurais 10 fois la ligne 2, suivi de 7 fois la ligne 3, etc...

Je ne suis pas sur de comprendre ton message (désolé, je ne connais pas grand chose en macros).
J'ai essayé d'enlever le .row dans la ligne qui pose problème mais j'ai le même message d'erreur.

Comment devrais-je écrire la macro ?
 

Pièces jointes

  • Exemple.xlsx
    9.7 KB · Affichages: 139

sousou

XLDnaute Barbatruc
RE
Essai ce code

Sub duplique()
Sheets(2).UsedRange.Clear
Set premier = Sheets(1).Cells(2, 1)
n = 0
While premier.Offset(n, 0) <> ""
nb = premier.Offset(n, 4)
Call copie(premier.Offset(n, 4), nb)
n = n + 1
Wend
End Sub

Sub copie(k, nb)

For n = 1 To nb
k.EntireRow.Copy Sheets(2).Range("a1")
Sheets(2).Range("a1").EntireRow.Insert
Next

End Sub
 

de Bizemont

XLDnaute Nouveau
RE
Essai ce code

Sub duplique()
Sheets(2).UsedRange.Clear
Set premier = Sheets(1).Cells(2, 1)
n = 0
While premier.Offset(n, 0) <> ""
nb = premier.Offset(n, 4)
Call copie(premier.Offset(n, 4), nb)
n = n + 1
Wend
End Sub

Sub copie(k, nb)

For n = 1 To nb
k.EntireRow.Copy Sheets(2).Range("a1")
Sheets(2).Range("a1").EntireRow.Insert
Next

End Sub


ça marche !
Merci beaucoup pour ton aide et ta réactivité Sousou !!!

Juste pour savoir pour les prochaines fois, et éviter de te déranger encore :)
quelles sont les parties du code à changer en fonction des prochains fichiers, si nombres de colonnes, lignes, position des infos sont différentes ?
On n'a pas besoin de préciser le nombre total de colonne ? Et je ne vois pas ou est indiqué que le nombre multiplicateur se trouve dans la colonne E
 

sousou

XLDnaute Barbatruc
bonjour.
Je pars ici de la colonne a ligne deux : Set premier = Sheets(1).Cells(2, 1)
le nombre multiplicateur ce trouve à 4 colonnes: nb=premier.offset(0,4)
tant que premier+n ligne <>"" alors je copie la ligne entière autant de fois que nb
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG