Autres Copy de feuille excel entre documents

FOUQUET Yves

XLDnaute Occasionnel
Bonjour à toutes et tous,

J'ai un fichier "recept_matos.xlsx" dans un dossier externe "D:\Gextion AHI V2\transfer" que je veux copier dans un classeur externe Excel "donnees.xlsm", en le renommant "materiel" à partir d'un userform situé dans "Prog01.xlsm".
La procédure ci dessous me le copie dans le classeur de la procédure: "Prog01.xlsm" actif de fait et pas dans "données.xlsm"! Grrrrr.
Quelqu'un peut m'aider?
Merci.
Yves
Ci dessous le code de l'Userform de Prog01.xlsm qui copie dans dans ce même dossier!

VB:
Dim strPath$, fichier$
Dim sourceWBK As Workbook, destiWBK As Workbook

' CHEMIN ======
NomFichierComplet = UserForm1.chemin3 & "\"
strPath = NomFichierComplet   '------ D:\Gestion AHI V2\transfer\"
fichier = "recept_matos.xlsx"     '------ le fichier à copier
Application.ScreenUpdating = False
Set sourceWBK = Workbooks.Open(strPath & fichier)

Workbooks("Donnees.xlsm").Activate   '----- le classeur Excel où je veux copier le fichier en le nommant "materiel"
Set destiWBK = ThisWorkbook
sourceWBK.Sheets("materiel").Copy before:=destiWBK.Sheets(1)
sourceWBK.Close False
 
Solution
Bonsoir

Nombre de classeur : (3 Classeurs Excel)
* recept_matos.xlsx (Se classeur contient une feuille matériel à copier)
* donnees.xlsm (La feuille Matériel doit etre copier dans ce classeur)
* Prog01.xlsm (à partir d'un userform situé dans "Prog01.xlsm") = ThisWorkbook
soit : C'est le classeur contient la procédure qui est exécutée = Set destiWBK = ThisWorkbook

' En déduction la procédure tourne sur le classeur Ouvert = "Prog01.xlsm"
' Vous chercher le ' Dossier externe : "D:\Gextion AHI V2\transfer" / qui contiens le fichier : "recept_matos.xlsx" qui contient la Feuille...

laurent950

XLDnaute Accro
Bonsoir

Nombre de classeur : (3 Classeurs Excel)
* recept_matos.xlsx (Se classeur contient une feuille matériel à copier)
* donnees.xlsm (La feuille Matériel doit etre copier dans ce classeur)
* Prog01.xlsm (à partir d'un userform situé dans "Prog01.xlsm") = ThisWorkbook
soit : C'est le classeur contient la procédure qui est exécutée = Set destiWBK = ThisWorkbook

' En déduction la procédure tourne sur le classeur Ouvert = "Prog01.xlsm"
' Vous chercher le ' Dossier externe : "D:\Gextion AHI V2\transfer" / qui contiens le fichier : "recept_matos.xlsx" qui contient la Feuille Matériel

' Mise en Mémoire : (Le classeur Donnees.xlsm qui doit recevoir La feuille Matériel)
' le classeur contient la procédure qui est exécutée Prog01.xlsm / Set= ThisWorkbook = Faux
' 3 classeurs ouverts donc le classeur a mettre : Set destiWBK = Workbooks("Donnees.xlsm")
'
' Je vois pas l’intérêt d'Activate !
destiWBK.Activate (Ont peux l’écrire comme cela aussi)

' Ensuite il est facile de copier la feuille du classeur recept_matos.xlsx / matériel dans le Classeur donnees.xlsm après la feuille 1
sourceWBK.Sheets("materiel").Copy before:=destiWBK.Sheets(1)

Nota : Ci vous êtes débutant j'explique :
Set destiWBK = ThisWorkbook (C'est le classeur ou tourne la macro = le classeurs actif : exemples 3 classeurs ouvert et (dont celui ou tourne la macro c'est ThisWorkbook) donc c'est lui que vous avais mis en mémoire avec destiWBK c'est recept_matos.xlsx Alors c'est normal que la feuille ce colle dans ce fichier ou vous avez votre userform (le classeur n'est pas le bon ! recept_matos.xlsx = ThisWorkbook)

Donc le classeur a mettre en mémoire c'est celui la : Donnees.xlsm
Set destiWBK = Workbooks("Donnees.xlsm")


A présent la feuille va ce coller dans le bon classeur !

VB:
Dim strPath$, fichier$
Dim sourceWBK As Workbook, destiWBK As Workbook

' CHEMIN ======
' Dossier externe : "D:\Gextion AHI V2\transfer" / fichier : "recept_matos.xlsx"
NomFichierComplet = UserForm1.chemin3 & "\"
strPath = NomFichierComplet   '------ D:\Gestion AHI V2\transfer\"
fichier = "recept_matos.xlsx"     '------ le fichier à copier
Application.ScreenUpdating = False
Set sourceWBK = Workbooks.Open(strPath & fichier)
'
' classeur externe Excel "donnees.xlsm"
nommant "materiel"
Set destiWBK = Workbooks("Donnees.xlsm")
'[S]Workbooks("Donnees.xlsm").Activate[/S]   '----- le classeur Excel où je veux copier le fichier en le
destiWBK.Activate
' Copie Feuile du classeur "recept_matos.xlsx" dans Classeur "Donnees.xlsm"
sourceWBK.Sheets("materiel").Copy before:=destiWBK.Sheets(1)
sourceWBK.Close False

Ps : J'espère que cela va vous servir, comme vous êtes débutant.

Cdt
 
Dernière édition:

FOUQUET Yves

XLDnaute Occasionnel
Un grand MERCI Laurent pour votre pédagogie. Hier soir tard j'ai trouvé une solution qui marche aussi. J'avais bien compris le mécanisme mais je buttais sur le lexique.
Voilà ma solution peut être pas très académique mais qui a l'air de fonctionner:

VB:
' 
CHEMIN ======
NomFichierComplet = UserForm1.chemin3 & "\"
nomfichierrecept = UserForm1.chemin2 & "\"
strPath = NomFichierComplet   '"D:\Gestion AHI\transfer\"
str2Path = nomfichierrecept

' CHEMIN ======
fichier = "recept_matos.xlsx"
fichier2 = "Donnees.xlsm"
Application.ScreenUpdating = False
Set sourceWBK = Workbooks.Open(strPath & fichier)
Set destiWBK = Workbooks.Open(str2Path & fichier2)
sourceWBK.Sheets("materiel").Copy before:=destiWBK.Sheets(1) 
sourceWBK.Close False
 

laurent950

XLDnaute Accro
Bonjour,
Je pense, que le travail est fait en Objet ici : (donc Il est inutile de figer la feuille excel dans ce cas)
Application.ScreenUpdating = False
'Mais au cas ou il y a cette instruction (Placer : False avant code et réactivé après code avec True)
* Le code ici.........
* ..............................
Application.ScreenUpdating = True

Ps : Après je connais pas le périmètre de tous votre code, mais dans le principe c'est bon.
Merci à vous pour se retour.

Cdt
 

Discussions similaires

Statistiques des forums

Discussions
311 737
Messages
2 082 036
Membres
101 878
dernier inscrit
1475214