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

Detection de fin de chargement des xla

6 réponses
Avatar
JohnFuss
Bonjour à tous,

j'ai développer une macro de mise à jour de ..... macros, le principe est
simple si une versio supérieure est dispo sur le réseau d'entreprise la
macro locale est grasso-modo remplacée par la nouvelle version.

Je précise que la plupart des utilisateurs utilisent les macros xla
déconnectés du réseau (itinérant).

Je voudrai qu'à l'ouverture d'Excel et une fois toutes les xla chargées
lancer ma fonction de mise à jour car pour mettre à jour les xla je dois les
désinstaller et ça ne prend effet qu'après leur chargement complet.

Je n'arrive pas à éxécuter ma fonction au bon moment. Avez-vous des
suggestions ?

Merci d'avance.

JohnFuss

6 réponses

Avatar
tissot.emmanuel
Bonsoir,

Ci-dessous un code à placer dans le module ThisWorkbook d'une macro
complémentaire qui doit bien évidemment etre installée.
A chaque ouverture d'une macro complémentaire elle verifie si toutes les
macros complémentaires installées sont ouvertes.
Si oui on lance la macro de mise à jour, sinon on ne fait rien.

Pour ce qui concerne l'utilitaire d'analyse un fichier funcres.xla est
ouvert mais c'est un fichier analys32.xll qui est ajouté a la collection
Addins, ce qui empeche sa détection. J'ai inclus le cas particulier mais un
probleme similaire pourrait survenir avec toute autre macro xll.

La procédure Update est lancé avant l'ouverture d'un quelconque classeur
.xls.

Testé avec xl2003.

Dim WithEvents xlapp As Application

Private Sub Workbook_Open()
Set xlapp = Application
If ReadyForUpdate Then Update
End Sub

Private Sub xlapp_WorkbookOpen(ByVal Wb As Workbook)
If ReadyForUpdate Then Update
End Sub

Private Sub Update()
MsgBox "Tous les fichiers xla sont ouverts. Mise à jour. " &
Workbooks.Count
Set xlapp = Nothing
End Sub

Function ReadyForUpdate() As Boolean
Dim ad As AddIn, adinst() As String, i As Integer, w As Workbook
ReDim adinst(1 To Application.AddIns.Count)
For Each ad In Application.AddIns
If ad.Installed = True Then
i = i + 1
adinst(i) = ad.Name
If ad.Name = "analys32.xll" Then adinst(i) = "funcres.xla"
End If
Next
ReDim Preserve adinst(1 To i)
On Error GoTo errh
For i = 1 To UBound(adinst)
Set w = Workbooks(adinst(i))
Next
ReadyForUpdate = True
Exit Function
errh:
End Function

Cordialement,

Manu/
"JohnFuss" a écrit dans le message de news:
46e82f6a$0$19505$
Bonjour à tous,

j'ai développer une macro de mise à jour de ..... macros, le principe est
simple si une versio supérieure est dispo sur le réseau d'entreprise la
macro locale est grasso-modo remplacée par la nouvelle version.

Je précise que la plupart des utilisateurs utilisent les macros xla
déconnectés du réseau (itinérant).

Je voudrai qu'à l'ouverture d'Excel et une fois toutes les xla chargées
lancer ma fonction de mise à jour car pour mettre à jour les xla je dois
les désinstaller et ça ne prend effet qu'après leur chargement complet.

Je n'arrive pas à éxécuter ma fonction au bon moment. Avez-vous des
suggestions ?

Merci d'avance.

JohnFuss



Avatar
JohnFuss
Bonjour Emmanuel,

Je vais tester ça, merci beaucoup je tiens au courant.

John.

"tissot.emmanuel" a écrit dans le message de news:

Bonsoir,

Ci-dessous un code à placer dans le module ThisWorkbook d'une macro
complémentaire qui doit bien évidemment etre installée.
A chaque ouverture d'une macro complémentaire elle verifie si toutes les
macros complémentaires installées sont ouvertes.
Si oui on lance la macro de mise à jour, sinon on ne fait rien.

Pour ce qui concerne l'utilitaire d'analyse un fichier funcres.xla est
ouvert mais c'est un fichier analys32.xll qui est ajouté a la collection
Addins, ce qui empeche sa détection. J'ai inclus le cas particulier mais
un probleme similaire pourrait survenir avec toute autre macro xll.

La procédure Update est lancé avant l'ouverture d'un quelconque classeur
.xls.

Testé avec xl2003.

Dim WithEvents xlapp As Application

Private Sub Workbook_Open()
Set xlapp = Application
If ReadyForUpdate Then Update
End Sub

