VBA-Copie données ficher 1 feuille A vers ficher 2 feuille B [Résolu/Fermé]

Messages postés
103
Date d'inscription
mercredi 27 juillet 2016
Statut
Membre
Dernière intervention
16 mars 2018
- - Dernière réponse : NaXiLeAn
Messages postés
103
Date d'inscription
mercredi 27 juillet 2016
Statut
Membre
Dernière intervention
16 mars 2018
- 1 août 2016 à 16:53
Bonjour,

Je souhaite copie l'intégralité des données d'une feuille "FeuilSource" d'un ficher "Source.xlsx" (ouvert et d'ou la macro est lancée) vers une "FeuilDestination" d'un ficher "Destination.xlsx" non actif.

Voilà ce que j'ai "pondu" et j'ai une erreur après l'ouverture du ficher "Source.xlsx" :

'Intègre les données du fichier source sans le modifier
ici => Workbooks("Source.xlsx") = Workbooks.Open(Filename:="C:\source\"Source.xlsx"")
Sheets("FeuilDestination").Cells.Value = Workbooks("Source.xlsx").Sheets("FeuilSource").Cells.Value
Workbooks("Source.xlsx").Close False ' ferme sans sauve
Set Workbooks("Source.xlsx") = Nothing
Set Sheets("FeuilDestination") = Nothing

D'avance merci pour votre aide
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
9175
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
11 novembre 2019
1667
1
Merci
Pour écrire dans un fichier fermé, je crois que c'est un peu compliqué
Une solution simple, ouvrir le fichier 2, faire la copie, sauvegarder et fermer

Const FeuilleSource = "Feuil1"

Const FichierBut = "D:\Fbut.xls"
Const FeuilleBut = "Feuil1"

Public Sub OK()
Dim plageS As Range, lifin As Long, cofin As Long
With Sheets(FeuilleSource)
lifin = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
cofin = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set plageS = .Range(.Cells(1, 1), .Cells(lifin, cofin))
plageS.Copy
Workbooks.Open FichierBut
Sheets(FeuilleBut).Select
Cells(1, 1).Select
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWorkbook.Close
End With
End Sub

Cdlmnt

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 62858 internautes nous ont dit merci ce mois-ci

Messages postés
4611
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
9 décembre 2019
118
1
Merci
Bonjour NaXiLeAn, bonjour le forum

Tu dois utiliser une variable Workbook et la définir :
Dim CS As Workbook
Set CS = Workbooks.Open(Filename:="C:\source\"Source.xlsx") 


Mais si tu dis que le code est dans la classeur source, je ne comprends pas pourquoi tu cherches à l'ouvrir ? Il devrait déjà être ouvert, non ?

Voilà comment je fais dans ce genre de cas (macro à placer dans le classeur source) :
Sub Macro1()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CD As Worksheet 'déclare la variable OD (Onglet Destination)

Set CS = ThisWorkbook 'définit le classeur source CS
CH = CS.Path & "\" 'définit le chemin d'accès CH
Set OS = CS.Worksheets("FeuilSource") 'définit l'onglet source OS
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
'définit le classeur destination CD (génère une erreur si le classeur n'est pas ouvert)
Set CD = Workbooks("Destination.xlsx")
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
    Workbooks.Open (CH & "Destination.xlsx") 'ouvre le classeur "Destination.xlsx"
    Set CD = ActiveWorkbook 'définit le classeur destination CD
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
OD = CD.Sheets("FeuilDestination") 'définit l'onglet destination OD
'copie toules les celluleS de l'ongLet source OS et les colle dans A1 de l'onglet destination OD
OS.Cells.Copy OD.Range("A1")
CS.Close False 'ferme le classeur source CS sans enregistrer
End Sub


Attention :
• ce code implique que les deux classeurs se trouvent dans un seul et même dossier, sinon ça peut planter.
• ton classeur source prendra l'extension xlsm à cause de la macro...

[Édition]
Bonjour CCM, nos posts se sont croisés...

À plus,
ThauTheme

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 62858 internautes nous ont dit merci ce mois-ci

NaXiLeAn
Messages postés
103
Date d'inscription
mercredi 27 juillet 2016
Statut
Membre
Dernière intervention
16 mars 2018
1 -
Bonjour,
Finalement le code trouvé ne fonctionne pas.
J'essai le tien sans succès.
Si tu as un moment à me consacrer?
La macro se trouve sur mon fichier destination.
Il s'agit d'un fichier (presque) vide dans lequel je veux incrémenter mes données qui se trouve sur le fichier source.
La macro (et le bouton de lancement de cette macro) se trouve sur le fichier ouvert qui est donc le fichier destination.
Voilà ce que je veux faire par étape :
1- j'ouvre manuellement mon fichier destination et je lance ma macro
2-le fichier source souvre, grace à la macro.
3-Les données sont copiés sans mise en forme
4-Le fichier source se ferme sans enregistrement
5-Les données copiées sont collées dans le fichier déjà ouvert (destination)
6-D'autres traitements sont alors lancés...
Messages postés
103
Date d'inscription
mercredi 27 juillet 2016
Statut
Membre
Dernière intervention
16 mars 2018
1
0
Merci
Bonjour,
Merci à vous!
Entre temps, j'ai trouvé la commande suivante :

(Avec les vrais noms de fichiers)
'Intègre les données du fichier source sans le modifier
Workbooks.Open Filename:="C:\Users\xx\Desktop\Fiche 1305\source\verifaprespaie.xlsx"
Workbooks("verifaprespaie.xlsx").Sheets("VERIFAPRESPAIE").Cells.Copy _
Destination:=Workbooks("Fiche 1305_test.xlsm").Sheets("1305").Cells(1, 1)
Workbooks("verifaprespaie.xlsx").Close False ' ferme sans sauve