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

Signaler
Messages postés
112
Date d'inscription
mercredi 27 juillet 2016
Statut
Membre
Dernière intervention
2 juin 2020
-
Messages postés
112
Date d'inscription
mercredi 27 juillet 2016
Statut
Membre
Dernière intervention
2 juin 2020
-
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

3 réponses

Messages postés
9633
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2020
1 973
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
1
Merci

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

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
1404
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
18 novembre 2020
145
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
1
Merci

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

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
112
Date d'inscription
mercredi 27 juillet 2016
Statut
Membre
Dernière intervention
2 juin 2020
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
112
Date d'inscription
mercredi 27 juillet 2016
Statut
Membre
Dernière intervention
2 juin 2020
1
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