XL 2010 VBA: Diffuser ses macros à ses collègues

Guy_M

XLDnaute Occasionnel
Bonjour,

J'écris des macros pour mon usage personnel et les diffuse/mets à disposition de mes collègues qui ont les mêmes besoins que moi.

Si la macro ne manipule que des objets d'Excel cela ne pose pas de problèmes particulier en dehors d'abaisser un peu le niveau de sécurité pour les macros ("désactiver les macros avec avertissement"), ce qui est généralement l'option de sécurité par défaut.

Ma dernière réalisation accède aux objets de Outlook. Pour qu'elle fonctionne, il faut que la référence à Outlook ait été ajoutée à VBA. Il est possible de l'ajouter à l'ouverture du classeur contenant la macro mais pour cela l'option d'Excel "Accès approuvé au modèle d'objet du projet VBA" doit être activée ce qui est beaucoup moins standard. De plus, j'ai lu que valider "Accès approuvé au modèle d'objet du projet VBA" pose de gros problèmes de sécurité.

Il est possible de tester que "Accès approuvé au modèle d'objet du projet VBA" a été validé en testant "IsError(ThisWorkbook.VBProject)" cela permet d'avertir l'utilisateur qu'il y a un risque de soucis et de ne pas essayer d'ajouter une référence mais cela ne permet pas de savoir si une référence est présente ou non dans VBA (si les références nécessaires sont présentes, l'accès au modèle d'objet de VBA n'est pas utile donc pas la peine d'alerter l'utilisateur).

Une piste autait été de faire du late binding mais j'ai un "Private WithEvents" sur un objet Outlook qui s'en accommode fort mal (et je n'ai pas trouvé comment contourner).

Auriez-vous une méthode pour éviter ces désagréments et permettre qu'une macro puisse s’exécuter sur n'importe quel poste de travail sans intervention ou presque ?

Par avance, je vous remercie pour vos réponses.

A bientôt
GM
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@Dranreb, @Guy_M,

j'ai écrit mon post #3 par rapport à ce paragraphe de l'énoncé de Guy_M :​
«
Si la macro ne manipule que des objets d'Excel cela ne pose pas de problèmes particulier en dehors d'abaisser un peu le niveau de sécurité pour les macros ("désactiver les macros avec avertissement"), ce qui est généralement l'option de sécurité par défaut.​
»

perso, je préfère éviter de baisser le niveau de sécurité des macros, et faire ce que j'ai proposé dans mon post #28 ; mais c'est juste une suggestion, rien de plus. ;)

soan
 
Dernière édition:

Guy_M

XLDnaute Occasionnel
Bonsoir.
Ça ne me paraît pas prudent ou sain de modifier le projet VBA dont fait partie le code en train de s'exécuter (ThisWorkbook)
Bonsoir,

Je suis d'accord, l'objectif de cet test est de savoir s'il est possible de modifier l'environnement d’exécution pour ajouter les références qui manqueraient pour la bonne exécution des macros.

Toute réponse même longtemps après fait plaisir et permet de mieux cerner le sujet, merci pour cette réponse.
 

Bernard38

XLDnaute Nouveau
Bonjour,
Je déterre ce sujet mais comme je vois qu'il n'y a pas eu de réponse... Ci dessous code pour lister les références cochées et code pour cocher les références. Je le fais sur les macros que je partage avec des collègues pour éviter un plantage. Code à mettre les Workbook open.

Attention toutefois à la version Excel...

VB:
Sub Display_GUID_Info()
   
    'PURPOSE: Displays GUID information for each active _
    Object Library reference in the VBA project
    'SOURCE: www.TheSpreadsheetGuru.com
   
    Dim ref
   
    'Loop Through Each Active Reference (Displays in Immediate Window [ctrl + g])
    For Each ref In ThisWorkbook.VBProject.References
        Debug.Print "Reference Name: ", ref.Name
        Debug.Print "Path: ", ref.FullPath
        Debug.Print "GUID: " & ref.GUID
        Debug.Print "Version: " & ref.Major & "." & ref.Minor
        Debug.Print " "
    Next ref
   
End Sub

'------------------------------------------------------------------------------------------------------------------------------------------

'cochage" de références VB :

Private Sub CocherRefs()

    On Error Resume Next
    'Reference Name: VBA
    ThisWorkbook.VBProject.References.AddFromGuid _
        "{000204EF-0000-0000-C000-000000000046}", 4, 2
    'Path:     C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA7.1\VBE7.DLL
    'GUID: {000204EF-0000-0000-C000-000000000046}
    'Version: 4.2
   
    'Reference Name: Excel
    ThisWorkbook.VBProject.References.AddFromGuid _
        "{000204EF-0000-0000-C000-000000000046}", 1, 9
    'Path:     C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE
    'GUID: {00020813-0000-0000-C000-000000000046}
    'Version: 1.9
   
    'Reference Name: stdole
    ThisWorkbook.VBProject.References.AddFromGuid _
        "{00020430-0000-0000-C000-000000000046}", 2, 0
    'Path:     C:\Windows\SysWOW64\stdole2.tlb
    'GUID: {00020430-0000-0000-C000-000000000046}
    'Version: 2.0
   
    'Reference Name: Office
    ThisWorkbook.VBProject.References.AddFromGuid _
        "{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}", 2, 8
    'Path:     C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE16\MSO.DLL
    'GUID: {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}
    'Version: 2.8
   
    'Reference Name: MSForms
    ThisWorkbook.VBProject.References.AddFromGuid _
        "{0D452EE1-E08F-101A-852E-02608C4D0BB4}", 2, 0
    'Path:     C:\windows\SysWOW64\FM20.DLL
    'GUID: {0D452EE1-E08F-101A-852E-02608C4D0BB4}
    'Version: 2.0
   
End Sub
 

Discussions similaires