VBA Macros complémentaires XLAM

Anonyme
2025-01-30T14:43:44+00:00

Bonjour,

Je souhaite utiliser des macros complémentaires pour un classeur nommé initial car je ne souhaite pas que les macros soient dans ce dernier : le fichier Xlam que j'utilise est nommé macro_initial. La plupart des macros sont dans Tshisworkbook où je souhaite particulièrement utiliser WorkbookOpen.

Comment faire pour que ces macros du fichier Xlam situées dans Thisworkbook s'appliquent uniquement au fichier initial et non à d'autres fichiers quand je ferai la référence ?

Aussi comment les faire fonctionner à l'ouverture du fichier initial ?

Un grand merci d'avance à ceux qui pourront m'aider.

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

9 réponses

  1. DanielCo 107.7K Points de réputation
    2025-02-01T10:55:37+00:00

    Effectivement les fichiers xlsb sont un peu plus surs. Les fichiers xlsx ou xlsx sont des fichiers zip qu'il est facile d'extraire et de modifier.

    Daniel

    Cette réponse a-t-elle été utile ?

    2 personnes ont trouvé cette réponse utile.
    0 commentaires Aucun commentaire
  2. DanielCo 107.7K Points de réputation
    2025-02-02T15:25:17+00:00

    Bonjour,

    Je ne sais pas si c'est possible. Normalement, les emplacements sont stockés dans le registre à l'emplacement :

    HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Security\Trusted Locations

    Il semble malheureusement qu'il n'y ait que les emplacements standards. Une fois récupérés, il est facile de fermer le classeur le cas échéant.

    Daniel

    PS. Il y a des tutos sur internet pour lire les clés du registre via VBA. Perso, je ne l'ai jamais fait.

    Cette réponse a-t-elle été utile ?

    1 personne a trouvé cette réponse utile.
    0 commentaires Aucun commentaire
  3. DanielCo 107.7K Points de réputation
    2025-01-31T08:10:20+00:00

    Bonjour,

    J'ai changé le type du classeur. une fois celui-ci ouvert, il se comportera comme un add-in.

    https://www.cjoint.com/c/OAFibTpR1H4

    "La première macro de votre réponse doit être placée dans le module ThisWorkbook avec WorkbookOpen ou dans un module de classe ?"

    Elle est définie dans un module standard. Dans mon classeur, elle est appelée dans le Workbook_Open.

    Il faut plus que recopier le code. Le nom du module de classe doit correspondre à la classe définie dans le module standard :

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2025-01-30T22:12:58+00:00

    Bonjour Monsieur et merci pour votre réponse.

    La première macro de votre réponse doit être placée dans le module ThisWorkbook avec WorkbookOpen ou dans un module de classe ?

    Quelle sera son rôle car je n'ai pas très bien compris (je ne maîtrise pas les classes en VBA) ?

    J'ai le message d'erreur suivant : ce type de fichier n'est pas pris en charge en mode protégé quand j'essaie d'ouvrir le fichier Xlam en suivant votre lien.

    En attendant votre retour, merci pour votre réponse.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  5. DanielCo 107.7K Points de réputation
    2025-01-30T16:46:26+00:00

    Bonjour,

    C'est compliqué à expliquer... Il faut utiliser un module de classe. Sans entrer dans les détails - tu trouveras des tutos sur le net - à l'ouverture de l'add-in, la macro suivante s'exécute :

    Sub InitApp()
    Set moAppEventHandler = New cAppEvents
    With moAppEventHandler
    Set .App = Application
    End With
    End Sub

    Elle crée une instance d'Excel appelée App.

    Dans le module de classe, la macro suivante détecte les classeurs qui s'ouvrent et si le nom du classeur correspond à celui cherché, tu peux appeler des macros placées dans un module standard :

    Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    If Wb.Name = "250130.xlsm" Then MsgBox Wb.Name
    End Sub

    (ici, il y a un simple msgbox).

    https://www.cjoint.com/c/OAEqLPypn64

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire