VBA-Copie données ficher 1 feuille A vers ficher 2 feuille B

Résolu/Fermé
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 - 29 juil. 2016 à 16:27
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 - 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
A voir également:

3 réponses

ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 29/07/2016 à 18:42
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
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié par ThauTheme le 29/07/2016 à 18:41
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
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 1
1 août 2016 à 16:53
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...
0
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 1
1 août 2016 à 12:02
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
0