OVH Cloud OVH Cloud

Macros complémentaires

9 réponses
Avatar
DesseJ
Bonjour,

Nos d=E9veloppeurs, dans leur appli en SQL, ont un module requ=EAteur
dont une des possibilit=E9s est l'export des donn=E9es vers Excel. Le
d=E9but du code utilis=E9 est celui-l=E0 :
Set ObjExcel =3D CreateObject("Excel.Application")
ObjExcel.Caption =3D "Export"
ObjExcel.Application.Workbooks.Add
ObjExcel.Application.Workbooks(1).Worksheets(1).Activate
ObjExcel.Application.Workbooks(1).Worksheets(1).Range("A1").Select
ObjExcel.Selection.CurrentRegion.Select
ObjExcel.Selection.ClearContents
ObjExcel.Application.Workbooks(1).Worksheets(1).Range("A1").Select
.=2E.

Cela fonctionne "bien" ; le progiciel, apr=E8s l'activation de la
fonction, lance Excel et cr=E9e un classeur avec les donn=E9es
export=E9es.

Mais il y a un mais. Je me suis aper=E7u que les macros compl=E9mentaires
qu'elles soient personnelles ou celles de Microsoft (bien que
pr=E9sentes et coch=E9es dans le menu) ne fonctionnaient pas. J'ai
effectu=E9 un test avec une macro compl=E9mentaire perso de base (message
"Impossible de trouver la macro Traitement"), et avec la fonction
Fin.Mois (#NOM).

En revanche, si j'enregistre le classeur, quitte Excel, puis j'ouvre de
nouveau ce classeur, l=E0 ma macro personnelle compl=E9mentaire et celle
"Utilitaire d'analyse" Fin.Mois fonctionnent parfaitement.

Y-a-t-il une astuce (je pense plut=F4t au niveau code du progiciel en
amont) pour =E9viter ce l=E9ger d=E9sagr=E9ment ?

Merci pour vos conseils
Steph. D.

9 réponses

Avatar
Mousnynao
Bonjour,

Vous devez charger manuellement les objets lorsque tenu par un objet OLE !

Set ObjExcel = CreateObject("Excel.Application")
ObjExcel.Caption = "Export"
.. ObjExcel.Application.Workbooks.Open(C:Program FilesMicrosoft

OfficeOffice10MacrolibAnalyseANALYS32.XLL)
.. ObjExcel.Application.Workbooks.Open("C:Macros
complémentairesMenuPerso.xla")
ObjExcel.Application.Workbooks.Add


toutefois, il est plus simple de fermer Excel a ce stade et relancer
avec un shell directement sur le fichier créer.

mousnynao


Bonjour,

Nos développeurs, dans leur appli en SQL, ont un module requêteur
dont une des possibilités est l'export des données vers Excel. Le
début du code utilisé est celui-là :
Set ObjExcel = CreateObject("Excel.Application")
ObjExcel.Caption = "Export"
ObjExcel.Application.Workbooks.Add
ObjExcel.Application.Workbooks(1).Worksheets(1).Activate
ObjExcel.Application.Workbooks(1).Worksheets(1).Range("A1").Select
ObjExcel.Selection.CurrentRegion.Select
ObjExcel.Selection.ClearContents
ObjExcel.Application.Workbooks(1).Worksheets(1).Range("A1").Select
....

Cela fonctionne "bien" ; le progiciel, après l'activation de la
fonction, lance Excel et crée un classeur avec les données
exportées.

Mais il y a un mais. Je me suis aperçu que les macros complémentaires
qu'elles soient personnelles ou celles de Microsoft (bien que
présentes et cochées dans le menu) ne fonctionnaient pas. J'ai
effectué un test avec une macro complémentaire perso de base (message
"Impossible de trouver la macro Traitement"), et avec la fonction
Fin.Mois (#NOM).

En revanche, si j'enregistre le classeur, quitte Excel, puis j'ouvre de
nouveau ce classeur, là ma macro personnelle complémentaire et celle
"Utilitaire d'analyse" Fin.Mois fonctionnent parfaitement.

Y-a-t-il une astuce (je pense plutôt au niveau code du progiciel en
amont) pour éviter ce léger désagrément ?

Merci pour vos conseils
Steph. D.




Avatar
michdenis
Bonjour DesseJ,

J'utiliserais plutôt un code comme celui-ci :


ATTENTION: ATPVBAEN.XLA -> C'est le fichier Anglais
Il doit bien en avoir un français ATPVBAFR.XLA 'à vérifier!

Dim ObjExcel As Application
Dim Wk As Workbook, Sh As Worksheet

Set ObjExcel = CreateObject("Excel.Application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
Wk.VBProject.References.AddFromFile ( _
"C:Program FilesMicrosoft OfficeOFFICE11BibliothèqueAnalyseATPVBAEN.XLA")

Set Sh = Wk.Worksheets(1)
With Sh
.Range("A1").CurrentRegion.ClearContents
.Activate
End With

'Ferme le classeur en sauvegardant les données ou utlises SaveAs
Wk.close True
'Ferme l'instance excel.
ObjExcel.Quit



Salutations!



"DesseJ" a écrit dans le message de news:
Bonjour,

Nos développeurs, dans leur appli en SQL, ont un module requêteur
dont une des possibilités est l'export des données vers Excel. Le
début du code utilisé est celui-là :
Set ObjExcel = CreateObject("Excel.Application")
ObjExcel.Caption = "Export"
ObjExcel.Application.Workbooks.Add
ObjExcel.Application.Workbooks(1).Worksheets(1).Activate
ObjExcel.Application.Workbooks(1).Worksheets(1).Range("A1").Select
ObjExcel.Selection.CurrentRegion.Select
ObjExcel.Selection.ClearContents
ObjExcel.Application.Workbooks(1).Worksheets(1).Range("A1").Select
...

Cela fonctionne "bien" ; le progiciel, après l'activation de la
fonction, lance Excel et crée un classeur avec les données
exportées.

Mais il y a un mais. Je me suis aperçu que les macros complémentaires
qu'elles soient personnelles ou celles de Microsoft (bien que
présentes et cochées dans le menu) ne fonctionnaient pas. J'ai
effectué un test avec une macro complémentaire perso de base (message
"Impossible de trouver la macro Traitement"), et avec la fonction
Fin.Mois (#NOM).

En revanche, si j'enregistre le classeur, quitte Excel, puis j'ouvre de
nouveau ce classeur, là ma macro personnelle complémentaire et celle
"Utilitaire d'analyse" Fin.Mois fonctionnent parfaitement.

Y-a-t-il une astuce (je pense plutôt au niveau code du progiciel en
amont) pour éviter ce léger désagrément ?

Merci pour vos conseils
Steph. D.
Avatar
Mousnynao
Bonjour,

Je me permet ici de souligner que votre méthode ne fonctionne que sous VBA,
un script VBS externe, ne peut traiter ce type d'objet, enfin, moi je n'y
arrive pas !

de plus, sous VBA, pour utiliser VBProject.References, vous devez d'abord
charger la référence [Microsoft Visual Basic for Applications Extensibility].

Serais-je dans l'erreur ?

mousnynao



Bonjour DesseJ,

J'utiliserais plutôt un code comme celui-ci :


ATTENTION: ATPVBAEN.XLA -> C'est le fichier Anglais
Il doit bien en avoir un français ATPVBAFR.XLA 'à vérifier!

Dim ObjExcel As Application
Dim Wk As Workbook, Sh As Worksheet

Set ObjExcel = CreateObject("Excel.Application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
Wk.VBProject.References.AddFromFile ( _
"C:Program FilesMicrosoft OfficeOFFICE11BibliothèqueAnalyseATPVBAEN.XLA")

Set Sh = Wk.Worksheets(1)
With Sh
.Range("A1").CurrentRegion.ClearContents
.Activate
End With

'Ferme le classeur en sauvegardant les données ou utlises SaveAs
Wk.close True
'Ferme l'instance excel.
ObjExcel.Quit



Salutations!



"DesseJ" a écrit dans le message de news:
Bonjour,

Nos développeurs, dans leur appli en SQL, ont un module requêteur
dont une des possibilités est l'export des données vers Excel. Le
début du code utilisé est celui-là :
Set ObjExcel = CreateObject("Excel.Application")
ObjExcel.Caption = "Export"
ObjExcel.Application.Workbooks.Add
ObjExcel.Application.Workbooks(1).Worksheets(1).Activate
ObjExcel.Application.Workbooks(1).Worksheets(1).Range("A1").Select
ObjExcel.Selection.CurrentRegion.Select
ObjExcel.Selection.ClearContents
ObjExcel.Application.Workbooks(1).Worksheets(1).Range("A1").Select
....

Cela fonctionne "bien" ; le progiciel, après l'activation de la
fonction, lance Excel et crée un classeur avec les données
exportées.

Mais il y a un mais. Je me suis aperçu que les macros complémentaires
qu'elles soient personnelles ou celles de Microsoft (bien que
présentes et cochées dans le menu) ne fonctionnaient pas. J'ai
effectué un test avec une macro complémentaire perso de base (message
"Impossible de trouver la macro Traitement"), et avec la fonction
Fin.Mois (#NOM).

En revanche, si j'enregistre le classeur, quitte Excel, puis j'ouvre de
nouveau ce classeur, là ma macro personnelle complémentaire et celle
"Utilitaire d'analyse" Fin.Mois fonctionnent parfaitement.

Y-a-t-il une astuce (je pense plutôt au niveau code du progiciel en
amont) pour éviter ce léger désagrément ?

Merci pour vos conseils
Steph. D.





Avatar
michdenis
Bonjour Mousnynao

J'ai testé ceci dans un module d'access, la seule chose que j'ai
modifiée est la déclaration des variables pour ne pas avoir à
charger la référence à Excel. ( late binding) et cela fonctionne
très bien.

| vous devez d'abord charger la référence
| [Microsoft Visual Basic for Applications Extensibility].

Pour ce qui est de ceci : Cela n'a aucun rapport avec la cas
présenté ici.

Voici le code ....

Dim ObjExcel As Object
Dim Wk As Object, Sh As Object

Set ObjExcel = CreateObject("Excel.Application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
Wk.VBProject.References.AddFromFile ( _
"C:Program FilesMicrosoft OfficeOFFICE11BibliothèqueAnalyseATPVBAEN.XLA")

Set Sh = Wk.Worksheets(1)
With Sh
.Range("A1").CurrentRegion.ClearContents
.Activate
End With

'Ferme le classeur en sauvegardant les données ou utlises SaveAs
Wk.Close True
'Ferme l'instance excel.
ObjExcel.Quit


Ce code devrait fonctionner très bien aussi dans un fichier .VBS
A ) Il ne faut pas déclarer le type des variables
B ) utiliser ceci pour créer l'instance d'excel

Set ObjExcel = WScript.CreateObject("EXCEL.application")
en lieu et place de ceci :
Set ObjExcel = CreateObject("Excel.Application")


Salutations!
Avatar
Mousnynao
Bonjour,

j'ai refait mes devoirs et hélas sous Office 10, votre code ne fonctionne pas
avec mon script vbs, je réussi à ouvrir une macro complémentaire qui
vérifie tous ça.

donc voici la syntaxe :

'-------------------------------------------------------------------------------------------------------------------------------

' Création de l'application "Excel"
Set xlApp = CreateObject("Excel.Application")

'Paramètres d'Excel
'Défini le nombre de feuille à la création d'un "nouveau classeur"
xlApp.SheetsInNewWorkbook = 1
'Ouvre la macro complémentaire personnalisé
xlApp.Workbooks.Open("D:Program FilesMicrosoft
OfficeOffice10MacrolibMenuPerso.xla")

' Création du classeur "nouveau classeur"
Set xlBook = xlApp.WorkBooks.Add
'-------------------------------------------------------------------------------------------------------------------------------

! étrangement je n'arrive pas à charger la macro complémentaire "Utilitaire
d'analyse" avant la création du premier classeur ?

Amicalement
mousnynao


Bonjour Mousnynao

J'ai testé ceci dans un module d'access, la seule chose que j'ai
modifiée est la déclaration des variables pour ne pas avoir à
charger la référence à Excel. ( late binding) et cela fonctionne
très bien.

| vous devez d'abord charger la référence
| [Microsoft Visual Basic for Applications Extensibility].

Pour ce qui est de ceci : Cela n'a aucun rapport avec la cas
présenté ici.

Voici le code ....

Dim ObjExcel As Object
Dim Wk As Object, Sh As Object

Set ObjExcel = CreateObject("Excel.Application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
Wk.VBProject.References.AddFromFile ( _
"C:Program FilesMicrosoft OfficeOFFICE11BibliothèqueAnalyseATPVBAEN.XLA")

Set Sh = Wk.Worksheets(1)
With Sh
.Range("A1").CurrentRegion.ClearContents
.Activate
End With

'Ferme le classeur en sauvegardant les données ou utlises SaveAs
Wk.Close True
'Ferme l'instance excel.
ObjExcel.Quit


Ce code devrait fonctionner très bien aussi dans un fichier .VBS
A ) Il ne faut pas déclarer le type des variables
B ) utiliser ceci pour créer l'instance d'excel

Set ObjExcel = WScript.CreateObject("EXCEL.application")
en lieu et place de ceci :
Set ObjExcel = CreateObject("Excel.Application")


Salutations!





Avatar
michdenis
Bonjour Mousnynao,

Voici j'ai fait le test suivant :
J'ai utilisé le code du message précédent en prenant soin de
désactiver les 2 dernières lignes de code :
- Enregistrement du fichier et
- Fermeture de l'instance.
Afin de m'assurer de la présence de la référence...:

J'ai ouvert la fenêtre de l'éditeur de macro et j'ai vérifié : la macro
complémentaire était présente. (barre de menus/outils/références)

De plus, le code s'exécute sans erreur. Difficile de penser que ce
code puisse générer une erreur même sur des versions
antérieures d'Excel!

| étrangement je n'arrive pas à charger la macro complémentaire "Utilitaire
| d'analyse" avant la création du premier classeur?

Selon moi, c'est l'inverse qui serait étrange!!!!!!!
Les lignes de code classique pour charger une référence sont :

ThisWorkbook.VBProject.References.AddFromFile(...) or addfromguid()
ou
Activeworkbook.VBProject.References...
ou
Workbooks("Nomclasseur.xls"). VBProject.References....

Il faut seulement se rappeler que la fonction première de l'ajout d'une référence
à un classeur est de permettre à l'usager de CE CLASSEUR d'avoir recours
à des fonctions (ressources) que l'application Excel de base ne lui offre pas.
Une référence dessert un classeur particulier ou des classeurs en général,
mais n'apporte rien à l'objet "Application" lui-même.

Voici une copie intégrale du code testé en fichier. vbs
(je réitère l'avertissement au sujet du fichier "ATPVBAEN.XLA"
qui rend accessible les fonctions de la macro complémentaire
"Utilitaire d'analyse" en langue anglaise. Sur mon ordi, je n'ai
pas le fichier de langue française, je crois : "ATPVBAFR.XLA"

'-------------------------------
Dim ObjExcel
Dim Wk
Dim Sh

Set ObjExcel = WScript.CreateObject ("EXCEL.application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
Wk.VBProject.References.AddFromFile (_
"C : Program FilesMicrosoft OfficeOFFICE11BibliothèqueAnalyseATPVBAEN.XLA")

Set Sh = Wk.Worksheets (1)
With Sh
.Range("A1"). CurrentRegion.ClearContents
.Activate
End With
'Ferme le classeur en sauvegardant les données ou utilise SaveAs
'Wk.Close True
' Ferme l'instance Excel.
'ObjExcel.Quit
' -- -- -- -- ------ ------ ------ -----


Salutations!



"Mousnynao" a écrit dans le message de news:

Bonjour,

j'ai refait mes devoirs et hélas sous Office 10, votre code ne fonctionne pas
avec mon script vbs, je réussi à ouvrir une macro complémentaire qui
vérifie tous ça.

donc voici la syntaxe :

'-------------------------------------------------------------------------------------------------------------------------------

' Création de l'application "Excel"
Set xlApp = CreateObject("Excel.Application")

'Paramètres d'Excel
'Défini le nombre de feuille à la création d'un "nouveau classeur"
xlApp.SheetsInNewWorkbook = 1
'Ouvre la macro complémentaire personnalisé
xlApp.Workbooks.Open("D:Program FilesMicrosoft
OfficeOffice10MacrolibMenuPerso.xla")

' Création du classeur "nouveau classeur"
Set xlBook = xlApp.WorkBooks.Add
'-------------------------------------------------------------------------------------------------------------------------------

! étrangement je n'arrive pas à charger la macro complémentaire "Utilitaire
d'analyse" avant la création du premier classeur ?

Amicalement
mousnynao


Bonjour Mousnynao

J'ai testé ceci dans un module d'access, la seule chose que j'ai
modifiée est la déclaration des variables pour ne pas avoir à
charger la référence à Excel. ( late binding) et cela fonctionne
très bien.

| vous devez d'abord charger la référence
| [Microsoft Visual Basic for Applications Extensibility].

Pour ce qui est de ceci : Cela n'a aucun rapport avec la cas
présenté ici.

Voici le code ....

Dim ObjExcel As Object
Dim Wk As Object, Sh As Object

Set ObjExcel = CreateObject("Excel.Application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
Wk.VBProject.References.AddFromFile ( _
"C:Program FilesMicrosoft OfficeOFFICE11BibliothèqueAnalyseATPVBAEN.XLA")

Set Sh = Wk.Worksheets(1)
With Sh
.Range("A1").CurrentRegion.ClearContents
.Activate
End With

'Ferme le classeur en sauvegardant les données ou utlises SaveAs
Wk.Close True
'Ferme l'instance excel.
ObjExcel.Quit


Ce code devrait fonctionner très bien aussi dans un fichier .VBS
A ) Il ne faut pas déclarer le type des variables
B ) utiliser ceci pour créer l'instance d'excel

Set ObjExcel = WScript.CreateObject("EXCEL.application")
en lieu et place de ceci :
Set ObjExcel = CreateObject("Excel.Application")


Salutations!





Avatar
Mousnynao
Rebonjour,

et bien voilà, j'ai copier coller ...
je suis sous wxp oxp et ...

'-------------------------------
Dim Wk
Dim Sh

Set ObjExcel = WScript.CreateObject ("EXCEL.application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
'Fonctionne
ObjExcel.WorkBooks.Open("D:Program FilesMicrosoft
OfficeOffice10MacrolibMenuPerso.xla")
'Ne fonctionne pas ???
'ObjExcel.WorkBooks.Open("D:Program FilesMicrosoft
OfficeOffice10MacrolibAnalyseATPVBAFR.XLA")
'Ne fonctionne pas ???
'ObjExcel.WorkBooks.Open("D:Program FilesMicrosoft
OfficeOffice10MacrolibAnalyseANALYS32.XLL")
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
'Ne fonctionne pas ???
'Wk.VBProject.References.AddFromFile ("D:Program FilesMicrosoft
OfficeOffice10MacrolibAnalyseATPVBAFR.XLA")
'Ne fonctionne pas ???
'Wk.VBProject.References.AddFromFile ("D:Program FilesMicrosoft
OfficeOffice10MacrolibMenuPerso.xla")

Set Sh = Wk.Worksheets (1)
With Sh
.Range("A1"). CurrentRegion.ClearContents
.Activate
End With
'Ferme le classeur en sauvegardant les données ou utilise SaveAs
'Wk.Close True
' Ferme l'instance Excel.
'ObjExcel.Quit
' -- -- -- -- ------ ------ ------ -----

Lorsque j'active les lignes que vous proposé, excel tombe à tout coup
lorsque je tente d'atteindre :
//Menu/Insertion/Fonctions...
/Ou choisir une catégorie : "Les dernières utilisées"
À chaque clic sur cette liste déroulante et c'est la fin d'excel :-(

alors que mon menuperso est bel et bien installé, je ne l'ai pas tout testé,
bien sur!
non visible dans :
//Menu/Outils/Macro Complémentaires

Amicalement
mousnynao


Bonjour Mousnynao,

Voici j'ai fait le test suivant :
J'ai utilisé le code du message précédent en prenant soin de
désactiver les 2 dernières lignes de code :
- Enregistrement du fichier et
- Fermeture de l'instance.
Afin de m'assurer de la présence de la référence...:

J'ai ouvert la fenêtre de l'éditeur de macro et j'ai vérifié : la macro
complémentaire était présente. (barre de menus/outils/références)

De plus, le code s'exécute sans erreur. Difficile de penser que ce
code puisse générer une erreur même sur des versions
antérieures d'Excel!

| étrangement je n'arrive pas à charger la macro complémentaire "Utilitaire
| d'analyse" avant la création du premier classeur?

Selon moi, c'est l'inverse qui serait étrange!!!!!!!
Les lignes de code classique pour charger une référence sont :

ThisWorkbook.VBProject.References.AddFromFile(...) or addfromguid()
ou
Activeworkbook.VBProject.References...
ou
Workbooks("Nomclasseur.xls"). VBProject.References....

Il faut seulement se rappeler que la fonction première de l'ajout d'une référence
à un classeur est de permettre à l'usager de CE CLASSEUR d'avoir recours
à des fonctions (ressources) que l'application Excel de base ne lui offre pas.
Une référence dessert un classeur particulier ou des classeurs en général,
mais n'apporte rien à l'objet "Application" lui-même.

Voici une copie intégrale du code testé en fichier. vbs
(je réitère l'avertissement au sujet du fichier "ATPVBAEN.XLA"
qui rend accessible les fonctions de la macro complémentaire
"Utilitaire d'analyse" en langue anglaise. Sur mon ordi, je n'ai
pas le fichier de langue française, je crois : "ATPVBAFR.XLA"

'-------------------------------
Dim ObjExcel
Dim Wk
Dim Sh

Set ObjExcel = WScript.CreateObject ("EXCEL.application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
Wk.VBProject.References.AddFromFile (_
"C : Program FilesMicrosoft OfficeOFFICE11BibliothèqueAnalyseATPVBAEN.XLA")

Set Sh = Wk.Worksheets (1)
With Sh
..Range("A1"). CurrentRegion.ClearContents
..Activate
End With
'Ferme le classeur en sauvegardant les données ou utilise SaveAs
'Wk.Close True
' Ferme l'instance Excel.
'ObjExcel.Quit
' -- -- -- -- ------ ------ ------ -----


Salutations!



"Mousnynao" a écrit dans le message de news:

Bonjour,

j'ai refait mes devoirs et hélas sous Office 10, votre code ne fonctionne pas
avec mon script vbs, je réussi à ouvrir une macro complémentaire qui
vérifie tous ça.

donc voici la syntaxe :

'-------------------------------------------------------------------------------------------------------------------------------

' Création de l'application "Excel"
Set xlApp = CreateObject("Excel.Application")

'Paramètres d'Excel
'Défini le nombre de feuille à la création d'un "nouveau classeur"
xlApp.SheetsInNewWorkbook = 1
'Ouvre la macro complémentaire personnalisé
xlApp.Workbooks.Open("D:Program FilesMicrosoft
OfficeOffice10MacrolibMenuPerso.xla")

' Création du classeur "nouveau classeur"
Set xlBook = xlApp.WorkBooks.Add
'-------------------------------------------------------------------------------------------------------------------------------

! étrangement je n'arrive pas à charger la macro complémentaire "Utilitaire
d'analyse" avant la création du premier classeur ?

Amicalement
mousnynao


Bonjour Mousnynao

J'ai testé ceci dans un module d'access, la seule chose que j'ai
modifiée est la déclaration des variables pour ne pas avoir à
charger la référence à Excel. ( late binding) et cela fonctionne
très bien.

| vous devez d'abord charger la référence
| [Microsoft Visual Basic for Applications Extensibility].

Pour ce qui est de ceci : Cela n'a aucun rapport avec la cas
présenté ici.

Voici le code ....

Dim ObjExcel As Object
Dim Wk As Object, Sh As Object

Set ObjExcel = CreateObject("Excel.Application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
Wk.VBProject.References.AddFromFile ( _
"C:Program FilesMicrosoft OfficeOFFICE11BibliothèqueAnalyseATPVBAEN.XLA")

Set Sh = Wk.Worksheets(1)
With Sh
.Range("A1").CurrentRegion.ClearContents
.Activate
End With

'Ferme le classeur en sauvegardant les données ou utlises SaveAs
Wk.Close True
'Ferme l'instance excel.
ObjExcel.Quit


Ce code devrait fonctionner très bien aussi dans un fichier .VBS
A ) Il ne faut pas déclarer le type des variables
B ) utiliser ceci pour créer l'instance d'excel

Set ObjExcel = WScript.CreateObject("EXCEL.application")
en lieu et place de ceci :
Set ObjExcel = CreateObject("Excel.Application")


Salutations!










Avatar
michdenis
POURQUOI EST-CE SI DIFFICILE DE TESTER LE SCRIPT
TEL QUE JE L'AI ÉCRIT ???????????????????????????

AMUSES-TOI À TESTER CE QUE TU VEUX !!!!!!!!!!

ceci est mon dernier message sur ce fil!


Salutations!


"Mousnynao" a écrit dans le message de news:

Rebonjour,

et bien voilà, j'ai copier coller ...
je suis sous wxp oxp et ...

'-------------------------------
Dim Wk
Dim Sh

Set ObjExcel = WScript.CreateObject ("EXCEL.application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
'Fonctionne
ObjExcel.WorkBooks.Open("D:Program FilesMicrosoft
OfficeOffice10MacrolibMenuPerso.xla")
'Ne fonctionne pas ???
'ObjExcel.WorkBooks.Open("D:Program FilesMicrosoft
OfficeOffice10MacrolibAnalyseATPVBAFR.XLA")
'Ne fonctionne pas ???
'ObjExcel.WorkBooks.Open("D:Program FilesMicrosoft
OfficeOffice10MacrolibAnalyseANALYS32.XLL")
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
'Ne fonctionne pas ???
'Wk.VBProject.References.AddFromFile ("D:Program FilesMicrosoft
OfficeOffice10MacrolibAnalyseATPVBAFR.XLA")
'Ne fonctionne pas ???
'Wk.VBProject.References.AddFromFile ("D:Program FilesMicrosoft
OfficeOffice10MacrolibMenuPerso.xla")

Set Sh = Wk.Worksheets (1)
With Sh
.Range("A1"). CurrentRegion.ClearContents
.Activate
End With
'Ferme le classeur en sauvegardant les données ou utilise SaveAs
'Wk.Close True
' Ferme l'instance Excel.
'ObjExcel.Quit
' -- -- -- -- ------ ------ ------ -----

Lorsque j'active les lignes que vous proposé, excel tombe à tout coup
lorsque je tente d'atteindre :
//Menu/Insertion/Fonctions...
/Ou choisir une catégorie : "Les dernières utilisées"
À chaque clic sur cette liste déroulante et c'est la fin d'excel :-(

alors que mon menuperso est bel et bien installé, je ne l'ai pas tout testé,
bien sur!
non visible dans :
//Menu/Outils/Macro Complémentaires

Amicalement
mousnynao


Bonjour Mousnynao,

Voici j'ai fait le test suivant :
J'ai utilisé le code du message précédent en prenant soin de
désactiver les 2 dernières lignes de code :
- Enregistrement du fichier et
- Fermeture de l'instance.
Afin de m'assurer de la présence de la référence...:

J'ai ouvert la fenêtre de l'éditeur de macro et j'ai vérifié : la macro
complémentaire était présente. (barre de menus/outils/références)

De plus, le code s'exécute sans erreur. Difficile de penser que ce
code puisse générer une erreur même sur des versions
antérieures d'Excel!

| étrangement je n'arrive pas à charger la macro complémentaire "Utilitaire
| d'analyse" avant la création du premier classeur?

Selon moi, c'est l'inverse qui serait étrange!!!!!!!
Les lignes de code classique pour charger une référence sont :

ThisWorkbook.VBProject.References.AddFromFile(...) or addfromguid()
ou
Activeworkbook.VBProject.References...
ou
Workbooks("Nomclasseur.xls"). VBProject.References....

Il faut seulement se rappeler que la fonction première de l'ajout d'une référence
à un classeur est de permettre à l'usager de CE CLASSEUR d'avoir recours
à des fonctions (ressources) que l'application Excel de base ne lui offre pas.
Une référence dessert un classeur particulier ou des classeurs en général,
mais n'apporte rien à l'objet "Application" lui-même.

Voici une copie intégrale du code testé en fichier. vbs
(je réitère l'avertissement au sujet du fichier "ATPVBAEN.XLA"
qui rend accessible les fonctions de la macro complémentaire
"Utilitaire d'analyse" en langue anglaise. Sur mon ordi, je n'ai
pas le fichier de langue française, je crois : "ATPVBAFR.XLA"

'-------------------------------
Dim ObjExcel
Dim Wk
Dim Sh

Set ObjExcel = WScript.CreateObject ("EXCEL.application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
Wk.VBProject.References.AddFromFile (_
"C : Program FilesMicrosoft OfficeOFFICE11BibliothèqueAnalyseATPVBAEN.XLA")

Set Sh = Wk.Worksheets (1)
With Sh
..Range("A1"). CurrentRegion.ClearContents
..Activate
End With
'Ferme le classeur en sauvegardant les données ou utilise SaveAs
'Wk.Close True
' Ferme l'instance Excel.
'ObjExcel.Quit
' -- -- -- -- ------ ------ ------ -----


Salutations!



"Mousnynao" a écrit dans le message de news:

Bonjour,

j'ai refait mes devoirs et hélas sous Office 10, votre code ne fonctionne pas
avec mon script vbs, je réussi à ouvrir une macro complémentaire qui
vérifie tous ça.

donc voici la syntaxe :

'-------------------------------------------------------------------------------------------------------------------------------

' Création de l'application "Excel"
Set xlApp = CreateObject("Excel.Application")

'Paramètres d'Excel
'Défini le nombre de feuille à la création d'un "nouveau classeur"
xlApp.SheetsInNewWorkbook = 1
'Ouvre la macro complémentaire personnalisé
xlApp.Workbooks.Open("D:Program FilesMicrosoft
OfficeOffice10MacrolibMenuPerso.xla")

' Création du classeur "nouveau classeur"
Set xlBook = xlApp.WorkBooks.Add
'-------------------------------------------------------------------------------------------------------------------------------

! étrangement je n'arrive pas à charger la macro complémentaire "Utilitaire
d'analyse" avant la création du premier classeur ?

Amicalement
mousnynao


Bonjour Mousnynao

J'ai testé ceci dans un module d'access, la seule chose que j'ai
modifiée est la déclaration des variables pour ne pas avoir à
charger la référence à Excel. ( late binding) et cela fonctionne
très bien.

| vous devez d'abord charger la référence
| [Microsoft Visual Basic for Applications Extensibility].

Pour ce qui est de ceci : Cela n'a aucun rapport avec la cas
présenté ici.

Voici le code ....

Dim ObjExcel As Object
Dim Wk As Object, Sh As Object

Set ObjExcel = CreateObject("Excel.Application")
ObjExcel.Caption = "Export"
ObjExcel.Visible = True ' Or False ...
Set Wk = ObjExcel.Application.Workbooks.Add

'Chargement de la macro complémentaire Utilitaire d'analyse
Wk.VBProject.References.AddFromFile ( _
"C:Program FilesMicrosoft OfficeOFFICE11BibliothèqueAnalyseATPVBAEN.XLA")

Set Sh = Wk.Worksheets(1)
With Sh
.Range("A1").CurrentRegion.ClearContents
.Activate
End With

'Ferme le classeur en sauvegardant les données ou utlises SaveAs
Wk.Close True
'Ferme l'instance excel.
ObjExcel.Quit


Ce code devrait fonctionner très bien aussi dans un fichier .VBS
A ) Il ne faut pas déclarer le type des variables
B ) utiliser ceci pour créer l'instance d'excel

Set ObjExcel = WScript.CreateObject("EXCEL.application")
en lieu et place de ceci :
Set ObjExcel = CreateObject("Excel.Application")


Salutations!










Avatar
DesseJ
Bonjour,

Merci à vous 2.

MichDenis, cela focntionne parfaitement (comme toujours). On va pouvoir
automatiser les "post-traitements" de nos applications que l'on peut
ajouter pour offrir plus de souplesse à nos clients.

Bonne journée
Steph. D.