Se connecter avec
S'enregistrer | Connectez-vous

Macro excel copier coller

Dernière réponse : dans Programmation

Bonjour,
comme vous allez vous en rendre compte je debute dans le VB...
voilà mon problème je voudrai faire un copier coller de plusieurs cellules
un peu dans ce style ...
Sheets("feuil2").Range(Cells(3, 1), Cells(14, 1)).Copy _
Destination:=Worksheets("feuil1").Range("A1")
mais voilà si je suis positionné sur la "feuil2" ca fonctionne très bien.Mais maheureusement je suis et je veux rester sur la "feuil1" et là ca se complique car j'ai un message d'erreur...Bien sur je ne veux surtout pas sauter d'une feuille à l'autre...
si vous pouviez me guider ce serait sympa je vous remercie

Autres pages sur : macro excel copier coller

Lassé par la pub ? Créez un compte

Bonjour,
comme vous allez vous en rendre compte je debute dans le VB...
voilà mon problème je voudrai faire un copier coller de plusieurs cellules
un peu dans ce style ...
Sheets("feuil2").Range(Cells(3, 1), Cells(14, 1)).Copy _
Destination:=Worksheets("feuil1").Range("A1")
mais voilà si je suis positionné sur la "feuil2" ca fonctionne très bien.Mais maheureusement je suis et je veux rester sur la "feuil1" et là ca se complique car j'ai un message d'erreur...Bien sur je ne veux surtout pas sauter d'une feuille à l'autre...
si vous pouviez me guider ce serait sympa je vous remercie

Bonjour,
comme vous allez vous en rendre compte je debute dans le VB...
voilà mon problème je voudrai faire un copier coller de plusieurs cellules
un peu dans ce style ...
Sheets("feuil2").Range(Cells(3, 1), Cells(14, 1)).Copy _
Destination:=Worksheets("feuil1").Range("A1")
mais voilà si je suis positionné sur la "feuil2" ca fonctionne très bien.Mais maheureusement je suis et je veux rester sur la "feuil1" et là ca se complique car j'ai un message d'erreur...Bien sur je ne veux surtout pas sauter d'une feuille à l'autre...
si vous pouviez me guider ce serait sympa je vous remercie
Expert Programmation

Bonjour et bienvenue,

Merci de lire, de respecter et d'appliquer le règlement. Toute pièce de code est à présentée grâce à la balise [code].

Si tu as un message d'erreur, merci de nous le transmettre dans son intégralité.

Mille excuses...
je réédite ma question ....

Bonjour,
voilà mon problème je voudrai faire un copier coller de plusieurs cellules
un peu dans ce style ...

  1. Sheets("feuil2").Range(Cells(3, 1), Cells(14, 1)).Copy _
  2. Destination:=Worksheets("feuil1").Range("A1")


si je suis positionné sur la "feuil2" ca fonctionne très bien.
Mais maheureusement si je suis positionné sur la "feuil1" là
ca se complique car j'ai ce message d'erreur...

Erreur d'exécution '1004':
Erreur définie par l'application ou par l'objet

vous aurez compris que je ne peux helas me positionner sur la feuil1
si vous pouviez me venir en aide ce serait sympa
merci

Bonjour,
Si ta plage de cellules a copier est toujours la même cette solution fonctionne si tu met la même plage (même nombre de ligne et de colonnes)de chaque côté:
  1. Sheets ("Feuil1").range("A1:A12").value = Sheets("Feuil2").range("A3:A14").value


C'est une piste à creuser, ou tu peux aussi prévoir l'utilisation d'une boucle "FOR...." "NEXT"

EDIT: Par acquis de conscience j'ai quand même testé ceci, "Feuil1" étant la feuille active et ça a fonctionné :
  1. Sheets ("Feuil2").range("A3:A14").copy Sheets("Feuil1").range("A1")


Ton probleme vient du "Range (cells (),cells())"

Bonjour Rvtoulon

Et merci d'avoir répondu si vite à ma demande
Effectivement les 2 solutions que tu me proposes fonctionnent
Malheureusement j'ai besoin du "Range (cells (),cells())"
car j'ai plus de 70 groupes de longueurs différentes à copier d'une feuille à l'autre
et à des emplacements bien définies.
J'ai bien pensé utilisé les boucles "FOR....NEXT" mais là aussi la vitesse d'exécution est gravement affectée ...
Merci encore pour ta démarche, c'est sympa de ta part...
je vais essayer de voir si je peux tout de même exploiter tes solutions ailleurs dans mon programme.. :hello: 

Bonjour,
La nuit porte conseil et avec un peu de réflexion je me suis rappelé qu'il faut indiquer à cells() dans quelle feuille il se trouve, comme ceci:
  1. Sheets("Feuil2").Range(sheets("Feuil2").Cells(3, 1), sheets("Feuil2").Cells(14, 1)).Copy Sheets("Feuil1").Range("A1")

pour éviter d'écrire Feuil2 a chaque fois il faut utiliser "with", "end with":
  1. With Sheets("Feuil2")
  2. .Range(.Cells(3, 1), .Cells(14, 1)).Copy Sheets("Feuil1").Range("A1")
  3. End With
Expert Programmation

Bien sûr que ça ne marche pas.
Alors d'abord un peu de rigueur. Un classeur Excel peut contenir toutes sortes de feuilles. Celles qui nous intéressent sont les feuilles de calculs exclusivement. Alors utilisons Worksheet explicitement.

  1. Worksheets("feuil2" ).Range(Cells(3, 1), Cells(14, 1)).Copy Destination:=Worksheets("feuil1" ).Range("A1" )

Ce code est exécuté par la macro, indépendamment de la feuille sur laquelle nous nous trouvons. Admettons que nous soyons sur la feuille 2-T-OM (j'appelle mes feuilles comme je veux).

Le code précédent sera vu par VB comme celui-ci :
  1. Worksheets("feuil2" ).Range(Worksheets("2-T-OM" ).Cells(3, 1), Worksheets("2-T-OM" ).Cells(14, 1)).Copy Worksheets("feuil1" ).Range("A1" )

La solution est maintenant triviale, non ?

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

Le VB devrait accepter ce genre de syntaxe :
  1. Range(Worksheets("2-T-OM" ).Cells(3, 1), Worksheets("2-T-OM" ).Cells(14, 1))
Las, ça ne marche pas, à cause des objets implicites qui s'insinuent partout.
Un bon moyen de ne pas surcharger le code est d'utiliser une clause With :
  1. With Worksheets("feuil2" )
  2. .Range(.Cells(3, 1), .Cells(14, 1)).Copy Worksheets("feuil1" ).Range("A1" )
  3. End With
Personnellement, j'utilise systématiquement des variables sur mes feuilles, avec des noms courts.

bravo! excellent !
ca marche
merci RV toulon et merci aussi Zeb
je ne pensais pas qu'il fallait renseigner par 2 fois le Worksheets dans le Range
mais ca y est j'ai pigé .
encore un grand merci à vous 2, tout seul je ne pense pas que j'aurai trouvé..
je sais maintenant ou trouver réponses à mes problèmes...:hello: 
Lassé par la pub ? Créez un compte