OVH Cloud OVH Cloud

XLA chargées

2 réponses
Avatar
JohnFuss
Bonjour,

j'ai une fonction que je desire lancée dès que toutes les macros
complémentaires sont chargées et pas avant, comment puis-je m'y prendre ?

Merci d'avance.

John.

2 réponses

Avatar
michdenis
Bonjour John,

À l'ouverture d'excel ou à l'ouverture d'un classeur particulier ?

Si tu veux que cela se produise à l'ouverture d'excel, il faudra créer un modèle (.xlt) au nom de "Classeur.xlt", y inclure les
procédures et placer ce modèle dans le répertoire XlStart.

Ce qui suit pourrait bien avoir été publié en premier par Frédéric Sigonneau. Je n'ai plus l'auteur. Si ce dernier se reconnaît,
prière de m'envoyer un courriel pour que je compléte mes sources.


'à mettre dans le haut du module standard (API)
Declare Function SearchTreeForFile Lib "IMAGEHLP.DLL" _
(ByVal lpRootPath As String, _
ByVal lpInputName As String, _
ByVal lpOutputName As String) As Long

Public Const MAX_PATH = 260

'----------------------------------
Sub MesAddins()
'Pour pouvoir charger l'addins(Utilitaire d'analyse)peu importe
'si on ajouter des macros complémentaires personnelles
Dim T() As Variant, Trouve As String, No As Integer

'Propriété FullName de l'addins("Utilitaire d'analyse")
Trouve = TrouveFichier("ANALYS32.XLL")

For i = 1 To Application.AddIns.Count
If Application.AddIns(i).FullName = Trouve Then
Application.AddIns(i).Installed = True
Exit For
End If
Next

End Sub
'----------------------------------

'la fonction renvoie le chemin complet et le nom du fichier cherché
'entrer le Nom en paramètre sous la forme nomFichier.extension

Function TrouveFichier(ByVal Nom As String)
Dim fso As Object, Lecteurs As Object, L As Object, S$

Set fso = CreateObject("Scripting.FileSystemObject")
Set Lecteurs = fso.drives

TrouveFichier = ""

'récupère les lecteurs locaux (type 2) et les passe en revue
For Each L In Lecteurs
If L.DriveType = 2 Then
S = L.driveletter & ":"
If FindFile(S, Nom) <> "" Then
TrouveFichier = FindFile(S, Nom)
Exit For
End If
End If
Next L

End Function

'----------------------------------
Public Function FindFile(RootPath As String, FileName As String) As String
'Karl Moore, http://www.vbworld.com/files/tip529.html
'la recherche avec cette API est *très* rapide !!
Dim lNullPos As Long
Dim lResult As Long
Dim sBuffer As String

On Error GoTo FileFind_Error

'fournit par défaut le lecteur courant si non spécifié (fs)
If RootPath = "" Then RootPath = Left$(CurDir, 3)

'Allocate buffer
sBuffer = Space(MAX_PATH * 2)

'Find the file
lResult = SearchTreeForFile(RootPath, FileName, sBuffer)

'Trim null, if exists
If lResult Then
lNullPos = InStr(sBuffer, vbNullChar)
If Not lNullPos Then
sBuffer = Left(sBuffer, lNullPos - 1)
End If
'Return filename
FindFile = sBuffer
Else
'Nothing found
FindFile = vbNullString
End If

Exit Function

FileFind_Error:
FindFile = vbNullString

End Function
'----------------------------------


Salutations!



"JohnFuss" a écrit dans le message de news: dkcs1f$36p$
Bonjour,

j'ai une fonction que je desire lancée dès que toutes les macros
complémentaires sont chargées et pas avant, comment puis-je m'y prendre ?

Merci d'avance.

John.
Avatar
JohnFuss
Bonjour et merci de ta réponse, dans mon cas j'ai une macro complémentaire
'principale' référencée par toutes mes autres macros complémentaires, cette
macro principale génére si il n'existe pas un fichier xla qui s'install en
temps que macro complémentaire, au prochain redemarrage d'Excel à son
chargement cette macro doit désinstaller toutes les macros complémentaires
présentes pour leur trouver des mises à jour sur le réseau et il faut
absoilument que ces macros soient chargées complétement sinon mon code
s'arrête au moment où je désinstall la dernière macro (la principale).

Pfff, c'est un peu tordu, ma mise à jour fonctionne très bien mais quand
elle est lancée par l'utilisateur, quand ça se passe au démarrage ça ne
fonctionne plus.

J'ai bien essayer de boucler sur un doevents jusqu'à ce info de fin de
chargement soit mise en base de registre mais ça ne marche pas bien.

John

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

À l'ouverture d'excel ou à l'ouverture d'un classeur particulier ?

Si tu veux que cela se produise à l'ouverture d'excel, il faudra créer un
modèle (.xlt) au nom de "Classeur.xlt", y inclure les

procédures et placer ce modèle dans le répertoire XlStart.

Ce qui suit pourrait bien avoir été publié en premier par Frédéric
Sigonneau. Je n'ai plus l'auteur. Si ce dernier se reconnaît,

prière de m'envoyer un courriel pour que je compléte mes sources.


'à mettre dans le haut du module standard (API)
Declare Function SearchTreeForFile Lib "IMAGEHLP.DLL" _
(ByVal lpRootPath As String, _
ByVal lpInputName As String, _
ByVal lpOutputName As String) As Long

Public Const MAX_PATH = 260

'----------------------------------
Sub MesAddins()
'Pour pouvoir charger l'addins(Utilitaire d'analyse)peu importe
'si on ajouter des macros complémentaires personnelles
Dim T() As Variant, Trouve As String, No As Integer

'Propriété FullName de l'addins("Utilitaire d'analyse")
Trouve = TrouveFichier("ANALYS32.XLL")

For i = 1 To Application.AddIns.Count
If Application.AddIns(i).FullName = Trouve Then
Application.AddIns(i).Installed = True
Exit For
End If
Next

End Sub
'----------------------------------

'la fonction renvoie le chemin complet et le nom du fichier cherché
'entrer le Nom en paramètre sous la forme nomFichier.extension

Function TrouveFichier(ByVal Nom As String)
Dim fso As Object, Lecteurs As Object, L As Object, S$

Set fso = CreateObject("Scripting.FileSystemObject")
Set Lecteurs = fso.drives

TrouveFichier = ""

'récupère les lecteurs locaux (type 2) et les passe en revue
For Each L In Lecteurs
If L.DriveType = 2 Then
S = L.driveletter & ":"
If FindFile(S, Nom) <> "" Then
TrouveFichier = FindFile(S, Nom)
Exit For
End If
End If
Next L

End Function

'----------------------------------
Public Function FindFile(RootPath As String, FileName As String) As String
'Karl Moore, http://www.vbworld.com/files/tip529.html
'la recherche avec cette API est *très* rapide !!
Dim lNullPos As Long
Dim lResult As Long
Dim sBuffer As String

On Error GoTo FileFind_Error

'fournit par défaut le lecteur courant si non spécifié (fs)
If RootPath = "" Then RootPath = Left$(CurDir, 3)

'Allocate buffer
sBuffer = Space(MAX_PATH * 2)

'Find the file
lResult = SearchTreeForFile(RootPath, FileName, sBuffer)

'Trim null, if exists
If lResult Then
lNullPos = InStr(sBuffer, vbNullChar)
If Not lNullPos Then
sBuffer = Left(sBuffer, lNullPos - 1)
End If
'Return filename
FindFile = sBuffer
Else
'Nothing found
FindFile = vbNullString
End If

Exit Function

FileFind_Error:
FindFile = vbNullString

End Function
'----------------------------------


Salutations!



"JohnFuss" a écrit dans le message de news:
dkcs1f$36p$

Bonjour,

j'ai une fonction que je desire lancée dès que toutes les macros
complémentaires sont chargées et pas avant, comment puis-je m'y prendre ?

Merci d'avance.

John.