Private Sub xlapp_WorkbookOpen(ByVal Wb As Workbook)
If ReadyForUpdate Then Update
End Sub

Private Sub Update()
MsgBox "Tous les fichiers xla sont ouverts. Mise à jour. " &
Workbooks.Count
Set xlapp = Nothing
End Sub

Function ReadyForUpdate() As Boolean
Dim ad As AddIn, adinst() As String, i As Integer, w As Workbook
ReDim adinst(1 To Application.AddIns.Count)
For Each ad In Application.AddIns
If ad.Installed = True Then
i = i + 1
adinst(i) = ad.Name
If ad.Name = "analys32.xll" Then adinst(i) = "funcres.xla"
End If
Next
ReDim Preserve adinst(1 To i)
On Error GoTo errh
For i = 1 To UBound(adinst)
Set w = Workbooks(adinst(i))
Next
ReadyForUpdate = True
Exit Function
errh:
End Function

Cordialement,

Manu/
"JohnFuss" a écrit dans le message de news:
46e82f6a$0$19505$
Bonjour à tous,

j'ai développer une macro de mise à jour de ..... macros, le principe est
simple si une versio supérieure est dispo sur le réseau d'entreprise la
macro locale est grasso-modo remplacée par la nouvelle version.

Je précise que la plupart des utilisateurs utilisent les macros xla
déconnectés du réseau (itinérant).

Je voudrai qu'à l'ouverture d'Excel et une fois toutes les xla chargées
lancer ma fonction de mise à jour car pour mettre à jour les xla je dois
les désinstaller et ça ne prend effet qu'après leur chargement complet.

Je n'arrive pas à éxécuter ma fonction au bon moment. Avez-vous des
suggestions ?

Merci d'avance.

JohnFuss







Avatar
JohnFuss
Bonjour,

j'ai donc testé ton code, j'ai uniquement gardé le concept du WithEvents sur
Application qui m'a permis de m'en sortir. Merci à toi Emmanuel.

John.

"JohnFuss" a écrit dans le message de news:
46e98b1a$0$15459$
Bonjour Emmanuel,

Je vais tester ça, merci beaucoup je tiens au courant.

John.

"tissot.emmanuel" a écrit dans le message de
news:
Bonsoir,

Ci-dessous un code à placer dans le module ThisWorkbook d'une macro
complémentaire qui doit bien évidemment etre installée.
A chaque ouverture d'une macro complémentaire elle verifie si toutes les
macros complémentaires installées sont ouvertes.
Si oui on lance la macro de mise à jour, sinon on ne fait rien.

Pour ce qui concerne l'utilitaire d'analyse un fichier funcres.xla est
ouvert mais c'est un fichier analys32.xll qui est ajouté a la collection
Addins, ce qui empeche sa détection. J'ai inclus le cas particulier mais
un probleme similaire pourrait survenir avec toute autre macro xll.

La procédure Update est lancé avant l'ouverture d'un quelconque classeur
.xls.

Testé avec xl2003.

Dim WithEvents xlapp As Application

Private Sub Workbook_Open()
Set xlapp = Application
If ReadyForUpdate Then Update
End Sub

Private Sub xlapp_WorkbookOpen(ByVal Wb As Workbook)
If ReadyForUpdate Then Update
End Sub

Private Sub Update()
MsgBox "Tous les fichiers xla sont ouverts. Mise à jour. " &
Workbooks.Count
Set xlapp = Nothing
End Sub

Function ReadyForUpdate() As Boolean
Dim ad As AddIn, adinst() As String, i As Integer, w As Workbook
ReDim adinst(1 To Application.AddIns.Count)
For Each ad In Application.AddIns
If ad.Installed = True Then
i = i + 1
adinst(i) = ad.Name
If ad.Name = "analys32.xll" Then adinst(i) = "funcres.xla"
End If
Next
ReDim Preserve adinst(1 To i)
On Error GoTo errh
For i = 1 To UBound(adinst)
Set w = Workbooks(adinst(i))
Next
ReadyForUpdate = True
Exit Function
errh:
End Function

Cordialement,

Manu/
"JohnFuss" a écrit dans le message de news:
46e82f6a$0$19505$
Bonjour à tous,

j'ai développer une macro de mise à jour de ..... macros, le principe
est simple si une versio supérieure est dispo sur le réseau d'entreprise
la macro locale est grasso-modo remplacée par la nouvelle version.

Je précise que la plupart des utilisateurs utilisent les macros xla
déconnectés du réseau (itinérant).

