Détecter si une macro complémentaire est active;ATPVBAEN.XLA

Staple1600

XLDnaute Barbatruc
Bonjour

Comment faire pour détecter sur un poste si une macro-complémentaire
est installée?


Si je lance cette macro sur un poste dont je ne sais rien
il y aura surement un message d'erreur si l'utilitaire d'analyse n'est pas actif
Sub Macro1()
Application.Run "ATPVBAEN.XLA!Random", ActiveSheet.Range("$A$1"), 1, 10000 _
, 1, 0, 0, 1
End Sub

Peut-on en VBA détecter à l'ouverture des classeurs
les macros complémentaires installées et s'il manque celle dont le code
a besoin, la rendre active?

Merci de vos réponses

Bon week-end prolongé à tous


PS: j'ai chercher sur le forum
j'ai trouvé cela
SOURCE:https://www.excel-downloads.com/threads/ajouter-une-macro-complementaire-a-louverture.58510/
'auteur: Hervé
Dim utilitaire As Boolean
PrivateSub Workbook_Open()
utilitaire = Application.AddIns('Utilitaire d'Analyse').Installed
Application.AddIns('Utilitaire d'Analyse').Installed = True
End Sub
PrivateSub Workbook_BeforeClose(Cancel As Boolean)
Application.AddIns('Utilitaire d'Analyse').Installed = utilitaire
End Sub

Mais si la macro n'a pas été installé lors de l'installation d'Excel?
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Détecter si une macro complémentaire est active;ATPVBAEN.XLA

Re

Catrice cette macro complémentaire c'est celle incluse dans Excel

L'utilitaire d'analyse

sur le poste ou je suis aujourd'hui elle se nomme ATPVBAEN.XLA

Pourtant c'est un Excel francais

Il existe une macro ATPVBAFR.XLA ?


Dans les installations personnalisées d'Office on peut n'installer aucune macro complémentaire.


Dans ce cas comment faire?

Prévenir l'utilisateur qu'il doit l'installer?

On a le droit de diffuser une macro complémentaire Microsoft?
 

wilfried_42

XLDnaute Barbatruc
Re : Détecter si une macro complémentaire est active;ATPVBAEN.XLA

Bonjour à tous.

Rendre une macro complementaire active si elle ne l'est pas, je ne sais pas s c'est possible. Par contre savoir si cette macro n'st pas installée et prevenir l'utilisateur. Ca c'est possible

Comme tu l'as dit toi meme, lancer une macro qui n'est pas installée provoque une erreur. donc il faut traiter et contrler l'erreur

Exemple : 5 macros à tester
sub test_macro()
on error goto macrononinstallée
macro = 1 : application.run "Macro1"
Macro = 2 : application.run "Macro2"
Macro = 3 : application.run "Macro3"
Macro = 4 : application.run "Macro4"
Macro = 5 : application.run "Macro5"
' tout est ok
exit sub
macrononinstallée:
select case macro
case 1 : msgbox "Macro 1 non installée faites le necessaire "
case 2 : msgbox "Macro 2 non installée faites le necessaire "
case 3 : msgbox "Macro 3 non installée faites le necessaire "
case 4 : msgbox "Macro 4 non installée faites le necessaire "
case 5 : msgbox "Macro 5 non installée faites le necessaire "
end select
resume next
end sub
 

jeanpierre

Nous a quitté
Repose en paix
Re : Détecter si une macro complémentaire est active;ATPVBAEN.XLA

Saaalut à tous,

Là, je ne comprend rien....

Catrice cette macro complémentaire c'est celle incluse dans Excel

L'utilitaire d'analyse

sur le poste ou je suis aujourd'hui elle se nomme ATPVBAEN.XLA

"Pourtant c'est un Excel francais

Il existe une macro ATPVBAFR.XLA ?

Dans les installations personnalisées d'Office on peut n'installer aucune macro complémentaire.

Dans ce cas comment faire?

Prévenir l'utilisateur qu'il doit l'installer?

On a le droit de diffuser une macro complémentaire Microsoft
?"

Là, oui, si tu as les droits et la licence....


A te lire avec quelques explications supplémentaires... sinon, c'est vraiment le brouillard...


Bonnes Pâques, week-end eet tout....

Jean-Pierre
 

wilfried_42

XLDnaute Barbatruc
Re : Détecter si une macro complémentaire est active;ATPVBAEN.XLA

re: bonjour à tous

finalement, l'enregistreur de macro est franchement une mine d'or

test_macro()
on error goto macrononinstallée
macro = 1 : application.run "Macro1"
Macro = 2 : application.run "Macro2"
Macro = 3 : application.run "Macro3"
Macro = 4 : application.run "Macro4"
Macro = 5 : application.run "Macro5"
' tout est ok
exit sub
macrononinstallée:
select case macro
case 1 : AddIns("Macro1").Installed = True
case 2 : AddIns("Macro2").Installed = True
case 3 : AddIns("Macro3").Installed = True
case 4 : AddIns("Macro4").Installed = True
case 5 : AddIns("Macro5").Installed = True
end select
resume next
end sub
 

Bebere

XLDnaute Barbatruc
Re : Détecter si une macro complémentaire est active;ATPVBAEN.XLA

bonjour le fil
Stapple ce qui suit te viendra peutêtre en aide

'Ouvre et installe une macro complémentaire dans une
'instance d'Excel créée par Automation puis lance une
'procédure de la macro complémentaire

'à partir d'un code posté par Peter O'Reilly, mpep

Sub LanceProcDansXla()
Set objXL = New Excel.Application
With objXL
.Workbooks.Open strFile ' strFile = nom et chemin du fichier .xla
.Run "MyAddin.xla!MaProc" ' éventuellement avec paramètres
End With
End Sub

'tester si une macro complémentaire est ouverte
'(suppose qu'on en connaisse le nom)
'fs, d'après Jim Rech
Function AddinOpened()
Dim FN As String

On Error Resume Next
FN = Workbooks("MyAddin.xla").Name
AddinOpened = Err = 0

End Function

'code original de Jim Rech
Sub a()
'Jim Rech, mpep
Dim FN As String
On Error Resume Next
FN = Workbooks("MyAddin.xla").Name
MsgBox IIf(FN = "", "Not open", "Open")
End Sub

Public tabAddins()

Sub Addins_Installed()
Dim i%, XLA As AddIn
i = 0
For Each XLA In AddIns
If XLA.Installed Then
ReDim Preserve tabAddins(i)
tabAddins(i) = XLA.Title
i = i + 1
End If
Next XLA
End Sub

Sub MacrosXla(OnOff As Boolean)
Dim i%
For i = 0 To UBound(tabAddins)
AddIns(tabAddins(i)).Installed = OnOff
Next
End Sub

Sub testMacros()
MacrosXla True
End Sub
bonjour le fil
Stapple ce qui suit te viendra peutêtre en aide,
Sub XlaProperties()
Workbooks.Add
With ActiveSheet
.Rows(1).Font.Bold = True
.Range("A1:D1").Value = _
Array("Name", "Full Name", "Title", "Installed")
For i = 1 To AddIns.Count
.Cells(i + 1, 1) = AddIns(i).Name
.Cells(i + 1, 2) = AddIns(i).FullName
.Cells(i + 1, 3) = AddIns(i).Title
.Cells(i + 1, 4) = AddIns(i).Installed
Next
.Range("A1").CurrentRegion.Columns.AutoFit
End With
End Sub

à bientôt
 

Catrice

XLDnaute Barbatruc
Re : Détecter si une macro complémentaire est active;ATPVBAEN.XLA

Re,

Je vais etre plus clair en ce qui concerne la solution que je propose.

De ce que dit Staple1600, je comprends qu'il a développé un fichier qui utilise l'utilitaire d'analyse.
Et que sur certaines machine, soit l'utilitaire n'est pas activé soit il n'est pas installé (dans ce cas il est sur le CD d'installation de l'utilisateur).

Staple a à priori trouvé comment activer l'utilitaire d'analyse s'il ne l'est pas. Reste le cas où il n'est pas installé.

Ce que je propose, c'est de joindre le ATPVBAFR.XLA ou ATPVBAEN.XLA, il y en a 2 sur ma machine, je n'ai pas regardé celui qui est utilisé.
C'est à dire d'ouvir la XLA (qu'il fournit avec son fichier) à l'ouverture de son fichier et que les calculs utilisent cette XLA.

Avantage : plus de question à se poser quant à l'état du poste à l'arrivée.

En terme de Licence : A priori pas de pb puisque les postes d'arrivées ont des Excel qui possèdent un l'utilitaire d'analyse (mais qui n'est pas installé).

C'est à tester et à optimiser mais c'est la solution à laquelle je faisait allusion.
 
Dernière édition:

MichelXld

XLDnaute Barbatruc
Re : Détecter si une macro complémentaire est active;ATPVBAEN.XLA

bonjour

En complément de la solution de Catrice (qui me semble la mieux adaptée à la question initiale), une procédure pour vérifier si atpvbaen.xla est installée sur le PC.

Code:
Dim Fichier As String
 
Fichier = Application.LibraryPath & "\analyse\atpvbaen.xla"
 
If Dir(Fichier) = "" Then
    MsgBox "N'existe pas"
    Else
    MsgBox "Existe"
End If


Bon après midi
MichelXld
 
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : Détecter si une macro complémentaire est active;ATPVBAEN.XLA

Re,

Je viens de faire le test suivant :

Créé un petit fichier Test.xls qui utilise une fonction ATP

Copier les XLA et XLL du dossier C:\Program Files\Microsoft Office\Office10\Macrolib\Analyse dans un dossier perso

Désinstaller l'utilitaire d'analyse dans le panneau de config.

Ouvrir mon fichier Test.xls, là il "panique" un peu car il ne trouve pas les XLA et XLL.

Je recommence en lançant d'abord la ATPVBAEN.XLA
A l'ouverture de Test.xls il me demande de mettre à jour les liaisons, ce qye je fais et c'est Ok.

Par macro :

AddIns.Add Filename:= "C:\chemin\ATPVBAEN.XLA" AddIns("Utilitaire d'analyse - VBA").Installed = True
Permet de registrer le nouvel emplacement de la XLA

Mais il faut mettre à jour les liasons du fichier avec un :
ActiveWorkbook.ChangeLink Name:= "C:\chemin\ATPVBAEN.XLA", NewName:= "ATPVBAEN.XLA", Type:=xlExcelLinks
Donc, là il faut gérer les messages


De plus, il faut que la ANALYS32.XLL soit dans le meme dossier que la XLA


Je viens d'executer avec succes le code suivant.
A partir d'un fichier "maitre" qui ouvre le classeur1.xls contenant des formules ATP :

Sub Test()

AddIns.Add Filename:="C:\Chemin\ATPVBAEN.XLA" AddIns("Utilitaire d'analyse - VBA").Installed = True

Workbooks.Open Filename:="C:\Chemin\Classeur1.xls", UpdateLinks:=0 'Ici on ouvre le fichier sans mise à jour de liaison pour ne pas avoir de message

ActiveWorkbook.ChangeLink Name:="C:\Chemin\ATPVBAEN.XLA", NewName:="ATPVBAEN.XLA", Type:=xlExcelLinks

End Sub
 

Catrice

XLDnaute Barbatruc
Re : Détecter si une macro complémentaire est active;ATPVBAEN.XLA

Re,

Une autre solution :

Dans un dossier mettre le fichier et les XLA, XLL

Dans le fichier qui utilise l'ATP mettre le code suivant en Workbook_Open :

Private Sub Workbook_Open()
Workbooks.Open(Filename:=ActiveWorkbook.Path & "\ATPVBAEN.XLA").RunAutoMacros Which:=xlAutoOpen
ActiveWorkbook.ChangeLink Name:="ATPVBAEN.XLA", NewName:=ActiveWorkbook.Path & "\ATPVBAEN.XLA", Type:=xlExcelLinks
End Sub

Le fait d'ouvrir le fichier ATPVBAEN.XLA plutot que de le registrer comme macro complementaire est preferable car si on supprime le dossier qui contient le fichier et les XLA, l'utilisateur aura un message d'erreur au lancement d'Excel.

Ou bien, il faut mettre dans un Before_Close une procedure de désactivation de la ATPVBAEN.XLA.
 

Staple1600

XLDnaute Barbatruc
Re : Détecter si une macro complémentaire est active;ATPVBAEN.XLA

Bonsoir

Merci à tous pour vos conseils et solutions.

Je vais étudier tout cela à tete reposée.


Il me reste une question en suspens
si j'envoie mon fichier par mail a n destinataires
dont je ne connais pas le niveau de compétences sur Excel

cela risque d'etre pas évident à gérer


D'ou ma question, comment faites vous si vous voulez installer
une application réalisée sous Excel (avec utilisation de n macros complémentaires) sur plusieurs postes
en ignorant la configuration du parc informatique et
les différentes versions d'Excel installées?

La solution la plus immédiate que je vois, c'est un déplacement
sur site car je ne pense pas pouvoir gérer tous les cas de figures
possibles en VBA.

En tout cas merci encore de votre réactivité à tous.

Bon week-end chocolaté (ou pas)

PS: le poste sur lequel je suis n'avait pas l'aide VBA d'installée
Le temps de finir le repas de famille
de trouver le cd et de l'installer

J'ai trouvé cela dans l'aide VBA (mes excuses pour ne pas l'avoir installée avant)
Sub DisplayAddIns()
Worksheets("Sheet1").Activate
rw = 1
For Each ad In Application.AddIns
Worksheets("Sheet1").Cells(rw, 1) = ad.Name
Worksheets("Sheet1").Cells(rw, 2) = ad.Installed
rw = rw + 1
Next
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16