Se connecter avec
S'enregistrer | Connectez-vous

[résolu][Macro VBA Excel]Copier/coller entre classeurs&sheets

Dernière réponse : dans Programmation

:hello:  Salut :hello: 
et déjà merci de venir me lire / m'aider.

à défaut de trouver un exemple parlant de mon problème, je viens vous demander un exemple :

je dois copier les cellules B2 à D2
depuis : le classeur "départ.xls", feuille "M"
vers : le classeur "arrivée.xls", feuille "N", cellules E2 à G2
puis entrer la valeur "123456" dans la feuille "O" (toujours dans le classeur arrivée.xls)

pourriez vous me donner un petit bout de code pour me montrer comment faire ca !? j'adapterais à mes besion ;) 
car si je vous montre mon code qui est assez important ca ne serait pas très parlant ou très long à expliquer :-/
et puis données professionnelles et confidentielles :p 
ce serait surtout pour voiur les fonctions utilisées pour le "jonglage" entre les feuilles des différents classeurs car sur le net j'ai trouvé du sheet, worksheets, worksheet("A"), cells, range ...etc. et je ne fais plus la différence entre toutes ces fonctions.

Cordialement.
Lassé par la pub ? Créez un compte

Salut, Gryphus71

Essaie avec ceci (Excel 2003):

Workbooks("départ.xls").Sheets("M").Range("B2:D 2").Copy
Workbooks("arrivée.xls").Sheets("N").Paste Destination:=Range("E2:G2")
Workbooks("arrivée.xls").Sheets("O").Range("E2:G2") = "123456"

Le code ci-dessus suppose que les classeurs arrivée et départ sont ouverts.
Si ce n'est pas le cas, tu peux utiliser:

Workbooks.Open "C:\arrivée.xls"

Bonne continuation

ok merci bien ;-)
et est ce qu'après avoir fait le copy, je peux de suite fermé le classeur départ.xls avant de faire le paste ?

et comment fonctionne "Application.ScreenUpdating = True" ? car je voudrais faire mes manip de façon invisible (ca évitera des bug d'affichage au passage ^^ et je ne tuerais pas mes collègues épileptiques x-D )

Salut, Gryphus

Je te conseille de fermer le classeur de départ après avoir coller les valeurs, donc après le .Paste .
Concernant le ScreenUpdating, en cette période de Téléthon, je trouve louable de ta part de vouloir préserver tes collègues malades ;) 
Place un "Application.ScreenUpdating = False" avant la première instruction de ton code et n'oublie pas de mettre un "Application.ScreenUpdating = True" après la dernière instruction.

Bonne continuation

arf arf arf ... le copy ne fonctionne pas, j'ai tapé ça :

  1. Sheets("ACD").Select
  2. Worksheet.Range(num_ligne_str).Paste


message d'erreur :
Erreur d'exécution '424':
Objet requis

et le debbug se position sur le Worksheet ..

je viens de tester avec ça :
  1. Sheets("ACD").Select
  2. Range(num_ligne_str).Select
  3. ActiveSheet.Paste

j'ai maintenant l'erreur :
Erreur d'exécution '1004':
La méthode Paste de la classe Worksheet a échoué.

Debbug ciblé sur ActiveSheet

Je n'ai rien dit !!!
pour info : il ne faut ni fermer ni sauvegarder de fichier entre un copy et un paste

:-/ 1h pour m'en rendre compte :-/
jeune homme 22 ans recherche belle corde blonde et bien tissée pour relation très ... proche ... (>_<)

Content que tu t'en sois sorti tout seul :) 
Pour info:
gryphus71 a dit :
  1. Sheets("ACD").Select
  2. Range(num_ligne_str).Select
  3. ActiveSheet.Paste

Tout ces .Select successifs sont inutiles. Ceci suffit:
  1. Sheets("ACD").Range(num_ligne_str).Paste

C'est ce genre d'instruction qui ralentit grandement l'exécution du code, surtout si on n'utilise pas ScreenUpdating...
Si tu veux en savoir plus, va voir ici, c'est une vrai mine d'or !...
Bonne continuation

merci pour les infos mais je savais déjà tout ça ^^
j'avais fais exprès d'éclater mon code pour bien cibler le problème
mais je fais tant que possible de la même façon que toi.

et pour le site exclabo, je confirme : il est très bien fait ! je n'y ai (pour le moment) passé que peu de temps mais vraiment très bien expliqué pour ceux que ça peut intéresser !
Lassé par la pub ? Créez un compte
Tom's guide dans le monde