IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Cocher à l'ouverture du fichier excel "Accès approuvé au modèle d'objet du projet VBA" [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut Cocher à l'ouverture du fichier excel "Accès approuvé au modèle d'objet du projet VBA"
    Bonjour,
    je souhaiterai trouver un code qui puisse forcer la coche "Accès approuvé au modèle d'objet du projet VBA" ( paramètre des macros ) à l'ouverture du fichier excel sans avoir besoin de demander à l'utilisateur de le faire.
    Merci par avance pour vos conseils.

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bonjour,
    Si ce que tu demandes-là était possible, cette option de sécurité 'à la seule discrétion du propriétaire de la machine n'aurait plus aucun sens !

  3. #3
    Membre actif
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Points : 207
    Points
    207

  4. #4
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour via un VBS cela donne ça

    c'est le paramètre accessVBOM qui concerne ton besoin

    a enregistrer dans un fichier "Activer_les_macros_Word-Excel-Outlook-2003-a-2010-v1.0.vbs" par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    '---------------------------------------------------------------------------------------
    ' Author    : Olivier CATTEAU / Oliv-
    ' Date      : 24/04/2012 16:59
    ' Purpose   : Changement du Niveau de Sécurité dans WORD ET Excel 2003 à 2010 à MOYEN
    '---------------------------------------------------------------------------------------
     
     
    Dim WshShell, bKey, pKey, pKeyW,pKeyConf,pKeyOl, quest
    	Set WshShell = WScript.CreateObject("WScript.Shell")
    	on error resume next
    	pKey = "HKCU\Software\Microsoft\Office\11.0\Excel\Security\Level"
    	pKeyW = "HKCU\Software\Microsoft\Office\11.0\Word\Security\Level"
    	pKeyConf = "HKCU\Software\Microsoft\Office\11.0\Excel\Security\accessVBOM"
    	Err.Clear
    	pKeyOl=	"HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\security"
    	bKey = WshShell.RegRead(pKey)
    	'Wscript.Echo pKey & vncr & bKey
    	'test EXCEL 2003
    	If (Err = 0) then
    		'Wscript.Echo Computer & " " & Err.Description
    		Err.Clear
     
    		quest = vbYes 'MsgBox("Activer les Macros ?",vbYesNo + 256 + vbQuestion, "Word et Excel 2003")
    		if (quest = vbYes) then
    			WshShell.RegWrite pKey, 2,"REG_DWORD"
    			WshShell.RegWrite pKeyW, 2,"REG_DWORD"
    			WshShell.RegWrite pKeyConf, 1,"REG_DWORD"
    			WshShell.RegWrite pKeyOl, 2,"REG_DWORD"
    			msgbox "Les Macros sont activées à un niveau Moyen" & vbcr & "vous devrez cliquer sur [Activer les Macros]",0, "Word et Excel 2003"
    		end if 
    	end if
     
    	Err.Clear
    	'test EXCEL 2007
    	pKey = "HKCU\Software\Microsoft\Office\12.0\Excel\Security\VBAWarnings"
    	pKeyW = "HKCU\Software\Microsoft\Office\12.0\Word\Security\VBAWarnings"
    	pKeyConf = "HKCU\Software\Microsoft\Office\12.0\Excel\Security\accessVBOM"
    	Err.Clear
    	pKeyOl=	"HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\security"
    	bKey = WshShell.RegRead(pKey)
    	If (Err = 0) then
    		'Wscript.Echo Computer & " " & Err.Description
    		Err.Clear
     
    		quest = vbYes 'MsgBox("Activer les Macros ?",vbYesNo + 256 + vbQuestion, "Word et Excel 2007")
    		if (quest = vbYes) then
    			WshShell.RegWrite pKey, 2,"REG_DWORD"
    			WshShell.RegWrite pKeyW, 2,"REG_DWORD"
    			WshShell.RegWrite pKeyConf, 1,"REG_DWORD"
    			WshShell.RegWrite pKeyOl, 2,"REG_DWORD"
    			msgbox  "Les Macros sont activées à un niveau Moyen" & vbcr & "vous devrez cliquer dans le cadre 'Avertissement de sécurité'" & vbcr & "sur [Options...] [Activer ce contenu]",0, "Word et Excel 2007"
    		end if
    	end if
     
    	Wscript.Echo "suit"
    	    'test 2010
        pKey = "HKCU\Software\Microsoft\Office\14.0\Excel\Security\VBAWarnings"
        pKeyW = "HKCU\Software\Microsoft\Office\14.0\Word\Security\VBAWarnings"
        pKeyConf = "HKCU\Software\Microsoft\Office\14.0\Excel\Security\accessVBOM"
        Err.Clear
        pKeyOl = "HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Outlook\Security\Level"
        bKey = WshShell.RegRead(pKey)
        If (Err = 0) Then
            'Wscript.Echo Computer & " " & Err.Description
            Err.Clear
     
            quest = vbYes    ' MsgBox("Activer les Macros ?",vbYesNo + 256 + vbQuestion, "Outlook, Word et Excel 2010")
            If (quest = vbYes) Then
                WshShell.RegWrite pKey, 2, "REG_DWORD"
                WshShell.RegWrite pKeyW, 2, "REG_DWORD"
                WshShell.RegWrite pKeyConf, 1, "REG_DWORD"
                WshShell.RegWrite pKeyOl, 2, "REG_DWORD"
                MsgBox "Les Macros sont activées à un niveau Moyen" & vbCr & "vous devrez cliquer dans le cadre 'Avertissement de sécurité'" & vbCr & "sur [Options...] [Activer ce contenu]", 0, "Word et Excel 2010"
            End If
        Else: MsgBox Err.Description
        End If
    	WScript.Echo "traitement terminé"

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bonjour Oliv-
    Je ne sais pas si ta solution "marche" ou non, mais :
    - voilà l'une des raisons pour lesquelles d'aucuns (dont moi-même) ont inhibé VBS (et l'exécution d'autres scripts) sur leur machine
    - si la base de registre est protégée (c'est également le cas sur ma machine), elle ne sera pas modifiée sans que le propriétaire de la machine ne l'accepte et intervienne à cette fin
    Conclusion ?

  6. #6
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    ps : cela dépend des droits d'accès au registre de l'utilisateur, et il faut que Excel soit fermé je crois

    voici un code qui check et ferme excel pour lancer le vbs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    '' ==============================================================
    '' * Please note that Microsoft provides programming examples
    '' * for illustration only, without warranty either expressed or
    '' * implied, including, but not limited to, the implied warranties of
    '' * merchantability and/or fitness for a particular purpose. Any of
    '' * the code provided use by you in this blog is at your own risk.
    ''===============================================================
     
    Sub CheckIfVBAAccessIsOn()
    'https://blogs.msdn.microsoft.com/cristib/2012/02/29/vba-how-to-programmatically-enable-access-to-the-vba-object-model-using-macros/
    'Cristian.Berescu modifié par Oliv
     
    '"AccessVBOM"=dExcel:00000001
     
     
        Dim strRegPath As String
        strRegPath = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM"
     
        If TestIfKeyExists(strRegPath) = False Then
            '   Dim WSHShell As Object
            '   Set WSHShell = CreateObject("WScript.Shell")
            '   WSHShell.RegWrite strRegPath, 3, "REG_DExcel"
            MsgBox "Un changement de configuration est nécessaire dans votre registre. Excel va se fermer et vous devrez cliquer sur OK dans le script."
     
            WriteVBS
            Application.Quit
            Exit Sub
        End If
     
     
     
        Dim VBAEditor As Object     'VBIDE.VBE
        Dim VBProj As Object  'VBIDE.VBProject
        Dim tmpVBComp As Object     'VBIDE.VBComponent
        Dim VBComp As Object  'VBIDE.VBComponent
     
        Set VBAEditor = Application.VBE
        Set VBProj = Application.ActiveDocument.VBProject
     
     
        Dim counter As Integer
     
        For counter = 1 To VBProj.References.Count
            Debug.Print VBProj.References(counter).FullPath
            'Debug.Print VBProj.References(counter).Name
            Debug.Print VBProj.References(counter).Description
            Debug.Print "—————————————————"
        Next
     
    End Sub
     
     
     
    Function TestIfKeyExists(ByVal path As String)
        Dim WshShell As Object
        Set WshShell = CreateObject("WScript.Shell")
        On Error Resume Next
        Dim Valeur
        Valeur = WshShell.RegRead(path)
     
        If Err.Number <> 0 Or Valeur = 0 Then
            Err.Clear
            TestIfKeyExists = False
        Else
     
            TestIfKeyExists = True
        End If
        On Error GoTo 0
    End Function
     
     
     
    Sub WriteVBS()
        Dim objFile As Object
        Dim objFSO As Object
        Dim codePath As String
     
        codePath = ActiveWorkbook.path & "\reg_setting.vbs"
     
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objFile = objFSO.OpenTextFile(codePath, 2, True)
     
        objFile.WriteLine (" On Error Resume Next")
        objFile.WriteLine ("")
        objFile.WriteLine ("Dim WshShell")
        objFile.WriteLine ("Set WshShell = CreateObject(""WScript.Shell"")")
        objFile.WriteLine ("")
        objFile.WriteLine ("MsgBox ""Click OK to complete the setup process.""")
        objFile.WriteLine ("")
        objFile.WriteLine ("Dim strRegPath")
        objFile.WriteLine ("Dim Application_Version")
        objFile.WriteLine ("Application_Version = """ & Application.Version & """")
        objFile.WriteLine ("strRegPath = ""HKEY_CURRENT_USER\Software\Microsoft\Office\"" & Application_Version & ""\Excel\Security\AccessVBOM""")
        objFile.WriteLine ("WScript.echo strRegPath")
        objFile.WriteLine ("WshShell.RegWrite strRegPath, 1, ""REG_DWORD""")
        objFile.WriteLine ("")
        objFile.WriteLine ("If Err.Code <> o Then")
        objFile.WriteLine ("   MsgBox ""Error"" & Chr(13) & Chr(10) & Err.Source & Chr(13) & Chr(10) & Err.Message")
        objFile.WriteLine ("End If")
        objFile.WriteLine ("")
        objFile.WriteLine ("WScript.Quit")
     
        objFile.Close
        Set objFile = Nothing
        Set objFSO = Nothing
     
        'run the VBscript code
        ' > The macro will fail to execute the VB script if you use a
        '   [codepath] which contains blanks!
        '
        ' > To fix this issue, we add a pair of double quotes (" ") around
        '   [codepath];
        Shell "cscript " & Chr(34) & codePath & Chr(34), vbNormalFocus
     
    End Sub

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    cela dépend des droits d'accès au registre de l'utilisateur, et il faut que Excel soit fermé je crois
    Et donc ? --->> dépendance de la configuration + intervention de l'utilisateur (et de sa volonté)

    voici un code qui check et ferme excel pour lancer le vbs
    qui ne se lancera pas sur ma machine (me relire) (+, si VBS non inhibé : intervention de l'utilisateur de toutes manières, non ?)

  8. #8
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par unparia Voir le message
    Et donc ? --->> dépendance de la configuration + intervention de l'utilisateur (et de sa volonté)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    voici un code qui check et ferme excel pour lancer le vbs
    qui ne se lancera pas sur ma machine (me relire) (+, si VBS non inhibé : intervention de l'utilisateur de toutes manières, non ?)
    Bonjour Unparia,

    Tes remarques ne sont pas fausses mais ne s'appliquent pas dans tous les cas...

    Je réponds simplement à la demande de marcelisa2, si cette solution ne fonctionne pas il en cherchera une autre pour répondre à son besoin.


    En voici une qui devrait te convenir


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub CheckVBOM()
     
        Dim VBAEditor As Object     'VBIDE.VBE
        On Error Resume Next
     
        Set VBAEditor = Application.VBE
     
        If Err = 1004 Then
            MsgBox "Vous devrez Cocher " & vbCr & "Accès approuvé au modèle d'objet du projet VBA pour utiliser ce Classeur"
            Application.CommandBars.ExecuteMso ("MacroSecurity")
        End If
     
    End Sub

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    En voici une qui devrait te convenir
    C'est la seule acceptable.
    Encore faut-il que le classeur qui contient cette macro soit accepté avec ses macros et que, donc, il ne soit pas sécurisé pour l'éviter.
    C'est un peu le "chien qui tourne en rond, là ..."

  10. #10
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Encore faut-il que le classeur qui contient cette macro soit accepté avec ses macros et que, donc, il ne soit pas sécurisé pour l'éviter.
    La solution existe :

    tu crées une Feuille dans ton Classeur, nommé par exemple ActiverMacros

    où tu expliques que pour utiliser ce classeur il faut "Activer le contenu", et comment on le fait !

    dans ton évenement Workbook_BeforeClose tu masques toutes les Feuilles sauf celle-ci.

    DAns ton évenement Workbook_Open tu Affiches toutes les feuilles et tu masque ActiverMacros


    résultat, si les macros sont pas activées, la personne ne verra que l'avertissement, dans le cas contraire elle pourra utiliser le classeur et ses macros

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Ah bon, Oliv _ ?
    Ah bon ... !
    Allez ! je vais faire ma sieste ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/08/2016, 16h18
  2. [XL-2007] Acces approuve au modele d'objet du projet vba
    Par clem4491 dans le forum Excel
    Réponses: 0
    Dernier message: 03/12/2014, 22h11
  3. Accès approuvé au modèle d'objet du projet VBA
    Par tunis71187 dans le forum Excel
    Réponses: 2
    Dernier message: 13/04/2014, 20h12
  4. [XL-2007] Obtenir la valeur de l'option "Accès approuvé au modèle d'objet du projet VBA"
    Par Dim Me As New Idiot dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/09/2010, 08h47
  5. Ouverture/écriture fichier Excel
    Par mathieu04 dans le forum Windows
    Réponses: 17
    Dernier message: 07/06/2004, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo