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 :
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 :
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.
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 :
Dim wb_B As Workbook
Dim Classeur_source As Variant
Classeur_source = Application.GetOpenFilename("Classeurs Excel,*.xls")
If Classeur_source = False Then Exit Sub
'wb_B est le classeur dont on veut récup les données
'wb_actuel est ce classeur
Set wb_B = Workbooks.Open(Classeur_source, , True)
Set wb_actuel = ThisWorkbook
wb_B.Windows(1).Visible = False
'on copie les cellules du tableau 7
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 :
wb_actuel.Worksheets("Budget-CA").Range("d24") = wb_B.Worksheets("données brutes").Range("d45")
wb_actuel.Worksheets("Budget-CA").Range("d25") = wb_B.Worksheets("données brutes").Range("d46")
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.
Autres pages sur : copier coller plage cellules vba
Lassé par la pub ? Créez un compte
Meilleure solution
La bonne syntaxe est bien la tienne HDU :
----------------
Pour en revenir à
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 :
Source.Plage.Copy Destination:= Cible.Cellule
Je ne comprends pas que ceci ne fonctionne pas !
wb_B.Worksheets("données brutes" ).Range("d45:d47" ).Copy wb_actuel.Worksheets("Budget-CA" ).Range("d24" )
----------------
Pour en revenir à
Peut-être établir une ligne de copie dans une boucle FOR serait intéressant :
wb_actuel.Worksheets("Budget-CA" ).Range("d24" ) = wb_B.Worksheets("données brutes" ).Range("d45" )
wb_actuel.Worksheets("Budget-CA" ).Range("d25" ) = wb_B.Worksheets("données brutes" ).Range("d46" )
wb_actuel.Worksheets("Budget-CA" ).Range("d26" ) = wb_B.Worksheets("données brutes" ).Range("d47" )
Dim row As Long
For row = 0 To 2
wb_actuel.Worksheets("Budget-CA" ).Range("d" & row + 24) = wb_B.Worksheets("données brutes" ).Range("d" & row + 45 )
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 :
Dim row As Long
For row = 0 To 2
wb_actuel.Worksheets("Budget-CA" ).Cells(row + 24, 4) = wb_B.Worksheets("données brutes" ).Cells(row + 45, 4).Value
Next
Storos a dit :
Le copier-coller en vba, ça marche, mais ce n'est pas très élégant...
Essaie plutôt ça:
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
wb_B.Worksheets("données brutes").Range("d45:d47").Copy wb_actuel.Worksheets("Budget-CA").Range("d24")
qui semblait plus correspondre, mais idem ...
HDU a dit :
Merci,
HDU a dit :
je suis trop c.n.
HDU a dit :
Les valeurs dans le classeur source étaient à zéro pour cette plage de cellules !Shame on me !
![[:patch] [:patch]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/e5/c5/patch.gif)
HDU a dit :
Merci à toi.
Cochon, Pingouin, etc. nous sommes tous là pour t'aider. A bientôt
Storos a dit :
Donc en fait, mon code aurait dû marcher?
Parce que là je m'inquiète...
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.
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumMacro copier coller plage
- ForumParcourir plage cellules vba
- ForumExcel vba copier coller plage
- ForumPlage de cellules vba excel
- articlesCopier coller cellules
- ForumCopier coller sous vba
- ForumExcel vba copier plage cellules
- articlesCopier des cellules en vba
- ForumCopier coller
- ForumCopier coller des cellules sous conditions
- Voir plus