Copier coller sur un autre onglet
Bonjour le forum
Voilà après avoir bien regardée les questions qui ont été déjà posées je n'arrive pas à trouver une solution à mon problème.
J'ai fait une VBA pour copier coller valeur sur plusieurs onglets, hélas j'ai une erreur d’exécution 1004
Je mets en pièce jointe le test
Merci
Bonjour,
Les instructions "Select" sont parfaitement inutiles, chez moi ta procédure fonctionne écrite ainsi :
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Range("D2:D4").Copy
Range("F2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheets("Feuil2").Range("D2:D4").Copy
Range("E2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheets("Feuil1").Activate
Application.CutCopyMode = False
End SubBonjour,
Une autre proposition.
Cdlt.
Private Sub CommandButton1_Click()
Range("F2:F4").Value = Range("D2:D4").Value
With Sheets("Feuil2")
.Range("E2:E4").Value = .Range("D2:D4").Value
End With
End SubBonjour à tous,
hélas j'ai une erreur d’exécution 1004
, est ce que vous savez pourquoi ?
Le code de Pedro est excellent.
Mais si tu tiens à comprendre l'erreur 1004 de ton fichier ... c'est que le code, de ton fichier, est dans la "Feuil1" et tu veux sélectionner des objets dans la "Feuil2".
Si tu avais placé ton code dans un Module, il n'y aurait pas eu d'erreur.
Les "Select" proviennent de l'enregistrement automatique ... ce qui peut parfois être intéressant pour connaître des mots clés et du code.
Mais, il faut ensuite éliminer les select comme le démontre les codes de Pedro et de Jean-Eric.
ric
Autre précision utile, le code de Jean-Eric est moins gourmand et plus simple à comprendre. Je m'explique :
Je suppose que ta macro est inspirée de ce que tu ferais en tant qu'utilisateur pour reporter les valeurs, à savoir :
- -> Je sélectionne les données à reporter (instruction "Select")
- -> Je copie (instruction "Selection.Copy")
- -> Je sélectionne l'endroit où coller (nouvelle instruction "Select")
- -> Je fais un collage spécial pour ne conserver que les valeurs ( "Selection.PasteSpecial")
Sauf que l'intérêt d'une macro n'est pas de mimer un utilisateur :
- -> Pas besoin de voir les donner à traiter (donc pas besoin de se trouver sur la bonne feuille à chaque fois,, ni "Activate" ni "Select" du moment que l'on précise sur quoi on travail)
- -> Pas besoin de les sélectionner (pas de "Select")
- -> Pas besoin de charger en mémoire tous les éléments (valeurs + formules + mise en forme...) pour ne garder que les valeurs
Au final, le plus simple (et le plus "light" en code et en ressources) est donc de dire à VBA : ICI tu mets la valeur contenue LA-BAS !
ahhhhh j'ai compris, merci beaucoup pour cette information, je pensais que je devais toujours détailler au maximum.
Dans tout les cas merci à vous 4 j'ai intégré le code de Jean Éric et ça fonctionne à merveille (et dire que ça fait une semaine que je cherche sur les forums la solution...)
Quitte à me répéter merci encore messieurs
Et bonne journée
Au nom de tous...
ric
Je confirme elle fonctionne à merveille :
Private Sub CommandButton1_Click()
If MsgBox("ATTENTION LE FICHIER VA METTRE À JOUR LES N-1 SUR 4 ONGLETS POUR CLÔTURE ? PENSER À ACTIVER L'ENSEMBLE DES CALCULS MACROS", vbOKCancel, _
"MISE À JOUR N-1 POUR CLÔTURE") = vbCancel Then Exit Sub
Application.ScreenUpdating = False
Range("H12:H56").Value = Range("G12:G56").Value
Range("M12:M56").Value = Range("L12:L56").Value
With Sheets("Calculateur")
.Range("Q41:Q67").Value = .Range("P41:P67").Value
.Range("Q74:Q166").Value = .Range("P74:P166").Value
.Range("Q173:Q265").Value = .Range("P173:P265").Value
.Range("Q272:Q364").Value = .Range("P272:P364").Value
.Range("Q371:Q463").Value = .Range("P371:P463").Value
.Range("Q470:Q562").Value = .Range("P470:P562").Value
.Range("Q569:Q661").Value = .Range("P569:P661").Value
.Range("Q668:Q760").Value = .Range("P668:P760").Value
.Range("Q767:Q859").Value = .Range("P767:P859").Value
.Range("Q866:Q958").Value = .Range("P866:P958").Value
End With
With Sheets("Recap Atelier")
.Range("K13:K184").Value = .Range("J13:J184").Value
End With
With Sheets("DAD")
.Range("J7:M9").Value = .Range("F7:I9").Value
.Range("J17:M19").Value = .Range("F17:I19").Value
.Range("J23:M40").Value = .Range("F23:I40").Value
.Range("J49:M51").Value = .Range("F49:I51").Value
.Range("J55:M72").Value = .Range("F55:I72").Value
.Range("J81:M83").Value = .Range("F81:I83").Value
.Range("J87:M104").Value = .Range("F87:I104").Value
.Range("J113:M115").Value = .Range("F113:I115").Value
.Range("J119:M136").Value = .Range("F119:I136").Value
.Range("J145:M147").Value = .Range("F145:I147").Value
.Range("J151:M168").Value = .Range("F151:I168").Value
.Range("J177:M179").Value = .Range("F177:I179").Value
.Range("J183:M200").Value = .Range("F183:I200").Value
.Range("J209:M211").Value = .Range("F209:I211").Value
.Range("J215:M232").Value = .Range("F215:I232").Value
.Range("J241:M243").Value = .Range("F241:I243").Value
.Range("J247:M264").Value = .Range("F247:I264").Value
.Range("J273:M275").Value = .Range("F273:I275").Value
.Range("J279:M296").Value = .Range("F279:I296").Value
End With
End Sub
Je vous remercie encore, je vais gagner du temps et surtout ça va m'empêcher de faire une bêtise