Je voudrai qu'à l'ouverture d'Excel et une fois toutes les xla chargées
lancer ma fonction de mise à jour car pour mettre à jour les xla je dois
les désinstaller et ça ne prend effet qu'après leur chargement complet.

Je n'arrive pas à éxécuter ma fonction au bon moment. Avez-vous des
suggestions ?

Merci d'avance.

JohnFuss











Avatar
tissot.emmanuel
Bonsoir,

Merci du retour, tu nous fais connaitre ta solution?

Cordialement,

Manu/

"JohnFuss" a écrit dans le message de news:
46eeb469$0$31608$
Bonjour,

j'ai donc testé ton code, j'ai uniquement gardé le concept du WithEvents
sur Application qui m'a permis de m'en sortir. Merci à toi Emmanuel.

John.

"JohnFuss" a écrit dans le message de news:
46e98b1a$0$15459$
Bonjour Emmanuel,

Je vais tester ça, merci beaucoup je tiens au courant.

John.

"tissot.emmanuel" a écrit dans le message de
news:
Bonsoir,

Ci-dessous un code à placer dans le module ThisWorkbook d'une macro
complémentaire qui doit bien évidemment etre installée.
A chaque ouverture d'une macro complémentaire elle verifie si toutes les
macros complémentaires installées sont ouvertes.
Si oui on lance la macro de mise à jour, sinon on ne fait rien.

Pour ce qui concerne l'utilitaire d'analyse un fichier funcres.xla est
ouvert mais c'est un fichier analys32.xll qui est ajouté a la collection
Addins, ce qui empeche sa détection. J'ai inclus le cas particulier mais
un probleme similaire pourrait survenir avec toute autre macro xll.

La procédure Update est lancé avant l'ouverture d'un quelconque classeur
.xls.

Testé avec xl2003.

Dim WithEvents xlapp As Application

Private Sub Workbook_Open()
Set xlapp = Application
If ReadyForUpdate Then Update
End Sub

Private Sub xlapp_WorkbookOpen(ByVal Wb As Workbook)
If ReadyForUpdate Then Update
End Sub

Private Sub Update()
MsgBox "Tous les fichiers xla sont ouverts. Mise à jour. " &
Workbooks.Count
Set xlapp = Nothing
End Sub

Function ReadyForUpdate() As Boolean
Dim ad As AddIn, adinst() As String, i As Integer, w As Workbook
ReDim adinst(1 To Application.AddIns.Count)
For Each ad In Application.AddIns
If ad.Installed = True Then
i = i + 1
adinst(i) = ad.Name
If ad.Name = "analys32.xll" Then adinst(i) = "funcres.xla"
End If
Next
ReDim Preserve adinst(1 To i)
On Error GoTo errh
For i = 1 To UBound(adinst)
Set w = Workbooks(adinst(i))
Next
ReadyForUpdate = True
Exit Function
errh:
End Function

Cordialement,

Manu/
"JohnFuss" a écrit dans le message de news:
46e82f6a$0$19505$
Bonjour à tous,

j'ai développer une macro de mise à jour de ..... macros, le principe
est simple si une versio supérieure est dispo sur le réseau
d'entreprise la macro locale est grasso-modo remplacée par la nouvelle
version.

Je précise que la plupart des utilisateurs utilisent les macros xla
déconnectés du réseau (itinérant).

Je voudrai qu'à l'ouverture d'Excel et une fois toutes les xla chargées
lancer ma fonction de mise à jour car pour mettre à jour les xla je
dois les désinstaller et ça ne prend effet qu'après leur chargement
complet.

Je n'arrive pas à éxécuter ma fonction au bon moment. Avez-vous des
suggestions ?

Merci d'avance.

JohnFuss















Avatar
JohnFuss
Bonjour,

pusique ça t'interesse voici ce que j'ai mis en place :

J'install une macro Principale.xla qui contient dans une worksheet du code
VBA que j'exporte dans un nouveau classeur, j'ai ajouté dans cette même
feuille une liste d'Enum, Const, Declare (dll), Sub et Function que je prend
tel quel de Principale.xla pour les ajouter dans un deuxième module de ce
nouveau classeur qui devient comlètement autonome. Je l'enregistre en xla et
l'install comme macro complémentaire.

Dans ThisWorkbok_Open j'initiale le xlApp =Application (déclaré en
WithEvents) et sur xlApp_NewWorkbook et _OpenWorkook je lance ma fonction de
mise à jour qui désinstall toutes les xla installé puis la Principale.xla
(qui est référencée dans toute les autres macros), je vais chercher les
mises à jour sur le réseau si dispo suivant pas mal de paramètres (num
version, si l'auteur est bien l'utilisateur connecté à Windows (on est
plusieurs développeurs), liste des feuilles à mettre à jour ou non, etc.).

