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

Macro pour dupliquer lignes : erreur 457

  • Initiateur de la discussion Initiateur de la discussion Jen
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

Jen

Guest
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 !)
 
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".
 
Re : Macro pour dupliquer lignes : erreur 457

Bonjour Jen, Robert

pas sûr, mais rajoute peut être un point devant le "cells" :

Code:
Etiq.Add [COLOR="Red"][B].[/B][/COLOR]Cells(Cel.Row, 1).Value, Cel.Row

bon après midi
@+
 
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:
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 !)
 
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

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
@+
 
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 !
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
909
Réponses
10
Affichages
661
Réponses
4
Affichages
730
Réponses
8
Affichages
778
Réponses
2
Affichages
527
Réponses
3
Affichages
922
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…