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

XL 2016 VBA - Origine d'un évènement

Dudu2

XLDnaute Barbatruc
Bonjour,
Peut-on savoir si un évènement (Worksheet_Activate() par exemple) est généré par un code VBA ou une activation manuelle par un utilisateur ?
Merci
 

Dudu2

XLDnaute Barbatruc
Tout ce qui est public dans le complément y est alors connu.
Ok, merci pour la confirmation. Je le savais mais oublié dans les limbes du temps.
peut être que @Dranreb aura les mots pour te le faire comprendre
Ben oui, t'énerve pas, il m'a confirmé ce que j'ai constaté.
je te l'ai expliqué plusieurs fois que c’était possible et surtout sans application.run
Sans Application.Run ça ne fonctionne pas !

Autre problème... Excel bug sur les évènements ! Fait c...
Tu créés un classeur via un classeur macro.
Tu fermes le classeur macros ce qui ré-active le classeur créé.
=> pas de Workbook_Activate sur le classeur créé ré-activé
=> pas de Window_Activate sur le classeur créé ré-activé
 

patricktoulon

XLDnaute Barbatruc
là encore une fois (et dieu sait que la dernière fois tu y était presque) tu confond

1 les fonctions de ton complément peuvent agir sur tout tes classeurs
et
2 tout les classeurs peuvent utiliser les fonction du complément

pour info tu semble maitriser la 1
et bien pose toi la question quelle est la différence entre les deux

et là je vais prendre le temps de l'expliquer
on te dit que app.run et tout tes pirouette c'est pas bon caca boudin

tu crée un complément xlam avec des fonction des userforms et tout ce que tu peux bien vouloir lui mettre
déjà tu nomme le vba project OBLIGATOIREMENT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
de façon a pouvoir l'identifier dans les reférences

ensuite tu veux l'utiliser tu coche le complement dans les options
la il est seulement dispo

ensuite tu va dans les reférence du ou des classeurs ou tu veux utiliser tes petites baby fonction
et tu coche dans les références le nom que tu a donné au vba project
a partir de la
tu peux appeller n'importe quelle sub ou fonction de ton xlam
SANS APPLICATION.RUN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

pour en revenir a ton problème de activate dans les classeurs créés dynamico
il est normal que ça colle pas puisque ces classeurs n'ont pas la ref du xla de cochée dans les refs

oui mais alors comment va on tondre les moutons

là on parle d'event au niveau de l'application et workbook
alors déjà perso je met tout les event en public dans le xlam
il y a aussi l'event implémentable "application" qui pourra te proposer des event au niveau application
mais là on parle du mode 1 cité plus haut
dans le quel une variable workbook peut être renseigné voir un new event workbook
" chaque activation de classeur les events gèrent les event de ce classeur

le B à BA des modules classes
 

Dudu2

XLDnaute Barbatruc
ensuite tu veux l'utiliser tu coche le complement dans les options
Ah oui, je me souviens de ta bidouille de Complément coché quelque part (références ou ailleurs je sais plus)
C'est trop compliqué/lourd pour moi. Je reste sur du standard de base. Ça ne me gène pas de faire un Application.Run. C'est kif kif Call direct.
Et j'aimerais que quand un classeur s'active, l'évènement correspondant soit déclenché, ce qui n'est pas le cas ici.
 

Dranreb

XLDnaute Barbatruc
Je ne sais pas si l'évènement WorkbookActivate se produit quand se produit l'évènement NewWorkbook. En tout cas que le classeur de macro soit fermé ou non, si aucun autre classeur n'est activé je ne vois pas pourquoi il faudrait s'attendre à un WorkbookActivate pour le classeur créé.
 

Dudu2

XLDnaute Barbatruc
Le classeur créé est automatiquement activé par la fermeture du classeur macro qui est à ce moment là le classeur actif car explicitement activé par le code. Mais l'activation automatique du classeur créé ne se traduit par aucun évènement.

Si le classeur macro n'est pas le classeur actif lors de sa fermeture, effectivement le classeur créé est le classeur actif mais on reçoit un évènement de Deactivate sur ce classeur macro qui n'est pas le classeur actif. La c'est peut-être plus "normal" sauf si on considère qu'il serait logique d'avoir une symétrie Activate/Deactivate.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Bonjour,
Quel est le bénéfice de mettre le projet du Complément en References d'un classeur macro ?
Faire un Call direct à ses fonctions publiques au lieu d'un Application.Run ? Et quoi d'autre ?
Certes plus pratique pour passer des arguments complexes et probablement que l'adresse de la fonction est résolue dynamiquement dans Application.Run plutôt qu'à la compilation sur un Call. C'est tout ?
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Non, ça ne se limite pas à ça. On peu utiliser ce qui est public, variables, UserForm, module de classe. En précisant le nom de projet suivi d'un point, on a l'affichage de la liste de ce qui est accessible. Un nouvel exemplaire doit toutefois être renvoyé par une Function écrite dans le complément. On ne peut pas utiliser New avec un module de classe du complément. C'est déjà bien que le type d'objet soit connu.
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…