Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Problème d'accès à des boutons ActiveX dans un classeur depuis un xlam

  • Initiateur de la discussion Initiateur de la discussion ThierryP
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ThierryP

XLDnaute Occasionnel
Bonjour le forum,

J'arrive avec une question existentielle (que les puristes du "avec un fichier joint, c'est mieux" me pardonnent d'avance😉😉), mais j'ai plus besoin d'une explication conceptuelle que de résoudre un souci de code en particulier !!!

J'ai un fichier utilisateur avec des boutons activeX sur une feuille (nommée "Aide"). Dans un xlam chargé au lancement d'Excel, il y a le code correspondant au bouton.
Dans le fichier utilisateur:
Code:
Private Sub Workbook_Open()
Application.Run "'Modele.xlam'!Workbook_Open", ThisWorkbook
End Sub
et dans le xlam, j'ai :
Code:
Public Sub WorkBook_Open(wbActif As Workbook)
Set Feuille2 = wbActif.Sheets("Aide")
With Feuille2
    .Activate
    .Unprotect 
    .OLEObjects("CB_Controle").Object.Visible = True
    etc...
End Sub
et j'ai une erreur "Propriété ou méthode etc...". Le Classeur passé en paramètre est correct, les Feuille1 et Feuille2 sont bien identifiées (Name et CodeName Ok).
Par contre, si j'écris :
Code:
Sub Reset_Boutons(wbActif As Workbook)
With wbActif.Sheets("Aide")
With .CB_Controle
        .Height = 29.25
        etc...
End Sub
là, ça fonctionne sans problème...
Si une bonne âme voulait bien prendre le temps de m'expliquer le pourquoi du comment, ma vie en serait ensoleillée (j'en fais trop, là ??)
Merci d'avance à tout généreux contributeur( trice)
 
Je n'ai jamais vu ça :
VB:
Public Sub WorkBook_Open(wbActif As Workbook)
Normalement cette macro n'a pas d'argument...

A+
Bonjour job75,

Mauvais copier/coller de ma part.... J'ai créé une macro publique dans un module standard qui s'appelle "Fichier_Open" pour éviter la confusion, même si ça fonctionnait avec WorkBook_Open en public dans un module standard.
 
Bonjour.
L'objet supporté par cet OLEObject n'a peut être pas de propriété Visible.
De toute façon L'OLEObject lui même en a déjà une alors inutile d'utiliser l'autre.
Bonjour Dranreb,
C'est un bouton, il a bien une propriété Visible.
Après quelques recherches, il m'a semblé comprendre (mais bon, je suis au-delà des limites de mes connaissances d'autodidacte amateur....) qu'il pouvait y avoir quelques soucis ActiveX / Excel parfois. Du coup, en écrivant comme ceci
VB:
wbActif.Sheets("Aide").CB_Controle
ça fonctionne mais j'aurais aimé comprendre !!!

Merci à vous deux d'avoir pris le temps de me lire !
 
Bonjour Dranreb,
C'est bien ce que je disais..... Je suis au-delà de mes compétences, parce que quand je regarde les propriétés d'un bouton, je vois une propriété Visible, mais effectivement je n'en sais pas plus !
En tous cas, merci de m'avoir répondu....
 
Bonjour
de toute façon même si la méthode application.run fonctionne ce n'est pas comme cela qu'est sensé être utilisé un complément xlam
pour éviter les déconvenues de ce genre , un xlam doit être intégré dans les référence du classeur l'utilisant
l'accès au macro et fonctions se fait directement ensuite comme ces macro/fonction étaient dans le classeur utilisateur lui même
 
Bonjour Patrick,

Merci de ta réponse, même si elle n'est pas très claire pour moi (si j'avais ton niveau, je ne serais pas en train de demander de l'aide😉😉🤣)
Mon idée était d'avoir un seul code à modifier sans passer sur chaque poste en cas de mise à jour.
Veux-tu dire que sur chaque poste, il faut ajouter le complément via Options -> Compléments etc... ?
Si oui, c'est justement ce que je voulais éviter pour ne pas avoir à passer sur chaque poste pour l'ajouter (n'oublions pas que beaucoup d'utilisateurs ne savent même pas comment aller dans les options d'Excel !!). En plus, il me semble avoir lu dans un post de GClaire (Avoir des classeurs maitres et les procédures dans un autre classeur, créé en juillet 2024) que celui-ci avait des soucis d'accès quand il voulait faire une mise à jour du xlam.
Donc ce que j'ai fait, c'est ceci à l'ouverture du fichier utilisateur :
VB:
Private Sub Workbook_Open()
Dim cheminAddIn As String
Dim wbAddin As Workbook

cheminAddIn = "D:\Chemin\Daccès\Addin\Modele.xlam"
Set wbAddin = Workbooks.Open(Filename:=cheminAddIn, ReadOnly:=True)
wbAddin.IsAddin = True
Application.Run "'Modele.xlam'!Fichier_Agent_Open", ThisWorkbook
End Sub
Et à la fermeture :
Code:
Application.Run "'Modele.xlam'!Decharger_Xlam"
Avec ce code dans la macro du xlam :
VB:
Public Sub Decharger_Xlam()
Application.DisplayAlerts = False
ThisWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True
End Sub
Cela semble fonctionner d'après mes tests..... mais bon, je suis loin d'être un guru du VBA, et ça va plus vite de dire ce que je connais que ce que je ne connais pas!
Je suis preneur de toute solution plus efficace et plus pro !!!
 
de toute façon un complément xla(m) par définition ,s'active sur le post dans le quel tu veux l'utiliser
le complément peut être en résau ça c'est autre chose
mais si ça te convient comme ça ......
Désolé pour le délai de réponse, mais plein de soucis informatiques ces derniers temps !
J'ai pu tester avec le xlam dans un dossier de mon nas, connecté en ethernet, ça fonctionne. Reste à tester sur un réseau en domaine...
Tu dis "mais si ça te convient comme ça....", ce qui sous-entend que ce que j'ai fait n'est pas top (ou alors j'ai mal compris !). Du coup, dis moi ce qu'il faudrait faire pour une solution plus propre !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…