ça fait un peu usine à gaz mais le service technique de ma boite peut
installer la Principale.xla qui va piloter l'installation, mise à jour,
import de profil, etc. toute seule.

Voilà, merci à toi ça fait 3 ans que cette macro de mise à jour était
développée, il ne manquait que ton post :-).

Merci encore.

JohnFuss.

"tissot.emmanuel" a écrit dans le message de news:
%23DsMOTZ%
Bonsoir,

Merci du retour, tu nous fais connaitre ta solution?

Cordialement,

Manu/

"JohnFuss" a écrit dans le message de news:
46eeb469$0$31608$
Bonjour,

j'ai donc testé ton code, j'ai uniquement gardé le concept du WithEvents
sur Application qui m'a permis de m'en sortir. Merci à toi Emmanuel.

John.

"JohnFuss" a écrit dans le message de news:
46e98b1a$0$15459$
Bonjour Emmanuel,

Je vais tester ça, merci beaucoup je tiens au courant.

John.

"tissot.emmanuel" a écrit dans le message de
news:
Bonsoir,

Ci-dessous un code à placer dans le module ThisWorkbook d'une macro
complémentaire qui doit bien évidemment etre installée.
A chaque ouverture d'une macro complémentaire elle verifie si toutes
les macros complémentaires installées sont ouvertes.
Si oui on lance la macro de mise à jour, sinon on ne fait rien.

Pour ce qui concerne l'utilitaire d'analyse un fichier funcres.xla est
ouvert mais c'est un fichier analys32.xll qui est ajouté a la
collection Addins, ce qui empeche sa détection. J'ai inclus le cas
particulier mais un probleme similaire pourrait survenir avec toute
autre macro xll.

La procédure Update est lancé avant l'ouverture d'un quelconque
classeur .xls.

Testé avec xl2003.

Dim WithEvents xlapp As Application

Private Sub Workbook_Open()
Set xlapp = Application
If ReadyForUpdate Then Update
End Sub

Private Sub xlapp_WorkbookOpen(ByVal Wb As Workbook)
If ReadyForUpdate Then Update
End Sub

Private Sub Update()
MsgBox "Tous les fichiers xla sont ouverts. Mise à jour. " &
Workbooks.Count
Set xlapp = Nothing
End Sub

Function ReadyForUpdate() As Boolean
Dim ad As AddIn, adinst() As String, i As Integer, w As Workbook
ReDim adinst(1 To Application.AddIns.Count)
For Each ad In Application.AddIns
If ad.Installed = True Then
i = i + 1
adinst(i) = ad.Name
If ad.Name = "analys32.xll" Then adinst(i) = "funcres.xla"
End If
Next
ReDim Preserve adinst(1 To i)
On Error GoTo errh
For i = 1 To UBound(adinst)
Set w = Workbooks(adinst(i))
Next
ReadyForUpdate = True
Exit Function
errh:
End Function

Cordialement,

Manu/
"JohnFuss" a écrit dans le message de news:
46e82f6a$0$19505$
Bonjour à tous,

j'ai développer une macro de mise à jour de ..... macros, le principe
est simple si une versio supérieure est dispo sur le réseau
d'entreprise la macro locale est grasso-modo remplacée par la nouvelle
version.

Je précise que la plupart des utilisateurs utilisent les macros xla
déconnectés du réseau (itinérant).

Je voudrai qu'à l'ouverture d'Excel et une fois toutes les xla
chargées lancer ma fonction de mise à jour car pour mettre à jour les
xla je dois les désinstaller et ça ne prend effet qu'après leur
chargement complet.

Je n'arrive pas à éxécuter ma fonction au bon moment. Avez-vous des
suggestions ?

Merci d'avance.

JohnFuss



















Avatar
tissot.emmanuel
Bonsoir,

ça fait un peu usine à gaz


En effet..

mais le service technique de ma boite peut installer la Principale.xla qui
va piloter l'installation, mise à jour, import de profil, etc. toute
seule.


Si le but est atteint, c'est bien la l'essentiel.

A+

Manu/

"JohnFuss" a écrit dans le message de news:
46f15fdc$0$4469$
Bonjour,

pusique ça t'interesse voici ce que j'ai mis en place :

