VBA Excel: Contrôle de l'activation des macros ?

Zorgloub

XLDnaute Junior
Bonjour à tous,

Comme beaucoup d'entre nous, mes fichiers Excel comprennent diverses macros écrites en VBA.

Je voudrais vérifier, au démarrage de mon fichier excel que le niveau de sécurité du PC utilisé, autorise bien l'activation des macros.

- Si le système autorise bien les macros ---> rien de spécial, le fichier s'ouvre normalement
- Sinon
Message: "Les macros ne sont pas actives, je vous invite à revoir le niveau de sécurité. Je vais fermer votre fichier !" et fermeture du fichier en sortie de ce message.


En fait, il s'agit d'écrire ici un petit code VBA et le placer dans mon fichier, une macro donc !
Mais si les macros ne sont pas activées ... ce code ne serait jamais exécuté !??
Sauf peut-être si on le place dans la partie "ThisWorkbook" ???

Merci pour votre aide.

Zorgloub.
 

pedrag31

XLDnaute Occasionnel
Re : VBA Excel: Contrôle de l'activation des macros ?

Bonjour Zorgloub, bonjour le forum,

Le code pour qu'une macro se lance des l'ouverture :

Code:
Private Sub Workbook_Open()
    'Code....
End Sub

Mais se code ne s'executera si et seulement si le niveau de securite est inferieur a "Eleve" (ie "Moyen" ou "Faible").

Pour recuperer le niveau de securite en VBA :
Code:
Msgbox Application.AutomationSecurity
[I][COLOR="Red"]non teste[/COLOR][/I]

Pour configurer le code a niveau faible:
Code:
Application.AutomationSecurity = msoAutomationSecurityLow
[I][COLOR="Red"]non teste[/COLOR][/I]

Bonne journee, :)
 
Dernière édition:

skoobi

XLDnaute Barbatruc
Re : VBA Excel: Contrôle de l'activation des macros ?

Bonjour Zorgloub,
Mais si les macros ne sont pas activées ... ce code ne serait jamais exécuté !??
Tu as trouvé tout seul...
Sauf peut-être si on le place dans la partie "ThisWorkbook" ???
Non, la sécurité des macros annule toute execution de macro, d'où qu'elle vienne, sinon ce ne serait pas une sécurité...
 

mromain

XLDnaute Barbatruc
Re : VBA Excel: Contrôle de l'activation des macros ?

bonjour Zorgloub,

une solution possible serait de créer une feuille affichant le message "Vous devez activer les macros".
Puis :
> à la fermeture du classeur, tu caches toutes les feuilles sauf celle-là
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Sheets("FeuilleActivationDesMacros").Visible = xlSheetVisible
Dim curSheet As Worksheet
For Each curSheet In ThisWorkbook.Sheets
    If curSheet.Name <> "FeuilleActivationDesMacros" Then curSheet.Visible = xlSheetVeryHidden
Next curSheet
ThisWorkbook.Save
End Sub
> à l'ouverture, tu cache cette feuille et affiche les autres
Code:
Private Sub Workbook_Open()
Dim curSheet As Worksheet
For Each curSheet In ThisWorkbook.Sheets
    If curSheet.Name <> "FeuilleActivationDesMacros" Then curSheet.Visible = xlSheetVisible
Next curSheet
ThisWorkbook.Sheets("FeuilleActivationDesMacros").Visible = xlSheetVeryHidden
End Sub
si les macros ne sont pas activées, la seule feuille affichée du classeur sera celle contenant le message "Vous devez activer les macros".

edit: bonjour pedrag31 et skoobi
a+
 

Pièces jointes

  • XLD.xls
    31.5 KB · Affichages: 552
  • XLD.xls
    31.5 KB · Affichages: 582
  • XLD.xls
    31.5 KB · Affichages: 616

coco_lapin

XLDnaute Impliqué
Re : VBA Excel: Contrôle de l'activation des macros ?

Bonjour le forum,

Pour ma part j'utilise la solution proposée par mromain.
En fait cette solution rend le classeur inutilisable par l'utilisateur , le force à refermer le classeur puis à l'ouvrir à nouveau en activant les macros.

Bonne soirée.
 

Didou28

XLDnaute Nouveau
Re : VBA Excel: Contrôle de l'activation des macros ?

bonjour Zorgloub,

une solution possible serait de créer une feuille affichant le message "Vous devez activer les macros".
Puis :
> à la fermeture du classeur, tu caches toutes les feuilles sauf celle-là
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Sheets("FeuilleActivationDesMacros").Visible = xlSheetVisible
Dim curSheet As Worksheet
For Each curSheet In ThisWorkbook.Sheets
    If curSheet.Name <> "FeuilleActivationDesMacros" Then curSheet.Visible = xlSheetVeryHidden
Next curSheet
ThisWorkbook.Save
End Sub
> à l'ouverture, tu cache cette feuille et affiche les autres
Code:
Private Sub Workbook_Open()
Dim curSheet As Worksheet
For Each curSheet In ThisWorkbook.Sheets
    If curSheet.Name <> "FeuilleActivationDesMacros" Then curSheet.Visible = xlSheetVisible
Next curSheet
ThisWorkbook.Sheets("FeuilleActivationDesMacros").Visible = xlSheetVeryHidden
End Sub
si les macros ne sont pas activées, la seule feuille affichée du classeur sera celle contenant le message "Vous devez activer les macros".

edit: bonjour pedrag31 et skoobi
a+
Je te remercie beaucoup
 

tapuari

XLDnaute Nouveau
Merci mromain,

Votre solution fonctionne parfaitement. Avec n'importe quelle version de Excel.

Merci

Bonjour à tous,

Cela ne fonctionne pas si on fait successivement plusieurs enregistrer sous, seul le dernier fichier sera fermé (donc seule le dernier fichier aura les feuilles de maquées)
,
Tout les autres classeurs qui ont été enregistré précedemment via le saveas, se retrouveront avec les feuilles visibles. Donc saissisable si VBA non activé.

Il faut pour cela sur l'évènement before save : masquer les feuilles et afficher la feuille FeuilleActivationDesMacros,
Le saveas s'effectue,
Il faut enfin dans l'évènement after save : masquer la feuille FeuilleActivationDesMacros et afficher les autres.

Ce qui fait que pour chaque classeur, il sera dans l'état du dernier enregistrement (feuille FeuilleActivationDesMacros affichée et les autres masquées).

Bonne journée à tous.
 

oguruma

XLDnaute Occasionnel
Re : VBA Excel: Contrôle de l'activation des macros ?

Bonjour Zorgloub, bonjour le forum,

Le code pour qu'une macro se lance des l'ouverture :

Code:
Private Sub Workbook_Open()
    'Code....
End Sub

Mais se code ne s'executera si et seulement si le niveau de securite est inferieur a "Eleve" (ie "Moyen" ou "Faible").

Pour recuperer le niveau de securite en VBA :
Code:
Msgbox Application.AutomationSecurity
[I][COLOR="Red"]non teste[/COLOR][/I]

Pour configurer le code a niveau faible:
Code:
Application.AutomationSecurity = msoAutomationSecurityLow
[I][COLOR="Red"]non teste[/COLOR][/I]

Bonne journee, :)
C'est un peu Sioucccs mais il faut passer par la registry de Windows... exemple activation du mode projet VBA....
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 145
Membres
112 669
dernier inscrit
Guigui2502