[VBA] Workbooks.Open - comment ne pas activer Macro du classeur à ouvrir

Staple1600

XLDnaute Barbatruc
Bonne nuit le forum


Une question avant d'aller voir Morphée

Cette macro est lancée à partir d'une bo personnalisée (crée en vba)

Sub OpenBook()
With Application.CommandBars(sCbName).Controls(1)
Workbooks.Open (.Text)
End With
End Sub

Le classeur choisi s'ouvre et s'il contient des macros
je n'ai pas le message d'avertissement et les macros sont éxécutés

(Ce n'est pas trop embetant si le fichier à ouvrir est sur)


Mais est-il possible de faire en sorte que les macros ne soient pas éxécutés?

Dans l'aide VBA il est indiqué que seules les macros Auto_Open ne sont pas
éxécutés , les autres oui.

Merci et bon week-end


Staple
 

tirex28

XLDnaute Occasionnel
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

Cordialement,

Tirex28/
 

Staple1600

XLDnaute Barbatruc
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?


Merci à ceux qui pourront me renseigner.


Staple
 

tirex28

XLDnaute Occasionnel
Re : [VBA] Workbooks.Open - comment ne pas activer Macro du classeur à ouvrir

Bonjour,
et par conséquent s'il y avait une macro inamicale dans
Private Sub Worksheet_Activate()
celle-ci sera exécutée.

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.

Ceci peut t'intéresser:

macro auto open ACH - microsoft.public.fr.excel | Google Groupes

Je n'ai pas réussi à adapter, j'obtiens une erreur "mémoire insuffisante" sur:
Code:
    Application.CommandBars.FindControl(ID:=1605).Execute

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.

Cordialement,

Tirex28/
 

Staple1600

XLDnaute Barbatruc
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,


Merci encore de ton aide

A+

Staple
 

Spitnolan08

XLDnaute Barbatruc
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,
Tirex28 t'a fourni un moyen. Il suffit de lui adjoindre une msgbox d'alerte si ContientMacro= true.

Cordialement
 

Staple1600

XLDnaute Barbatruc
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


A+


Staple
 
Dernière édition:

Spitnolan08

XLDnaute Barbatruc
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.


Cordialement
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [VBA] Workbooks.Open - comment ne pas activer Macro du classeur à ouvrir

Re

D'après le support microsoft

Application.AutomationSecurity
seulement disponible à partir de Microsoft Excel 2002

Dommage, car je suis sous XL 2000.

Mais merci pour l'info

Bonne nuit
 
Dernière édition:

Spitnolan08

XLDnaute Barbatruc
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
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 707
Messages
2 081 734
Membres
101 809
dernier inscrit
HADER2024