Re : [VBA] Workbooks.Open - comment ne pas activer Macro du classeur à ouvrir
Bonsoir,
Code:
Sub OpenBook()
With Application.CommandBars(sCbName).Controls(1)
Application.EnableEvents = False
Workbooks.Open (.Text)
Application.EnableEvents = True
End With
End Sub
Re : [VBA] Workbooks.Open - comment ne pas activer Macro du classeur à ouvrir
Bonjour tirex28, le forum
Merci pour le coup de main
Avec ton code, Workbook_Open n'est pas éxécuté
Mais les macros sont activés (et je n'ai pas le message d'avertissement de sécurité)
et par conséquent s'il y avait une macro inamicale dans
Private Sub Worksheet_Activate()
celle-ci sera exécutée.
Pour mon usage privé, ce n'est pas grave, car je sais ce que contiennent
mes fichiers xls, mais si je diffuse à des tiers cette bo
(qui a pour fonction de lister dans un combo les fichiers xls du répertoire courant), cela pourrait posé problème.
N'est-il pas possible de retrouver (en vba) l'ouverture classique d'Excel
(Niveau de sécurtité moyen) et d'avoir la possibilité d'activer ou désactiver les macros?
L'évenement Worksheet_Activate ne se déclenche pas à l'ouverture d'un fichier, l'évenement Workbook_Activate oui. Les évènements Workbook_Calculate et Worksheet_Calculate peuvent se déclencher à l'ouverture si une feuille contient un fonction volatile (Alea, Aujourdhui..). De toutes facons Application.EnableEvents est efficace pour bloquer tous les évènements de l'application, du classeur et des feuilles.
Sinon une fonction qui détermine si un classeur contient ou non des macros (A executer apres avoir désactivé les évènements et ouvert le classeur en question)
Code:
Function ContientMacros(Wb As Workbook) As Boolean
Dim vbComp As Object
With Wb.VBProject
For Each vbComp In .VBComponents
With vbComp.codemodule
If .CountOfLines - .CountOfDeclarationLines > 0 Then
ContientMacros = True
Exit Function
End If
End With
Next
End With
End Function
Si le classeur contient des macros, tu peux avertir l'utilisateur et éventuellement refermer le classeur.
Re : [VBA] Workbooks.Open - comment ne pas activer Macro du classeur à ouvrir
Bonsoir
Merci pour toutes ces infos
Ce que je voulais dire
C'est qu'en ouvrant un classeur avec OpenBook
je n'ai pas le message de sécurité
Avec tes modifs
Si j'ouvre un classeur avec macros
Workbook_open n'est pas éxécuté
Mais s'il y a des macros (par exemple Worksheet_Activate)
ex: sur la feuille 3 d'un classeur (ouvert par OpenBook)
Private Sub Worksheet_Activate()
MsgBox "test"
End Sub
Je suis sur la feuille 1
Je vais sur la feuille 3 et hop la msgbox s'affiche
(Comme à l'ouverture je n'ai pas le message, je ne sais qu'il y avait des macros)
Et c'est là que le bas blesse
Donc pas de moyen d'avoir le message de sécurité par le biais
de VBA,
Re : [VBA] Workbooks.Open - comment ne pas activer Macro du classeur à ouvrir
Bonsoir Tirex28, Stapple1600,
N'est-il pas possible de retrouver (en vba) l'ouverture classique d'Excel
(Niveau de sécurtité moyen) et d'avoir la possibilité d'activer ou désactiver les macros?
Je crains de ne pas comprendre ton problème. Si ton niveau de sécurité est réglé sur moyen, tu devrais avoir un message d'alerte qui s'affiche à chaque ouverture de fichier avec macro...
Si ton niveau de sécurité est faible, il n'y a pas de message (sauf erreur). Mais il n'est pas possible par macro de modifier le niveau de sécurité. Heureusement!!
Donc pas de moyen d'avoir le message de sécurité par le biais
de VBA,
Re : [VBA] Workbooks.Open - comment ne pas activer Macro du classeur à ouvrir
Bonsoir Spitnolan08
Je vais essayer d'être plus clair
Si j'ouvre un fichier avec macro
par Fichier/Ouvrir (niveau de sécurité moyen)
J'ai le message de sécurité et je peux choisir d'activer ou pas les macros
Si j'ouvre un fichier avec cette macro
Code:
Sub OpenBook()
With Application.CommandBars(sCbName).Controls(1)
Application.EnableEvents = False
Workbooks.Open (.Text)
Application.EnableEvents = True
End With
End Sub
Je n'ai pas le message et je ne peux donc pas activer ou pas les macros
L'ajout sur le conseil de Tirex28 de Application.EnableEvents = False
empèche l'éxécution de macro dans WorkBook_Open
mais active les macros sans informer l'utilisateur
Ma question est donc:
Comment ouvrir un classeur (contenant des macros) avec l'instruction Workbooks.Open de la même manière qu'avec Fichier/Ouvrir
afin d'avoir le message de sécurité et de pouvoir activer ou non les marcos
du classeur à ouvrir?
En incluant la fonction ContientMacros, je saiss'il y a des macros
(ce qui est déjà trés bien)
Code:
Sub OpenBook()
With Application.CommandBars(sCbName).Controls(1)
Application.EnableEvents = False
If ContientMacros(Workbooks.Open(.Text)) Then
MsgBox "Macros inside"
End If
Application.EnableEvents = True
End With
End Sub
Mais les macros sont actives, et je n'ai pas eu le choix
de l'activation ou pas de celles-ci
Merci en tout cas pour votre aide à tous
et bonne fin de soirée
Re : [VBA] Workbooks.Open - comment ne pas activer Macro du classeur à ouvrir
Re,
En fait, je n'avais jamais fait attention qu'en ouvrant un fichier via un code VBA, l'alerte de sécurité n'apparaissait pas. Et comme cela ne m'a jamais posé de problème puisque j'ai toujours (ou presque) géré des fichiers créés par mes applications, cela m'était tout à fait égal...
Cet exemple montre comment capturer le paramétrage de la sécurité automation en cours, changer ce paramétrage pour désactiver des macros, afficher la boîte de dialogue Ouvrir et, après avoir ouvert le document sélectionné, réaffecter le paramétrage d'origine à la sécurité automation.
Code:
Sub Security()
Dim secAutomation As MsoAutomationSecurity
secAutomation = Application.AutomationSecurity
Application.AutomationSecurity = msoAutomationSecurityForceDisable
Application.FileDialog(msoFileDialogOpen).Show
Application.AutomationSecurity = secAutomation
End Sub
A tester...
Pour info : msoAutomationSecurityForceDisable Désactive toutes les macros contenues dans tous les fichiers ouverts par programmation sans afficher d'avertissement de sécurité. msoAutomationSecurityLow Active toutes les macros. Il s'agit de la valeur par défaut lorsque l'application est démarrée.
Re : [VBA] Workbooks.Open - comment ne pas activer Macro du classeur à ouvrir
Re,
Juste pour compléter la proposition et répondre précisément à la question de Stapple1600 pour ceux qui disposent d'une version récente d'Excel...
Code:
Sub Security()
[COLOR=Green]'***Prérequis : La sécurité Macro d'Excel est sur moyen[/COLOR]
Dim secAutomation As MsoAutomationSecurity
Dim Chemin as string, Fich as String
Chemin = "C:\MonChemin\"
Fich = "MonFichier.xls"
[COLOR=Green]'***Pour afficher la boîte de dialogue d'activation des macros[/COLOR]
Application.AutomationSecurity = msoAutomationSecurityByUI
Workbooks.Open Filename:=Chemin & Fich
End Sub
Désolé Stapple, mais je n'ai pas de solution pour toi...
Cordialement