Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ajout de référence VBA et affichage

19 réponses
Avatar
Ghislain
Salut à tous,
J'ai une toute petite macro qui à l'ouverture du classeur ajoute une
référence à la bibliothèque de powerpoint 2007 et affiche une boite à
outils :
Private Sub Workbook_Open()
Call
ThisWorkbook.VBProject.References.AddFromGuid("{91493440-5A91-11CF-8700-00A A0060263B}",
2, 9)
frmBelleVue.Show
End Sub
Figurez vous que la boite à outil n'apparait pas ! Pas de message
d'erreur, je suis même "nargué" par excel qui fait apparaître la boit e
à outil l'espace d'un centième de seconde.
Private Sub Workbook_Open()
frmBelleVue.Show
End Sub
J'ai impérativement besoin d'installer cette référence au démarra ge
ET d'afficher la boite à outils.
Je précise qu'inverser l'ordre des instructions ne change rien.
Merci par avance,
Ghislain

10 réponses

1 2
Avatar
michdenis
Tu devrais :

A ) Ajouter en début de procédure : On Error Resume Next

Car lorsque tu essaies de charger une bibliothèque déjà
présente, ta ligne de code va planter .... pour une question
de sécurité....

B ) Avant de de vouloir afficher le formuaire, tu ajoutes la ligne de code

DoEvents

TA procédure devient :

'---------------------
Private Sub Workbook_Open()
On error resume next
ThisWorkbook.VBProject.References.AddFromGuid _
"{91493440-5A91-11CF-8700-00AA0060263B",2, 9
On error goto 0
DoEvents
frmBelleVue.Show 0
End Sub
'---------------------


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

Salut à tous,
J'ai une toute petite macro qui à l'ouverture du classeur ajoute une
référence à la bibliothèque de powerpoint 2007 et affiche une boite à
outils :
Private Sub Workbook_Open()
Call
ThisWorkbook.VBProject.References.AddFromGuid("{91493440-5A91-11CF-8700-00AA0060263B}",
2, 9)
frmBelleVue.Show
End Sub
Figurez vous que la boite à outil n'apparait pas ! Pas de message
d'erreur, je suis même "nargué" par excel qui fait apparaître la boite
à outil l'espace d'un centième de seconde.
Private Sub Workbook_Open()
frmBelleVue.Show
End Sub
J'ai impérativement besoin d'installer cette référence au démarrage
ET d'afficher la boite à outils.
Je précise qu'inverser l'ordre des instructions ne change rien.
Merci par avance,
Ghislain
Avatar
Ghislain
Merci de ton aide michdenis, j'ai testé ta solution mais
malheureusement le problème persiste.
Avatar
michdenis
La proposition faite est fonctionnel sous excel 2003. testée !


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

Merci de ton aide michdenis, j'ai testé ta solution mais
malheureusement le problème persiste.
Avatar
Ghislain
Pour mon malheur j'ai excel 2007.
Dans ton test, as tu bien ajouté l'accolade fermante '}' qui manque à
ta proposition ? Sinon il y a une erreur, un resume next et la boite
s'affiche bien alors que la référence n'est pas installée.
On 22 août, 12:54, "michdenis" wrote:
La proposition faite est fonctionnel sous excel 2003. testée !

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

Merci de ton aide michdenis, j'ai testé ta solution mais
malheureusement le problème persiste.


Avatar
michdenis
Non seulement elle était présente pour mon test mais
la référence était chargée après l'exécution de la procédure.

2007, connais pas.

Dans ton code, au lieu d'utiliser une liaison précoce qui demande
d'office la présence de la référence, tu peux faire appel à une liaison
tardive.

En début de procédure, tu fais comme ceci :

Dim PP as Object

Set PP = Createobject("PowerPoint.application")



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

Pour mon malheur j'ai excel 2007.
Dans ton test, as tu bien ajouté l'accolade fermante '}' qui manque à
ta proposition ? Sinon il y a une erreur, un resume next et la boite
s'affiche bien alors que la référence n'est pas installée.
On 22 août, 12:54, "michdenis" wrote:
La proposition faite est fonctionnel sous excel 2003. testée !

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

Merci de ton aide michdenis, j'ai testé ta solution mais
malheureusement le problème persiste.


Avatar
Ghislain
Effectivement il reste cette solution, mais qui me prive de tout le
confort de l'éditeur, la compilation etc..
Avatar
michdenis
Le cheminement de ce fil est particulier...

Ta question initiale faisait référence à la difficulté de faire
afficher ton formulaire....

maintenant il semble que tu aies de la difficulté à ajouter
la référence ....

De quel problème s'agit-il ?



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

Effectivement il reste cette solution, mais qui me prive de tout le
confort de l'éditeur, la compilation etc..
Avatar
Ghislain
Et bien en résumé si j'installe la référence mon formulaire ne
s'affiche pas. Tu me proposes de faire une liaison tardive, donc à ne
pas installer la référence. Aussi je perds les avantages de la liaison
anticipée (copier/coller de msdn) :
Avantages de la liaison anticipée