J'install une macro Principale.xla qui contient dans une worksheet du code
VBA que j'exporte dans un nouveau classeur, j'ai ajouté dans cette même
feuille une liste d'Enum, Const, Declare (dll), Sub et Function que je
prend tel quel de Principale.xla pour les ajouter dans un deuxième module
de ce nouveau classeur qui devient comlètement autonome. Je l'enregistre
en xla et l'install comme macro complémentaire.

Dans ThisWorkbok_Open j'initiale le xlApp =Application (déclaré en
WithEvents) et sur xlApp_NewWorkbook et _OpenWorkook je lance ma fonction
de mise à jour qui désinstall toutes les xla installé puis la
Principale.xla (qui est référencée dans toute les autres macros), je vais
chercher les mises à jour sur le réseau si dispo suivant pas mal de
paramètres (num version, si l'auteur est bien l'utilisateur connecté à
Windows (on est plusieurs développeurs), liste des feuilles à mettre à
jour ou non, etc.).

ça fait un peu usine à gaz mais le service technique de ma boite peut
installer la Principale.xla qui va piloter l'installation, mise à jour,
import de profil, etc. toute seule.

Voilà, merci à toi ça fait 3 ans que cette macro de mise à jour était
développée, il ne manquait que ton post :-).

Merci encore.

JohnFuss.

"tissot.emmanuel" a écrit dans le message de
news: %23DsMOTZ%
Bonsoir,

Merci du retour, tu nous fais connaitre ta solution?

Cordialement,

Manu/

"JohnFuss" a écrit dans le message de news:
46eeb469$0$31608$
Bonjour,

j'ai donc testé ton code, j'ai uniquement gardé le concept du WithEvents
sur Application qui m'a permis de m'en sortir. Merci à toi Emmanuel.

John.

"JohnFuss" a écrit dans le message de news:
46e98b1a$0$15459$
Bonjour Emmanuel,

Je vais tester ça, merci beaucoup je tiens au courant.

John.

"tissot.emmanuel" a écrit dans le message de
news:
Bonsoir,

Ci-dessous un code à placer dans le module ThisWorkbook d'une macro
complémentaire qui doit bien évidemment etre installée.
A chaque ouverture d'une macro complémentaire elle verifie si toutes
les macros complémentaires installées sont ouvertes.
Si oui on lance la macro de mise à jour, sinon on ne fait rien.

Pour ce qui concerne l'utilitaire d'analyse un fichier funcres.xla est
ouvert mais c'est un fichier analys32.xll qui est ajouté a la
collection Addins, ce qui empeche sa détection. J'ai inclus le cas
particulier mais un probleme similaire pourrait survenir avec toute
autre macro xll.

La procédure Update est lancé avant l'ouverture d'un quelconque
classeur .xls.

Testé avec xl2003.

Dim WithEvents xlapp As Application

Private Sub Workbook_Open()
Set xlapp = Application
If ReadyForUpdate Then Update
End Sub

Private Sub xlapp_WorkbookOpen(ByVal Wb As Workbook)
If ReadyForUpdate Then Update
End Sub

Private Sub Update()
MsgBox "Tous les fichiers xla sont ouverts. Mise à jour. " &
Workbooks.Count
Set xlapp = Nothing
End Sub

Function ReadyForUpdate() As Boolean
Dim ad As AddIn, adinst() As String, i As Integer, w As Workbook
ReDim adinst(1 To Application.AddIns.Count)
For Each ad In Application.AddIns
If ad.Installed = True Then
i = i + 1
adinst(i) = ad.Name
If ad.Name = "analys32.xll" Then adinst(i) = "funcres.xla"
End If
Next
ReDim Preserve adinst(1 To i)
On Error GoTo errh
For i = 1 To UBound(adinst)
Set w = Workbooks(adinst(i))
Next
ReadyForUpdate = True
Exit Function
errh:
End Function

Cordialement,

Manu/
"JohnFuss" a écrit dans le message de news:
46e82f6a$0$19505$
Bonjour à tous,

j'ai développer une macro de mise à jour de ..... macros, le principe
est simple si une versio supérieure est dispo sur le réseau
d'entreprise la macro locale est grasso-modo remplacée par la
nouvelle version.

Je précise que la plupart des utilisateurs utilisent les macros xla
déconnectés du réseau (itinérant).

Je voudrai qu'à l'ouverture d'Excel et une fois toutes les xla
chargées lancer ma fonction de mise à jour car pour mettre à jour les
xla je dois les désinstaller et ça ne prend effet qu'après leur
chargement complet.

Je n'arrive pas à éxécuter ma fonction au bon moment. Avez-vous des
suggestions ?

Merci d'avance.

JohnFuss