Copier/coller range d'un classeur à un autre

jobicopa

XLDnaute Nouveau
Bonjour,

Après une initiation aux fonctions de bases d'Excel où j'ai pu découvrir ce forum très actif, je suis passé à l'étape supérieur et suis passé au VBA. Encore une fois XLD fut une mine d'information et d'exemple et je remercie tout les modérateurs et contributeurs pour cela.

Bref, je me trouve aujourd'hui en difficulté sur de la programmation VBA, j'ai un peu de mal sur la syntaxe, je l'avou. Ce que je cherche à faire est simple :

Copier plusieurs cellules d'un fichier dans un autre.

Ce bout de code fait parti d'un ensemble plus grand mais je vais tâcher d'expliquer clairement les variables.


Code:
[COLOR="blue"]Sub[/COLOR] Essais()

[COLOR="SeaGreen"]'Déclaration des classeurs utilisés WbComp est celui
'sur lequel on applique la macro[/COLOR]
[COLOR="Blue"]Dim [/COLOR]WbComp, WbFrs [COLOR="blue"]As[/COLOR] Workbook

[COLOR="seagreen"]'Déclaration de l'endroit où la macro doit retrouver
'le chemin d'accès au second classeur[/COLOR]
[COLOR="blue"]Dim[/COLOR] sources [COLOR="blue"]As[/COLOR] Variant

Application.ScreenUpdating = [COLOR="blue"]False[/COLOR]

[COLOR="blue"]Set[/COLOR] WbComp = ActiveWorkbook

[COLOR="seagreen"]'sources est la zone où on retrouve chemin d'accès au second classeur,
'nom de l'onglet dans lequel aller chercher les cellules à copier/coller,
' et nom de l'onglet où les coller (qui se trouve être le même)[/COLOR]
sources = Worksheets("Fichiers_sources").Range("A1").CurrentRegion

[COLOR="seagreen"]'Ici j'ouvre donc le second classeur et lui attribu son nom de variable[/COLOR]
Workbooks.Open FileName:=sources(2, 1)
[COLOR="blue"]Set [/COLOR]WbFrs = ActiveWorkbook

[COLOR="seagreen"]'Le coeur du problème, c'est là où j'ai un problème Erreur d'exécution '1004' :
'Erreur définie par l'application ou par l'objet[/COLOR]

WbComp.Worksheets(sources(2, 3)).Range(Cells(2, 3), Cells(2, 5)) = WbFrs.Worksheets(sources(2, 3)).Range(Cells(2, 3), Cells(2, 5))

Application.ScreenUpdating = [COLOR="blue"]True[/COLOR]

[COLOR="blue"]End Sub[/COLOR]

J'espère que ça suffit pour faire comprendre mon problème. Au besoin je peux fournir les Excels correspondant (2 du coup :) ).

Merci d'avance,

Cordialement
 
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : Copier/coller range d'un classeur à un autre

Bonsoir,

Ceci fonctionne chez moi :

Sub Essais()
Set WbComp = ActiveWorkbook
Set sources = Sheets("Fichiers_sources").Range("A1").CurrentRegion
Set WbFrs = Workbooks.Open(Filename:=sources(2, 1).Value)
WbComp.Sheets(sources(2, 3).Value).Range("C2").Resize(1, 3).Value = WbFrs.Sheets(sources(2, 3).Value).Range("C2").Resize(1, 3).Value
End Sub

Si tu gardes :
WbComp.Worksheets(sources(2, 3)).Range(Cells(2, 3), Cells(2, 5)) = WbFrs.Worksheets(sources(2, 3)).Range(Cells(2, 3), Cells(2, 5))
Il doit falloir le modifier comme ceci:
WbComp.Worksheets(sources(2, 3).Value).Range(WbComp.Worksheets(sources(2, 3).Value).Cells(2, 3), WbComp.Worksheets(sources(2, 3).Value).Cells(2, 5)).Value = WbFrs.Worksheets(sources(2, 3).Value).Range(WbFrs.Worksheets(sources(2, 3).Value).Cells(2, 3), WbFrs.Worksheets(sources(2, 3).Value).Cells(2, 5)).Value
 

jobicopa

XLDnaute Nouveau
Re : Copier/coller range d'un classeur à un autre

Bonjour Catrice,

Merci pour ta réponse, même si celle ci n'a pas vraiment permi de résoudre mon problème, l'utilisation du resize est une façon de faire que je vais être amené à réutiliser.

Pour ce qui est de mon problème, après de longues heures à bidouiller mes yeux en compotes ont finalement vu quelque chose qui pouvait géner le programme.

Dans mon programme on change souvent de classeur et pour autant ma zone "sources" te que codé ne fait pas parti d'un classeur, alors que dans es fait si.

J'ai donc remplacé :

Code:
sources = Worksheets("Fichiers_sources").Range("A1").CurrentRegion

Par :

Code:
sources = [COLOR="Red"]WbComp.[/COLOR]Worksheets("Fichiers_sources").Range("A1").CurrentRegion

Je défini ma région dans le classeur WbComp dans lequel elle se trouve, le programme peut donc la chercher quelque soit le classeur ouvert.

Merci encore d'avoir pris le temps de regarder mon travail.
En espérant que cette contribution mineure puisse un jour aider quelqu'un.

Job
 

bhbh

XLDnaute Barbatruc
Re : Copier/coller range d'un classeur à un autre

Bonjour,

juste une petite précision, dans ton code

En début, tu déclares tes variables, et c'est très bien...

Cependant :

Code:
Dim WbComp, WbFrs As Workbook

dans cette déclaration, seul WbFrs est déclaré en Workbook

la syntaxe exacte est :

Code:
Dim WbComp As Workbook, WbFrs As Workbook

Bonne soirée
 

jobicopa

XLDnaute Nouveau
Re : Copier/coller range d'un classeur à un autre

Bonjour Bhbh,

A priori je n'ai pas de problème lors de l'éxecution à cause de cela, mais je vais faire comme tu dis, ça me coute pas grand chose et ça évitera de rechercher des heures si ça engendre des soucis.

Pour ce qui est de la déclaration, c'est des automatismes du C et du java :)
 

jobicopa

XLDnaute Nouveau
Re : Copier/coller range d'un classeur à un autre

Rebonjour,

Je suis toujours sur mon problème de copier coller, mais j'ai trop le nez dedans je vois plus vers où aller. Je vous sollicite pour avoir une approche différente.

J'ai 2 fichiers ("récap" et "autres"), dans les deux, la première colonne A liste des références, uniques. Le classeur "autre" possède en plus une colonne B contenant des informations que je souhaiterai récupérer dans mon fichier "récap".

Il y a alors 3 cas possibles :
-"autres" possède des références en plus, il faut alors copier coller ces références vers le fichier "récap".
-Les références des deux fichiers sont les même, je copie colle la colonne B correspondante de "autres" vers "récap".
-"récap" possède une référence qui n'est pas dant "autres", je colorise la colonne B correspondant à cette référence.

Je suis conscient que travailler avec un exemple est plus simple pour voir mon besoin, mais ça fait plusieurs jours que je travaille dessus, et il a beaucoup perdu en lisibilité avec mes modifs/test/arrangement. Et puis, ça obstrue les possibilité, c'est vous les experts, peut-être existe-il des méthodes qui me seraient inconnues.

Cordialement,

Job
 

Discussions similaires

Haut Bas