XL 2013 comment appeler une fonction publique d'un userform dans un xla(m)

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 !

Solution
Je pensais que la question était plus compliquée que ça, et dans l'autre sens.
Dans ce sens là c'est plus facile. Tout ce qui est Public dans le projet du xlam est connu dans le projet utilisateur. Toutefois j'ai un doute quant au UserForm dans la mesure où c'est un module de classe. Si son exemplaire par défaut n'est pas connu dans le classeur utilisateur, le faire afficher par une procédure Public du xlam. Là, pas besoin de Run pour l'invoquer, son seul nom suffit.
Bonjour.
S'il faut pouvoir exécuter quelque chose qui figure dans la programmation du classeur utilisateur, ma piste privilégiée est un évènement décrété par l'UserForm.
Mais ça implique un protocole précis dans un module objet, même Worksheet ou ThisWorkbook, muni d'une Private WithEvents UFmLbd As UFmLambda
et dans le xlam, il faut une Function capable d'en renvoyer un nouvel exemplaire.
Toutefois il devrait être possible de prévoir une variable Public String du projet du xlam destinée à accueillir l'argument d'un Application.Run, probablement avec NomDuClasseur! devant.
 
bonjour Dranreb



une fois la ref activée et cochée
comment l'appelle t on
dans un classeur
Capture.JPG



dans le module userform du xla
VB:
Option Explicit

Public Function GetCapture()
    Me.Show 0
End Function

si je dois appeler le run autant ne pas activer la ref et l'ouvrir simplement et faire le run 😉
 
Je pensais que la question était plus compliquée que ça, et dans l'autre sens.
Dans ce sens là c'est plus facile. Tout ce qui est Public dans le projet du xlam est connu dans le projet utilisateur. Toutefois j'ai un doute quant au UserForm dans la mesure où c'est un module de classe. Si son exemplaire par défaut n'est pas connu dans le classeur utilisateur, le faire afficher par une procédure Public du xlam. Là, pas besoin de Run pour l'invoquer, son seul nom suffit.
 
re
je viens de tester ca fonctionne
j'ai ajouté un module au xlam
je lui ai mis
VB:
Public Function capture()
SnapForm.GetCapture
End Function

et dans un classeur avec la ref activée et cochée
Code:
Sub snap()
capture
End Sub

je garde mon code userform snapshot intègre comme ça je peux l'importer directement dans un classeur

mais j'aimerais savoir si c'est possible ou pas (accès direct a la fonction de l'userform)
 
Comme dit, si l'exemplaire par défaut de l'UserForm n'est pas connu du projet utilisateur il faut prévoir une fonction du xlam qui lui en renvoie un nouvel exemplaire pour pouvoir utiliser directement ensuite ses méthodes et propriétés.
 
S'il est défini dans le projet, oui mais pas s'il est défini dans le projet d'un complément xlam en référence. Je ne me serais pas fatigué à prévoir un module Création dans mon complément CBxLCtlA.xlam si le mot clé New était supporté pour les ComboBoxLiées et ControlsAssociés.
 
Dernière édition:
re
bon ben rien compris
un dis que non l'autre dit que oui 😀 😀

toujours est il qu'a cela et je viens de tester
si j'ajoute la ref par vba ben capture n'est pas reconnu et pourtant la ref est bien cochée
VB:
Sub snap()
ref = Excel.Application.UserLibraryPath & "Snapshot.xlam"
On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromFile ref
On Error GoTo 0
DoEvents
'capture' n'est pas reconnu 
ThisWorkbook.VBProject.References.Remove ref 'le remove ne fonctionne pas 

End Sub

ps:robert
ca plante au dim direct
mais même si ça ne plantait pas au dim
on peut pas faire usf.Getcapture car getcapture est dans un userform pas dans un module
Capture.JPG


pourtant
Capture.JPG


bref je vais boire un café ça ira mieux après
 
bon en attendant comme dit Dranreb
il faut une instance de l'userform en publique dans le XLAM

donc dans le module standard du xlam j'ai mis
VB:
Public Snapforme As New SnapForm

et dans le classeur je l'apelle par la variable
Code:
Sub test()
snapforme.getcapture
End Sub
et ca fonctionne
c'est quand même chiant de mettre un module juste pour cette ligne 😉
 
Dernière édition:
- 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

Discussions similaires

Réponses
7
Affichages
377
  • Question Question
XL 2019 User Form
Réponses
9
Affichages
360
Retour