Se connecter avec
S'enregistrer | Connectez-vous

Copier et coller une plage de cellules en VBA

Dernière réponse : dans Programmation

Bon, je pensais que cela allait être tout bête, mais je sèche.

Je souhaite récupérer des valeurs dans un autre classeur et les insérer dans le classeur actif.

SI je teste pour récupérer une cellule, cela marche. Si je teste pour récupérer une plage, cela ne fonctionne pas.

Voici mon code :

  1. Dim wb_B As Workbook
  2. Dim Classeur_source As Variant
  3.  
  4.  
  5. Classeur_source = Application.GetOpenFilename("Classeurs Excel,*.xls")
  6. If Classeur_source = False Then Exit Sub
  7.  
  8. 'wb_B est le classeur dont on veut récup les données
  9. 'wb_actuel est ce classeur
  10.  
  11. Set wb_B = Workbooks.Open(Classeur_source, , True)
  12. Set wb_actuel = ThisWorkbook
  13. wb_B.Windows(1).Visible = False
  14.  
  15.  
  16. 'on copie les cellules du tableau 7
  17. wb_actuel.Worksheets("Budget-CA").Range("d24:d26") = wb_B.Worksheets("données brutes").Range("d45:d47")

Je n'ai pas de message d'erreur, juste que les valeurs ne sont pas copiées

Par contre, si je mets cela, ça marche :

  1. wb_actuel.Worksheets("Budget-CA").Range("d24") = wb_B.Worksheets("données brutes").Range("d45")
  2. wb_actuel.Worksheets("Budget-CA").Range("d25") = wb_B.Worksheets("données brutes").Range("d46")
  3. wb_actuel.Worksheets("Budget-CA").Range("d26") = wb_B.Worksheets("données brutes").Range("d47")


Mais ca va me faire un paquet de lignes !

Sinon, la méthode copier / coller en vba (toujours avec les cellules) peut convenir.

Merci d'avance.
Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

La bonne syntaxe est bien la tienne HDU :
Source.Plage.Copy Destination:= Cible.Cellule


  1. wb_B.Worksheets("données brutes" ).Range("d45:d47" ).Copy wb_actuel.Worksheets("Budget-CA" ).Range("d24" )
Je ne comprends pas que ceci ne fonctionne pas !

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

Pour en revenir à
  1. wb_actuel.Worksheets("Budget-CA" ).Range("d24" ) = wb_B.Worksheets("données brutes" ).Range("d45" )
  2. wb_actuel.Worksheets("Budget-CA" ).Range("d25" ) = wb_B.Worksheets("données brutes" ).Range("d46" )
  3. wb_actuel.Worksheets("Budget-CA" ).Range("d26" ) = wb_B.Worksheets("données brutes" ).Range("d47" )
Peut-être établir une ligne de copie dans une boucle FOR serait intéressant :
  1. Dim row As Long
  2. For row = 0 To 2
  3. wb_actuel.Worksheets("Budget-CA" ).Range("d" & row + 24) = wb_B.Worksheets("données brutes" ).Range("d" & row + 45 )
  4. Next

Maintenant, on précise qu'on veut copier le contenu, et on utilise Cells plutôt que Range, c'est plus sympa de calculer avec des nombres qu'avec des adresses :
  1. Dim row As Long
  2. For row = 0 To 2
  3. wb_actuel.Worksheets("Budget-CA" ).Cells(row + 24, 4) = wb_B.Worksheets("données brutes" ).Cells(row + 45, 4).Value
  4. Next

Expert Programmation

Le copier-coller en vba, ça marche, mais ce n'est pas très élégant... :/ 

Essaie plutôt ça:

  1. wb_actuel.Worksheets("Budget-CA" ).Range("d24:d26" ).Copy wb_B.Worksheets("données brutes" ).Range("d45" )

Storos a dit :
Le copier-coller en vba, ça marche, mais ce n'est pas très élégant... :/ 

Essaie plutôt ça:

  1. wb_actuel.Worksheets("Budget-CA" ).Range("d24:d26" ).Copy wb_B.Worksheets("données brutes" ).Range("d45" )

Merci,

mais cela ne fonctionne pas mieux.

J'ai aussi testé avec
  1. wb_B.Worksheets("données brutes").Range("d45:d47").Copy wb_actuel.Worksheets("Budget-CA").Range("d24")

qui semblait plus correspondre, mais idem ...

Expert Programmation

HDU a dit :
Merci,
De rien :jap: 

HDU a dit :
je suis trop c.n. :??: 
Ne dis pas ça, certaines personnes sont très faciles à convaincre ! ;) 

HDU a dit :
Les valeurs dans le classeur source étaient à zéro pour cette plage de cellules !

Shame on me !
Rhoooooo! T'es vraiment trop c..... euh, non rien [:patch]

HDU a dit :
Merci à toi. :hello: 
Tu l'as déjà dit. Mais au moins, ça a l'air sincère ;) 

Cochon, Pingouin, etc. nous sommes tous là pour t'aider. A bientôt :hello: 

Storos a dit :
Donc en fait, mon code aurait dû marcher? :??: 

Parce que là je m'inquiète... :sweat: 


Yes storos, c marchait mais à cause des mes '0', je ne l'avais point vu. J'ai pigé ta formule même si elle était à l'envers.

Merci à vous 2. Je t'aurais bien mis meilleure réponse, mais je n'ai pas fait gaffe aux posteurs.

Merci à toi !

Encore bravo pour tes compétences en VBA Excel. Si je peux te rendre la pareille en Access, no pb.

Merci. :hello: 
Lassé par la pub ? Créez un compte