Macro pour dupliquer lignes : erreur 457

Jen

XLDnaute Nouveau
Bonjour à tous,

En cherchant sur le forum, je suis tombée sur une macro qui fait pile-poil ce dont j'ai besoin.
J'ai téléchargé le fichier donné en exemple, ça marche nickel.
J'ai copié le code pour le mettre dans mon fichier, et quand je lance la macro, ça plante :
erreur d'éxécution '457':
Cette clé est déjà associée à un élément de cette collection

Je comprends pas pourquoi. J'ai juste fait un bête copié-collé de la macro d'origine et j'ai adapté les noms à mon classeur : j'ai modifié le nom de la feuille source et la lettre de la colonne source (qui comprend le nombre de duplications à faire). Et j'ai créé la feuille "publi" qui sert de sortie.
Code:
Sub etiquette()
Dim Etiq As Object, Cel As Range
Dim DerLig As Long, I As Byte
With Sheets("R10cmf7w")
Set Etiq = CreateObject("Scripting.Dictionary")
    For Each Cel In .Range("E2:E" & .[E65000].End(xlUp).Row)
        Etiq.Add Cells(Cel.Row, 1).Value, Cel.Row
    Next Cel
    LeNombre = Etiq.items
End With
With Sheets("publi")
    For I = 0 To Etiq.Count - 1
        DerLig = .[A65000].End(xlUp).Row + 1
        .Cells(DerLig, 1).Resize(LeNombre(I), 5).Value = Cells(I + 2, 1).Resize(1, 5).Value
    Next I
End With
End Sub
Quand ça plante et que je passe en débogage, il me met sur la ligne "Etiq.Add Cells(Cel.Row, 1).Value, Cel.Row" et je vois que Cel.Row=3. Donc le For Each fait 2 tour avant de planter, je ne vois pas pourquoi.

Une idée pour m'aider ?
Merci d'avance ! :)

(j'aurais bien mis mon fichier mais je n'arrive pas à lui faire atteindre la taille de 48ko maxi !)
 

Jen

XLDnaute Nouveau
Re : Macro pour dupliquer lignes : erreur 457

Alors en effet, cette ligne empêche le message d'erreur de s'afficher.
Par contre, ça ne résout pas le problème.

Je m'explique :
Ma 1e ligne contient le nom "X" et dans une autre cellule le chiffre "5", qui est le nombre de fois que la ligne devra être dupliquée dans la feuille "publi".
Quand je lance la macro, ça part bien : 2 lignes avec X sont créés. Mais après ces 2 lignes, la macro s'arrête, alors que 5 lignes de X aurait dû être créés, et après ça aurait dû passer au nom "Y".
 

pierrejean

XLDnaute Barbatruc
Re : Macro pour dupliquer lignes : erreur 457

bonjour Jen

Salut Robert :)

A tester

remplacer
Code:
Etiq.Add Cells(Cel.Row, 1).Value, Cel.Row

par
Code:
 if not [COLOR=blue]Etiq.exists[/COLOR](Cells(Cel.Row, 1).Value) then Etiq.Add Cells(Cel.Row, 1).Value, Cel.Row

Qui offre l'avantage de ne couvrir que l'erreur provoquée par la mise en dictionnaire de 2 mots identiques
Pour ma part je ne recourt au on error resume next
Que conjointement au on error goto 0
avec entre les 2 une a 3 lignes maxi dont je sais quelle(s) erreur(s) elles peuvent produire

Edit: salut Pierrot :)

Nb: a la relecture de l'erreur d'execution j'ai l'impression d'etre dans le vrai
 
Dernière édition:

Jen

XLDnaute Nouveau
Re : Macro pour dupliquer lignes : erreur 457

Merci pour vos réponses.
Alors :
@ Pierrot93 : testé, et ça ne change rien, pas mieux pas pire !
@ pierrejean : ça me met "Sub ou Function non définie" sur le exists (désolée, je suis pas assez calée pour pouvoir corriger ça moi-même !)
 

Jen

XLDnaute Nouveau
Re : Macro pour dupliquer lignes : erreur 457

Merci pour ta correction pierrejean. Malheureusement, c'est pas mieux !

J'ai zippé mon fichier (j'y avais pas pensé avant pour réduire la taille...) et je l'ai mis en pièce jointe, en espérant que vous pourrez m'aider !
La colonne en jaune contient le nombre de fois que chaque ligne doit être dupliquée dans la feuille "publi".

Merci d'avance !
 

Pièces jointes

  • R10cmf7w_3.zip
    16 KB · Affichages: 37
  • R10cmf7w_3.zip
    16 KB · Affichages: 37
  • R10cmf7w_3.zip
    16 KB · Affichages: 38

Pierrot93

XLDnaute Barbatruc
Re : Macro pour dupliquer lignes : erreur 457

Re, bonsoir PierreJean:)

perso vois pas trop l'interet d'un "dictionary" dans ton code, ou alors quelque chose doit m'échapper.... je pense que 2 boucles imbriquées devraient suffire... enfin c'est juste un avis....

en supposant ta feuille R10... active :
Code:
Option Explicit
Sub etiquette()
Dim i As Long, j As Long
For i = 2 To Range("A65536").End(xlUp).Row
    For j = 1 To Cells(i, 5).Value
        Cells(i, 1).Resize(, 5).Copy Sheets("publi").Range("A65536").End(xlUp).Offset(1, 0)
    Next j
Next i
End Sub

bonne soirée
@+
 

Jen

XLDnaute Nouveau
Re : Macro pour dupliquer lignes : erreur 457

En effet, ça marche nickel, merci Pierrot !

Comme je l'ai dit dans mon 1er post, j'avais juste copié-collé un autre code, donc l'intérêt du "dictionary" m'échappe également totalement ;)

Par contre, ce que j'aurais aimé faire, c'est numéroter chaque ligne dupliquée.
D'après ce que je comprends, la variable "j" contient le numéro de ligne, mais comment je fais pour le positionner sur la ligne en question ?
Car en fait le code ne positionne pas les lignes avec des variables comme i ou j, mais il les positionne automatiquement sur la dernière ligne, c'est ça ?
Donc comment j'insère un Cells(...,...).Value=j là dedans ?

Merci !
 

Pierrot93

XLDnaute Barbatruc
Re : Macro pour dupliquer lignes : erreur 457

Re

modifie comme suit si j'ai bien compris :

Code:
Option Explicit
Sub etiquette()
Dim i As Long, j As Long
For i = 2 To Range("A65536").End(xlUp).Row
    For j = 1 To Cells(i, 5).Value
        With Sheets("publi").Range("A65536").End(xlUp)
            Cells(i, 1).Resize(, 5).Copy .Offset(1, 0)
            .Offset(1, 5).Value = j
        End With
    Next j
Next i
End Sub
 

pierrejean

XLDnaute Barbatruc
Re : Macro pour dupliquer lignes : erreur 457

Re

Si tu tiens a ton dictionnaire
Explication: j'ai ajouté dans le dictionnaire la colonne B afin d'eviter les doublons (c'etaient bien eux qui provoquaient l'erreur)
 

Pièces jointes

  • R10cmf7w_3.zip
    15.7 KB · Affichages: 34
  • R10cmf7w_3.zip
    15.7 KB · Affichages: 32
  • R10cmf7w_3.zip
    15.7 KB · Affichages: 35

Statistiques des forums

Discussions
312 670
Messages
2 090 749
Membres
104 647
dernier inscrit
Stephbac