Export en VBA de MSProject sous Excel
Dernière réponse : dans Programmation
Bonjour à tous.
J'aimerai réaliser une macro sous MSProject qui une fois lancée exporte le fichier sous excel (ça c'est bon
) mais egalement qui copie le contenu de l'export dans une nouvelle feuille d'une page excel déja rédigée ( je ne sais pas si je suis assez clair...)
Voici le code que j'ai rédigé mais il ne marche pas (le debugger m'indique une erreur d'objet)
(Il manque les lignes de code pour sauvegarder et liberer la memoire)Voyez vous là où ça cloche?
Merci d'avance!
J'aimerai réaliser une macro sous MSProject qui une fois lancée exporte le fichier sous excel (ça c'est bon
) mais egalement qui copie le contenu de l'export dans une nouvelle feuille d'une page excel déja rédigée ( je ne sais pas si je suis assez clair...)Voici le code que j'ai rédigé mais il ne marche pas (le debugger m'indique une erreur d'objet)
Sub export_j()
FileSaveAs Name:="D:\blablabla\data.xls", _
FormatID:="MSProject.XLS8", _
map:="mon_mappage"
Set ExcelAppli = CreateObject("Excel.application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
ExcelAppli.Application.Workbooks.Open "D:\blablabla\data.xls"
ExcelAppli.Application.Workbooks.Open "D:\blablabla\fichier_receveur.xls"
ExcelAppli.Visible = True
ExcelAppli.Application.Workbooks("data.xls").Sheets("feuil1").Select
ExcelAppli.Application.Workbooks("data.xls").Sheets("feuil1").Copy Before=Workbooks("fichier_receveur.xls").Sheets("graph")
End Sub
(Il manque les lignes de code pour sauvegarder et liberer la memoire)Voyez vous là où ça cloche?
Merci d'avance!
Autres pages sur : export vba msproject excel
Lassé par la pub ? Créez un compte
Meilleure solution
Oki pour le FSO parasite. Epure mieux tes extraits, par principe
>>> plus efficace
Non, pas du tout. Le VBA/Excel exécuté par MSProject est rigoureusement celui d'Excel. Pas besoin de te faire des noeuds au cerveau
Je n'ai pas dit non plus que ce serait moins efficace.
Bon, comme je me fais chier comme un rat mort au boulot, je te le fais. Mais ne le dis pas aux autres membres du forum....
T'en pense quoi ?
>>> plus efficace
Non, pas du tout. Le VBA/Excel exécuté par MSProject est rigoureusement celui d'Excel. Pas besoin de te faire des noeuds au cerveau
Je n'ai pas dit non plus que ce serait moins efficace.
Bon, comme je me fais chier comme un rat mort au boulot, je te le fais. Mais ne le dis pas aux autres membres du forum....
(non testé)
Dim xl As Object Dim data_wb As Object Dim recv_wb As Object Set xl = CreateObject("Excel.Application" ) Set data_wb = xl.Workbooks.Open(".......\data.xls") Set recv_wb = xl.Workbooks.Open(".......\fichier_receveur.xls") data_wb.WorkSheets(1).Copy recv_wb.Sheets("graph" ) xl.Save xl.Quit
T'en pense quoi ?
La ligne 8 sert à effectuer un test d'existence de fichier ensuite (inutile dans ce code)...
En fait je crois avoir trouvé moins tordu (en plus j'ai entendu dire que le code VBA de project peut differer de celui d'excel)
Je vais creér une macro dans mon fichier "fichier_receveur.xls" et je vais lancer l'execution depuis Project
un truc du style:
ça serait plus efficace tu penses?
En fait je crois avoir trouvé moins tordu (en plus j'ai entendu dire que le code VBA de project peut differer de celui d'excel)
Je vais creér une macro dans mon fichier "fichier_receveur.xls" et je vais lancer l'execution depuis Project
un truc du style:
ExcelAppli.Application.Run "fichier_receveur.xls!fusion_fonction"
ça serait plus efficace tu penses?
Je débute en VBA donc si je parais assez "brouillon" c'est que je le suis
Merci pour le bout de code, cependant une question. Quand tu définies ton objet style
Merci pour le bout de code, cependant une question. Quand tu définies ton objet style
c'est considéré comme une feuille Excel? Je ne savais pas qu'on pouvait définir un objet comme application.workbooks, en tout cas ça a l'air bien pratique
Set data_wb = xl.Workbooks.Open(".......\data.xls" )
J'ai essayé comme tu me l'as indiqué:
Le debuger me dit "erreur d'execution '424' Objet requis"
En me surlignant la ligne "Data1.WorkSheets("Export").Select"
FileSaveAs Name:="D:\data_1.xls", _
FormatID:="MSProject.XLS8", _
map:="ExportGoMeeting"
Dim ExcelAppli As Object
Dim data_1 As Object
Dim recv As Object
Set ExcelAppli = CreateObject("Excel.application")
Set recv = ExcelAppli.Workbooks.Open("D:\fichier_receveur.xls")
ExcelAppli.Visible = True
Set Data1 = ExcelAppli.Workbooks.Open("D:\fichier_data.xls")
ExcelAppli.Visible = False
Data1.WorkSheets("Export").Select
Data1.WorkSheets("Export").Copy recv.Sheets("comp_j")
Le debuger me dit "erreur d'execution '424' Objet requis"
En me surlignant la ligne "Data1.WorkSheets("Export").Select"
apapa59 a dit :
Je débute en VBA donc si je parais assez "brouillon" c'est que je le suis
apapa59 a dit :
Quand tu définies ton objet stylec'est considéré comme une feuille Excel?
Set data_wb = xl.Workbooks.Open(".......\data.xls" )
apapa59 a dit :
Je ne savais pas que....
Bon, alors M. Brouillon, tu vas me mettre Option Explicit tout en haut de ton code, avant tout le reste. Et en plus, tu vas me mettre le curseur sur Explicit et appuyer sur [F1]. Ensuite tu me lis tout le laïus sur le sujet, et tu seras moins bête.
Parce que déclarer une variable data_1 pour ensuite utiliser Data1, c'est de la bêtise. (Ou de la brouillonerie
).Même chose pour les lignes 11 et 13. Je les trouve un peu redondantes.
Mets cette ligne juste après la création de l'objet Excel (ligne 9).
Tu es sûr d'avoir un onglet qui s'appelle Export ?
Pis d'abord, pourquoi te sens-tu obligé de sélectionner cette feuille (ligne 14) ?
A te lire...
Merci du temps que tu m'accordes
Pardon pour l'erreur Woorkbook/Sheet (Mr Brouillon a aussi le cerveau brouillon...
)
J'ai compliqué un peu le module dans le sens où:
-j'enregistre mon .mpp dans un dossier 1 (data_1.xls)
-je n'utilise pas directement le fichier receveur, présent dans un dossier 2, mais je le copie dans le dossier 1
je fais pour cela un test pour savoir si la copie existe déjà ou non ( d'où ma ligne FSO)
(il me sert en quelque sorte de fichier source pour d'autres modules)
-j'effectue la manip de copie de feuille du fichier data_1 vers copie_fichier_receveur
-je sauvegarde cette copie
-je supprime le fichier data_1
Ce qui donne (après lecture attentive de l'aide sur Explicit
) le code suivant
il me dit que fichier_data est introuvable... (à la méthode Excel.Appli.workbooks.Open(Chemin1 & "fichier_data.xls") )
Sinon d'autres erreurs?
Pardon pour l'erreur Woorkbook/Sheet (Mr Brouillon a aussi le cerveau brouillon...
)J'ai compliqué un peu le module dans le sens où:
-j'enregistre mon .mpp dans un dossier 1 (data_1.xls)
-je n'utilise pas directement le fichier receveur, présent dans un dossier 2, mais je le copie dans le dossier 1
je fais pour cela un test pour savoir si la copie existe déjà ou non ( d'où ma ligne FSO)
(il me sert en quelque sorte de fichier source pour d'autres modules)
-j'effectue la manip de copie de feuille du fichier data_1 vers copie_fichier_receveur
-je sauvegarde cette copie
-je supprime le fichier data_1
Ce qui donne (après lecture attentive de l'aide sur Explicit
) le code suivant
Option Explicit Public Const Chemin1 = "D:\Documents\auguste1\stage\tests\Simulation\1\" Public Const Chemin2 = "D:\Documents\auguste1\stage\tests\Simulation\2\" Sub export() FileSaveAs Name:=Chemin1 & "fichier_data.xls", _ FormatID:="MSProject.XLS8", _ map:="ExportGoMeeting" Dim ExcelAppli As Object Dim objFSO As Object Dim Data1 As Object Dim recv As Object Dim copie_recv As Object Set ExcelAppli = CreateObject("Excel.application") ExcelAppli.Visible = True Set objFSO = CreateObject("Scripting.FileSystemObject") Set Data1 = ExcelAppli.Workbooks.Open(Chemin1 & "fichier_data.xls") If objFSO.FileExists(Chemin1 & "fichier_receveur_copie.xls") = False Then Set recv = ExcelAppli.Workbooks.Open(Chemin2 & "fichier_receveur.xls") ExcelAppli.ActiveWorkbook.SaveAs (Chemin1 & "fichier_receveur_copie.xls") Set copie_recv = ExcelAppli.Open(Chemin1 & "fichier_receveur_copie.xls") Else Set copie_recv = ExcelAppli.Open(Chemin1 & "fichier_receveur_copie.xls") End If Data1.WorkSheets("Export").Copy copie_recv.Sheets("comparaison_journaliere") ExcelAppli.copie_recv.Save ExcelAppli.DisplayAlerts = False ExcelAppli.Quit ExcelAppli.DisplayAlerts = True Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFile (Chemin1 & "fichier_data.xls") Set ExcelAppli = Nothing Set objFSO = Nothing End Sub
il me dit que fichier_data est introuvable... (à la méthode Excel.Appli.workbooks.Open(Chemin1 & "fichier_data.xls") )
Sinon d'autres erreurs?
J'ai finalement corrigé les petites "coquilles" qui trainaient
j'arrive à un résultat presque satisfaisant, le rendu final étant mon fichier_copie avec la feuille Export en plus dessus
Le code corrigé:
Petite erreur cependant à la fin, la ligne 31 etant problématique ("Méthode non gérée pour cet objet...)
j'arrive à un résultat presque satisfaisant, le rendu final étant mon fichier_copie avec la feuille Export en plus dessus
Le code corrigé:
Option Explicit
Public Const Chemin1 = "D:\blablabla\1\"
Public Const Chemin2 = "D:\blablabla\2\"
Sub export()
FileSaveAs Chemin1 & "fichier_data.xls", FormatID:="MSProject.XLS8", map:="ExportGoMeeting"
Dim ExcelAppli As Object
Dim objFSO As Object
Dim Data1 As Object
Dim recv As Object
Dim copie_recv As Object
Set ExcelAppli = CreateObject("Excel.application")
ExcelAppli.Visible = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set Data1 = ExcelAppli.Workbooks.Open(Chemin1 & "fichier_data.xls")
If objFSO.FileExists(Chemin1 & "fichier_receveur_copie.xls") = False Then
Set recv = ExcelAppli.Workbooks.Open(Chemin2 & "fichier_receveur.xls")
ExcelAppli.ActiveWorkbook.SaveAs (Chemin1 & "fichier_receveur_copie.xls")
Set copie_recv = ExcelAppli.Workbooks.Open(Chemin1 & "fichier_receveur_copie.xls")
Else
Set copie_recv = ExcelAppli.Workbooks.Open(Chemin1 & "fichier_receveur_copie.xls")
End If
Data1.WorkSheets("Export").Copy Before:=copie_recv.WorkSheets("comparaison_jour")
ExcelAppli.copie_recv.SaveAs
ExcelAppli.DisplayAlerts = False
ExcelAppli.Quit
ExcelAppli.DisplayAlerts = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile (Chemin1 & "fichier_data.xls")
Set ExcelAppli = Nothing
Set objFSO = Nothing
End Sub
Petite erreur cependant à la fin, la ligne 31 etant problématique ("Méthode non gérée pour cet objet...)
Option Explicit ' // J'ai retiré ton nom, gros malin. Public Const Chemin1 = "D:\Documents\auguste1\stage\tests\Simulation\1\" Public Const Chemin2 = "D:\Documents\auguste1\stage\tests\Simulation\2\" Sub export() FileSaveAs Name:=Chemin1 & "fichier_data.xls", FormatID:="MSProject.XLS8", map:="ExportGoMeeting" Dim ExcelAppli As Object Dim objFSO As Object Dim Data1 As Object Dim recv As Object Dim copie_recv As Object Set ExcelAppli = CreateObject("Excel.application" ) ExcelAppli.Visible = True Set objFSO = CreateObject("Scripting.FileSystemObject" ) ' // Si tu n'es pas sûr que le chemin existe, fais une vérif : If Not objFSO.FileExists(Chemin1 & "fichier_data.xls" ) Then MsgBox "Le fichier " & Chemin1 & "fichier_data.xls n'existe pas", vbCritical Exit Sub ' // On a un problème. On a quitter la procédure sans fermer Excel. Donc il faudra remonter tout ce bloc avant l'ouverture d'Excel End If Set Data1 = ExcelAppli.Workbooks.Open(Chemin1 & "fichier_data.xls" ) ' // = False / = True beurk If Not objFSO.FileExists(Chemin1 & "fichier_receveur_copie.xls" ) Then Set recv = ExcelAppli.Workbooks.Open(Chemin2 & "fichier_receveur.xls" ) recv.SaveAs Chemin1 & "fichier_receveur_copie.xls" End If ' // Plutôt que de le faire dans les deux cas, sors-le du if ! Set copie_recv = ExcelAppli.Worbooks.Open(Chemin1 & "fichier_receveur_copie.xls" ) ' // Si comparaison_journaliere est une feuille de calcul, tu peux utiliser Worksheets() Data1.WorkSheets("Export" ).Copy copie_recv.Sheets("comparaison_journaliere" ) ExcelAppli.copie_recv.Save ExcelAppli.DisplayAlerts = False ExcelAppli.Quit ' // Mettre ce genre de code, le plus tôt possible. Set ExcelAppli = Nothing ' // Là, normalement, on a quitter Excel, alors ça ne sert plus trop à rien, hein !!! ExcelAppli.DisplayAlerts = True ' ///// <-- supprimer cette ligne ' // objFSO est déjà un Scripting.FileSystemObject. Pas la peine de le refaire ! Set objFSO = CreateObject("Scripting.FileSystemObject" ) ' ///// <-- supprimer cette ligne objFSO.DeleteFile (Chemin1 & "fichier_data.xls" ) ' // Inutile, car trop près de la fin de la macro, qui va de toute façon mettre Nothing dans objFSO Set objFSO = Nothing ///// <-- supprimer cette ligne End Sub
Après tous tes conseils, j'aboutis à ceci:
et toujours ce problème de sauvegarde à la fin
Mais en tout cas merci pour tout, ça a bien avancé
(je savais pas ce qu'était le VBA y'a une semaine)
Option Explicit
Public Const Chemin1 = "D:\blablabla\1\"
Public Const Chemin2 = "D:\blablabla\2\"
Sub export()
FileSaveAs Chemin1 & "fichier_data.xls", FormatID:="MSProject.XLS8", map:="ExportGoMeeting"
Dim ExcelAppli As Object
Dim objFSO As Object
Dim Data1 As Object
Dim recv As Object
Dim copie_recv As Object
Set ExcelAppli = CreateObject("Excel.application")
ExcelAppli.Visible = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set Data1 = ExcelAppli.Workbooks.Open(Chemin1 & "fichier_data.xls")
If objFSO.FileExists(Chemin1 & "fichier_receveur_copie.xls") = False Then
Set recv = ExcelAppli.Workbooks.Open(Chemin2 & "fichier_receveur.xls")
ExcelAppli.ActiveWorkbook.SaveAs (Chemin1 & "fichier_receveur_copie.xls")
End If
Set copie_recv = ExcelAppli.Workbooks.Open(Chemin1 & "fichier_receveur_copie.xls")
Data1.WorkSheets("Export").Copy Before:=copie_recv.WorkSheets("comparaison_jour")
ExcelAppli.copie_recv.SaveAs
ExcelAppli.DisplayAlerts = False
ExcelAppli.Quit
Set ExcelAppli = Nothing
objFSO.DeleteFile (Chemin1 & "fichier_data.xls")
Set objFSO = Nothing
End Sub
et toujours ce problème de sauvegarde à la fin
Mais en tout cas merci pour tout, ça a bien avancé
(je savais pas ce qu'était le VBA y'a une semaine)
Salut,
Et si tu relisais mon code et les commentaires que j'y faisais et que tu le comparais au tien.
Par exemple, lignes 58/34 (mon/ton code), ou 43/28.
Pis arrête avec les
Et pire que tout, tu utilises un ActiveTruc (que j'avais laissé passer, mais j'ai corrigé mon code). Ligne 20 de ton code, tu définis une variable, ligne 21, tu ne la réutilises pas. C'est nul.
Bon, tu as tous les éléments pour que ça marche, d'une part, et pour que ça marche bien d'autre part. Enjoy!
Et si tu relisais mon code et les commentaires que j'y faisais et que tu le comparais au tien.
Par exemple, lignes 58/34 (mon/ton code), ou 43/28.
Pis arrête avec les
Utilise un Not(lignes 23/19)
= False
Et pire que tout, tu utilises un ActiveTruc (que j'avais laissé passer, mais j'ai corrigé mon code). Ligne 20 de ton code, tu définis une variable, ligne 21, tu ne la réutilises pas. C'est nul.
Bon, tu as tous les éléments pour que ça marche, d'une part, et pour que ça marche bien d'autre part. Enjoy!
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumAccess vba export excel
- ForumExport excel gt access avec vba depuis access
- ForumExport daccess vers excel
- ForumExcel export html
- ForumExport excel javascript
- ForumExcel export csv
- ForumExport detat dans excel
- ForumExport colonne excel
- ForumExport donnã e excel
- ForumVba excel version excel
- Voir plus