Copier/coller cellules a choix multiples

Bonjour a tous,

j ai trouvé des pistes mais pas la solution a mon probleme. Je veux copier coller des plages (dont certaines a choix multiples) d une feuille vers une autre et que les plages une fois collées occupent la meme position que la 1ere feuille.

concretement j ouvre ma feuille1 , je la renomme sous un autre nom feuille2. J ouvre les 2 feuilles en meme temps. Je voudrai copier coller de la feuille 1 vers la 2.

j ai preparé un fichier simplifié de ce dont j ai besoin. Les cellules en jaunes sont celles a copier/coller (coller les valeurs uniquement).

J ai trouvé sur differents forums des codes qui ressemblent a ma demande, mais j arrive pas a les adapter. Les plages sont assez grandes, il devrait y avoir entre 1200-1500 cellules a traiter a chaque fois, je ne sais pas si important ou pas pour la methode a utiliser.

merci pour votre aide

Floreli

11copiercoller.xlsm (26.32 Ko)

Bonjour ,

la grandeur de la plage n'a pas d'importance pour ce type de code,

à tester,

Sub test()
Dim sh1 As Worksheet, sh2 As Worksheet, adresse As String

adresse = "A1:I33"  ' à adapter

Set sh1 = Sheets("1")
Sheets.Add After:=Sheets(Sheets.Count)
Set sh2 = ActiveSheet

sh1.Range(adresse).Copy
sh2.Activate
Range(adresse).PasteSpecial Paste:=xlPasteFormats
sh2.Range(adresse) = sh1.Range(adresse).Value

sh2.Name = "MaNouvelleFeuille"  ' à adapter
Application.Goto sh2.Range("A1")
End Sub

Bonjour Isabelle et merci d avoir pris le temps de chercher.

J ai mis en place le code proposé. Mais il ne fait pas exactement ce que je souhaite. Je pense (avec mes faibles connaissances VBA) qu il me faut 2 procedures differentes. Une qui copie, et une autre qui colle. Je ne souhaite pas copier et coller dans le meme classeur, mais bien dans un autre classeur mais qui aura exactement la meme structure que le premier.

J ai un classeur vierge avec mes menus deroulants,... je prends ce classeur, je le renomme en fichier 1, je le remplis et le sauvegarde.

je reprends mon classeur vierge, je le renomme en fichier 2. Donc la seule difference entre 1 et 2 c est que 1 est rempli et 2 n est pas rempli. Mais la structure des 2 fichiers est la meme. Memes noms de feuilles, memes menu deroulants, ....et la je souhaite copier certaines plages de la feuille 1 de mon fichier 1 vers la feuille 1 de mon fichier 2 en faisant en sorte que les adresses des plages suivent bien et qu il y ait la possibilité une fois collé, de pouvoir utiliser les menus deroulant.

j arrive avec ton aide a faire a peu pres tout ca, sauf que :

1/ pour la selection de la plage a copier, il faut vraiment que je puisse selectionner que les plages en jaunes et pas tout en une seule fois avec une seule plage. (j ai des colonnes masquées avec des formules au milieu que justement je ne veux pas copier/coller)

2/ je n arrive a faire en sorte que les menus déroulants soient utilisables dans le fichier 2. les menus sont vides. je pensais qu en faisant uniquement coller les valeurs, ca ne poserait pas de problemes justement pour les menus deroulants....

je joints les 2 fichiers, fichier 1 et fichier 2 pour essayer d etre plus clair. Je veux copier les plages en jaunes du ficher 1 vers le fichier 2 en gardant les adresses des plages et en faisant en sorte de pouvoir utilser les menus deroulants une fois collé.

Merci pour ton aide precieuse.

floreli

5fichier-1.xlsm (22.83 Ko)
4fichier-2.xlsm (22.80 Ko)

re,

à tester,

Sub test()
Dim sh1 As Worksheet, sh2 As Worksheet, adresse As String

chemin = ActiveWorkbook.Path
leFichier = chemin & "\fichier2.xlsx"  'à adapter

adresse = "A1:I33"  ' a adapter

Set sh1 = Sheets("1")
Sheets.Add After:=Sheets(Sheets.Count)
Set sh2 = ActiveSheet

sh1.Range(adresse).Copy
sh2.Activate
Range(adresse).PasteSpecial Paste:=xlPasteFormats
sh2.Range(adresse) = sh1.Range(adresse).Value

sh2.Name = "2"  ' a adapter
Application.Goto sh2.Range("A1")
sh2.Move

ActiveWorkbook.SaveAs leFichier
End Sub

Merci pour ton temps mais cette macro ne fait pas ce dont j a besoin. elle copie dans une nouvelle feuille du meme classeur, et erreur d exectution car pas possible de copier plusieurs plages.

je pense vraiment que ce n est pas possible en une seule procedure car je ne connais pas a l avance les noms de mes 2 fichiers, la source et la cible.

Je pense qu il me faut une macro qui copie des selections multiples a leurs adresses, et une autre macro qui me colle ces selections aux meme adresses.

