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

patricktoulon

XLDnaute Barbatruc
bonjour a tous
une fois la référence d'un xla(m) activée et cochée comment appelle t on une fonction publique dans l'userform de ce xla(m)
office 2013
 
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.

Dranreb

XLDnaute Barbatruc
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.
 

patricktoulon

XLDnaute Barbatruc
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 ;)
 

Dranreb

XLDnaute Barbatruc
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.
 

patricktoulon

XLDnaute Barbatruc
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)
 

Dranreb

XLDnaute Barbatruc
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.
 

Dranreb

XLDnaute Barbatruc
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:

patricktoulon

XLDnaute Barbatruc
re
bon ben rien compris
un dis que non l'autre dit que oui :D :D

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
 

patricktoulon

XLDnaute Barbatruc
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:

Discussions similaires

Réponses
26
Affichages
377

Statistiques des forums

Discussions
312 176
Messages
2 085 961
Membres
103 066
dernier inscrit
bobfils