Vous devez utiliser des objets à liaison anticipée chaque fois que
cela est possible, car ils permettent au compilateur d'effectuer
d'importantes optimisations, avec pour résultat des applications plus
efficaces. Ils sont beaucoup plus rapides que les objets à liaison
tardive et facilitent la lecture et la gestion du code en indiquant
avec exactitude les types d'objets utilisés. La liaison anticipée
présente également l'avantage d'activer des fonctionnalités utiles,
telles que la saisie semi-automatique du code et l'Aide dynamique, car
l'environnement de développement intégré (IDE, Integrated Development
Environment) Visual Studio peut déterminer avec précision le type
d'objet utilisé lorsque vous modifiez le code. Elle réduit le nombre
et la gravité des erreurs d'exécution en permettant au compilateur de
signaler les erreurs lors de la compilation d'un programme.

Donc, tu me proposes un workaround qui fonctionne mais qui a ces
inconvénients.
Avatar
michdenis
Liaison tardive vs liaison précode

A ) En ce qui concerne le temps d'exécution, la différence
n'est pas énorme et ce sens que les ordi. d'aujourd'hui
n'ont rien à voir avec les ordi d'il y a 7 ou 8 ans et avant.

Évidemment la liaison précoce est toujours un peu plus
rapide mais la différence est devenu tenu !

B ) En ce qui concerne la facilité à écrire le code lorsqu'une
liaison précoce est établi ... je suis d'accord avec toi que
la liste déroulante proprosée au moment de saisir le code
des propriétés et méthodes des objets est une avantage
indébile.

Cependant, j'ai de la difficulté à imaginer que la solutions proposée
ne fonctionne pas.

Si tu essaies simplement de charger la référence sans afficher le
formulaire est-ce que la ligne de code à cet effet fonctionne avec la
version excel 2007 ?

Est-tu certain que ces "Numéros" sont effectifs avec excel 2007 ?
(la proprité "Guid" , "Major" et "Minor" de la référence)
Ils fonctionnent très bien avec Excel 2003.

ThisWorkbook.VBProject.References.AddFromGuid _
"{91493440-5A91-11CF-8700-00AA0060263B",2, 9

Lorsque tu exécutes la ligne de code précédente, assure-toi que la
référence n'est pas `déjà chargée sinon cela génère une erreur.
c'est ce pourquoi je te recommandais d'utiliser "On error resume next"

Pour trouver le Guid, Major et Minor de chacune des références déjà cochées
dans la liste, tu exécutes cette procédure :

Attention, l'information est retournée dans la feuille active !

'---------------------------------------
Sub Test()
Dim A As Integer
Dim Ref As Variant

A = 1
Range("A" & A) = "Nom"
Range("B" & A) = "Major"
Range("C" & A) = "Minor"
Range("D" & A) = "Guid"
With Range("A1:D1")
.Font.Bold = True
End With

For Each Ref In ThisWorkbook.VBProject.References
A = A + 1
Range("A" & A) = Ref.Name
Range("b" & A) = Ref.major
Range("c" & A) = Ref.minor
Range("D" & A) = Ref.GUID
Next
Range("A1").Resize(, 4).EntireColumn.AutoFit
End Sub
'---------------------------------------








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

Et bien en résumé si j'installe la référence mon formulaire ne
s'affiche pas. Tu me proposes de faire une liaison tardive, donc à ne
pas installer la référence. Aussi je perds les avantages de la liaison
anticipée (copier/coller de msdn) :
Avantages de la liaison anticipée

Vous devez utiliser des objets à liaison anticipée chaque fois que
cela est possible, car ils permettent au compilateur d'effectuer
d'importantes optimisations, avec pour résultat des applications plus
efficaces. Ils sont beaucoup plus rapides que les objets à liaison
tardive et facilitent la lecture et la gestion du code en indiquant
avec exactitude les types d'objets utilisés. La liaison anticipée
présente également l'avantage d'activer des fonctionnalités utiles,
telles que la saisie semi-automatique du code et l'Aide dynamique, car
l'environnement de développement intégré (IDE, Integrated Development
Environment) Visual Studio peut déterminer avec précision le type
d'objet utilisé lorsque vous modifiez le code. Elle réduit le nombre
et la gravité des erreurs d'exécution en permettant au compilateur de
signaler les erreurs lors de la compilation d'un programme.

Donc, tu me proposes un workaround qui fonctionne mais qui a ces
inconvénients.
Avatar
Ghislain
Salut michdenis,
Je te confirme que la référence est bien chargée j'ai trouvé le
Guid, Major et Minor comme tu l'indiques.
J'ai testé sur un poste avec excel 2003, et ça ne marchait pas, je
ne sais pas ce que j'ai fait de travers, alors si ça t'embéte pas
j'aimerais bien que tu m'envoies ton classeur test à

Encore merci pour ton aide,
Ghislain
1 2