je suis sur mon fichier source, j actionne ma macro qui copie, j ouvre mon fichier cible a la bonne feuille et je actionne ma macro qui colle.

j ai essayé des choses avec ubound, range(cel.adress), et d autres encore mais je n y arrive pas....

Mon premier probleme est donc de copier des selection multiples !

j arrive a ca pour le moment, mais ne copie que range2, pas range1...

Sub Copieselectionmultiple()

Dim range1 As Range, range2 As Range, multipleRange As Range

Set range1 = Range("A5:A20")
Set range2 = Range("C22:F32")
Set multipleRange = Union(range1, range2)

For Each cellrange In multipleRange.Areas
    cellrange.Copy

Next cellrange
End Sub

re,

à tester,

Sub test()
Dim sh1 As Worksheet, sh2 As Worksheet, adresse, i As Integer

chemin = ActiveWorkbook.Path
leFichier = chemin & "\fichier2.xlsx"  'à adapter

adresse = Array("A5:A20", "C22:F32")  ' a adapter

Set sh1 = Sheets("1")
Sheets.Add After:=Sheets(Sheets.Count)
Set sh2 = ActiveSheet

For i = LBound(adresse) To UBound(adresse)
    sh1.Range(adresse(i)).Copy
    sh2.Activate
    Range(adresse(i)).PasteSpecial Paste:=xlPasteFormats
    sh2.Range(adresse(i)) = sh1.Range(adresse(i)).Value
Next i

sh2.Name = "2"  ' a adapter
Application.Goto sh2.Range("A1")
sh2.Move

ActiveWorkbook.SaveAs leFichier
End Sub

ok merci le code fonctionne bien, mais encore une fois cela ne correspond pas a mon besoin.

je ne veux pas que la macro ouvre un 2eme classeur. C est l utilisateur qui gere le classeur source et le classeur cible.

je veux traduire ca en VBA, en 2 macros bien distinctes, une qui copie, une qui colle :

Sub copier()
Dim plages As Range      ' les differentes plages a copier
plages = activesheeet.Array("A5:A20", "C22:F32")  ' plages multiples a adapter
plages.Select
Selection.Copy

End Sub

---------------------------------------------------------------------------------------

Sub coller()
ActiveSheet.Selection.Paste   'copier les plages aux memes adresses ?
End Sub

ok merci le code fonctionne bien, mais encore une fois cela ne correspond pas a mon besoin.

je ne veux pas que la macro ouvre un 2eme classeur. C est l utilisateur qui gere le classeur source et le classeur cible.

au lieu de déplacer la nouvelle feuille dans un nouveau classeur, ce que fait le code suivant

sh2.Move

on peut déplacer la nouvelle feuille dans un classeur existant et ouvert.

sh2.Move Before:=Workbooks("fichier2.xlsx").Sheets(1)

mais justement je ne veux ni creer une nouvelle feuille, ni deplacer une feuille. Je ne peux pas non plus travailler avec les chemins de mes fichiers, car je ne connais pas leurs noms a l avance, et ils changent a chaque fois.

je reexplique ....

j ai mon fichier initial vierge qui contient ma macro copier et ma macro coller. Je l ouvre, le remplis selon mes besoins, le sauve sous un nom que je ne peux pas connaitre a l avance, on va dire pour l exemple, classeur1. je reprends mon classeur initial, que je sauve sous un nom par exemple classeur2. Et la je veux copier certaines plages bien definies de mon classeur1 feuille1 vers mon classeur2 feuille1. (les 2 classeurs ont les memes noms de feuille).

voila, je compte donc en pratique, ouvrir mes classeurs 1 et 2. J ouvre la feuille 1 du classeur1, j actionne la macro "copier", puis jouvre la feuille 1 du classeur 2 et j active la macro "coller".

Merci, floreli.

voila, je compte donc en pratique, ouvrir mes classeurs 1 et 2. J ouvre la feuille 1 du classeur1, j actionne la macro "copier", puis jouvre la feuille 1 du classeur 2 et j active la macro "coller".

Merci, floreli.

Bonjour floreli,

dans ce scénario ou sera placer la macro ?

j'imagine que les fichiers ne seront jamais les mêmes, il faut donc prévoir un code pour l'ouverture de fichiers, fichiers qui seront choisi par l'utilisateur ?

je veux juste un code qui me copie une sélection multiple, c est tout. je ne veux rien faire d autre. je veux juste faire ca :

sub test ()

range("A5:A20,C22:F32").select

selection.copy

end sub

et que ca marche....car j ai un message "impossible d exectuer cette commande sur selection multiple"

j ai essayé avec Union, Array, ...j arrive a rien.

je ne sais pas comment faire non plus pour copier l adresse des plages, pour que quand je colle, ca colle aux memes adresses.

pour tout le reste je pense que je pourrais me debrouiller seul (j espere)

Merci pour ton aide

Rechercher des sujets similaires à "copier coller choix multiples"