Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Rendre une fonction "publique"

10 réponses
Avatar
lululanantaise2
Bonjour,
J'ai cr=E9=E9 une fonction en VBA et je d=E9sirerais qu'elle existe pour
tous mes fichiers (actuellement je recopie le code de fichier en
fichier...), je l'ai copi=E9e dans le PROS.XLS mais rien ne fait.
Y a t il moyen ?
Merci de votre aide.
Lulu

10 réponses

Avatar
MichD
Bonjour,

Dans le classeur "Perso.xls" ou "Personal.xlsb" selon ta version d'Excel,
tu copies ta fonction personnalisée dans un module STANDARD de ton fichier perso.xls

Exemple :
'--------------------------------
Function Message(Nom As String)
Message = Nom
End Function
'--------------------------------

Et pour appeler cette fonction dans n'importe quel module VBA
Comme la fonction est dans un module standard, il n'est pas
obligatoire de stipuler le nom du module, on pourrait écrire
seulement : x = Application.Run("Personal.xlsb!Message", "denis")
"Denis" est la valeur du paramètre que je veux passer.

Sub test()
x = Application.Run("Personal.xlsb!module1.Message", "denis")
End Sub
'--------------------------------

MichD
--------------------------------------------
"lululanantaise2" a écrit dans le message de groupe de discussion :


Bonjour,
J'ai créé une fonction en VBA et je désirerais qu'elle existe pour
tous mes fichiers (actuellement je recopie le code de fichier en
fichier...), je l'ai copiée dans le PROS.XLS mais rien ne fait.
Y a t il moyen ?
Merci de votre aide.
Lulu
Avatar
lululanantaise2
Bonjour,
merci de ces commentaires, mais je ne désire pas l'appeler à partir de
VBA, je voudrais m'en servir dans une feuille excel :
=MaFonction(Var1;Var2;...), qu'elle existe simplement comme une
fonction traditionnelle comme Somme() par ex.
Bien cordialement,
Lulu



On 9 mai, 19:46, "MichD" wrote:
Bonjour,

Dans le classeur "Perso.xls" ou "Personal.xlsb" selon ta version d'Excel,
tu copies ta fonction personnalisée dans un module STANDARD de ton fich ier perso.xls

Exemple :
'--------------------------------
Function Message(Nom As String)
Message = Nom
End Function
'--------------------------------

Et pour appeler cette fonction dans n'importe quel module VBA
Comme la fonction est dans un module standard, il n'est pas
obligatoire de stipuler le nom du module, on pourrait écrire
seulement :  x = Application.Run("Personal.xlsb!Message", "denis")
"Denis" est la valeur du paramètre que je veux passer.

Sub test()
x = Application.Run("Personal.xlsb!module1.Message", "denis")
End Sub
'--------------------------------

MichD
--------------------------------------------
"lululanantaise2"  a écrit dans le message de groupe de discussion :


Bonjour,
J'ai créé une fonction en VBA et je désirerais qu'elle existe pour
tous mes fichiers (actuellement je recopie le code de fichier en
fichier...), je l'ai copiée dans le PROS.XLS mais rien ne fait.
Y a t il moyen ?
Merci de votre aide.
Lulu
Avatar
bcar
Ex :
' ------------------------------------------------------
' -- Fonction toto (vachement utile)
' -- [RETURN] : renvoie la chaine toto
' ------------------------------------------------------
Public Function toto() as string
toto = "toto"
End Function

dans ta cellule tu mets =toto() et tu obtiendras "toto" (sans les
guillemets)

Le 10/05/2011 08:03, lululanantaise2 a écrit :
Bonjour,
merci de ces commentaires, mais je ne désire pas l'appeler à partir de
VBA, je voudrais m'en servir dans une feuille excel :
=MaFonction(Var1;Var2;...), qu'elle existe simplement comme une
fonction traditionnelle comme Somme() par ex.
Bien cordialement,
Lulu

"lululanantaise2" a écrit dans le message de groupe de discussion :


Bonjour,
J'ai créé une fonction en VBA et je désirerais qu'elle existe pour
tous mes fichiers (actuellement je recopie le code de fichier en
fichier...), je l'ai copiée dans le PROS.XLS mais rien ne fait.
Y a t il moyen ?
Merci de votre aide.
Lulu



Avatar
MichD
Dans ce cas, tu crées un fichier de macros complémentaires.

Dans un fichier nouveau, tu copies toutes tes fonctions dans des
modules STANDARD.
Tu enregistres ton fichier en prenant soin de choisir dans la liste
déroulante du bas de la fenêtre "Enregistrer sous",
le type de fichier : Macros complémentaires xla ou xlam

Ton fichier devrait se retrouver dans ce répertoire :
C:Users"ton profil"AppDataRoamingMicrosoftAddIns

Si tu fermes Excel, lors de son ouverture, dans la fenêtre :
Barres des menus / outils / macros complémentaires /
tu devrais avoir une nouvelle appellation dans la liste du
nom de ton fichier, il ne te reste plus qu'à cocher la case à cocher.

Si tu as décidé d'enregistrer ton fichier de macros complémentaires
ailleurs que dans le répertoire par défaut, tu devras utiliser le
bouton Parcourir de la fenêtre et le retrouver dans l'arborescence
de l'explorateur Windows afin de l'ajouter à la liste des macros
complémentaires.

Ceci étant fait, toutes tes fonctions seront disponibles par leur nom
directement dans la feuille de calcul, et ce pour tous tes fichiers en
utilisant la même syntaxe que tu le fais lorsque les fonctions appartiennent
audit fichier.



MichD
--------------------------------------------
"lululanantaise2" a écrit dans le message de groupe de discussion :


Bonjour,
merci de ces commentaires, mais je ne désire pas l'appeler à partir de
VBA, je voudrais m'en servir dans une feuille excel :
=MaFonction(Var1;Var2;...), qu'elle existe simplement comme une
fonction traditionnelle comme Somme() par ex.
Bien cordialement,
Lulu



On 9 mai, 19:46, "MichD" wrote:
Bonjour,

Dans le classeur "Perso.xls" ou "Personal.xlsb" selon ta version d'Excel,
tu copies ta fonction personnalisée dans un module STANDARD de ton fichier perso.xls

Exemple :
'--------------------------------
Function Message(Nom As String)
Message = Nom
End Function
'--------------------------------

Et pour appeler cette fonction dans n'importe quel module VBA
Comme la fonction est dans un module standard, il n'est pas
obligatoire de stipuler le nom du module, on pourrait écrire
seulement : x = Application.Run("Personal.xlsb!Message", "denis")
"Denis" est la valeur du paramètre que je veux passer.

Sub test()
x = Application.Run("Personal.xlsb!module1.Message", "denis")
End Sub
'--------------------------------

MichD
--------------------------------------------
"lululanantaise2" a écrit dans le message de groupe de discussion :


Bonjour,
J'ai créé une fonction en VBA et je désirerais qu'elle existe pour
tous mes fichiers (actuellement je recopie le code de fichier en
fichier...), je l'ai copiée dans le PROS.XLS mais rien ne fait.
Y a t il moyen ?
Merci de votre aide.
Lulu
Avatar
MichD
Bonjour Bcar,

Si cette fonction est dans le fichier Perso.xls (fichier de macros personnelles)
'---------------------------
Public Function toto() as string
toto = "toto"
End Function
'---------------------------

Veux-tu dire que tu peux appeler cette fonction directement dans
la feuille de calcul par =toto() ????

Il me semble que tu dois faire précéder le nom de la fonction par le
nom du fichier comme : =Perso.xls!Toto()


MichD
--------------------------------------------
Avatar
bcar
J'aurais pu préciser de sauver le fichier contenant la fonction en .xlam
dans Application DataMicrosoftExcelXLSTART
Celui ci se lancera à l'ouverture de chaque fichier excel.
Il sera alors possible d'appeler la fonction sans la faire précéder de
"Perso.xls!"

Le 10/05/2011 14:37, MichD a écrit :
Bonjour Bcar,

Si cette fonction est dans le fichier Perso.xls (fichier de macros personnelles)
'---------------------------
Public Function toto() as string
toto = "toto"
End Function
'---------------------------

Veux-tu dire que tu peux appeler cette fonction directement dans
la feuille de calcul par =toto() ????

Il me semble que tu dois faire précéder le nom de la fonction par le
nom du fichier comme : =Perso.xls!Toto()


MichD
--------------------------------------------

Avatar
MichD
| J'aurais pu préciser de sauver le fichier contenant la fonction en .xlam

Cela est un fichier de macros complémentaires et non un fichier de
macros personnelles qui lui a une extension .xlsb. Dans le dernier
cas, le nom du classeur au complet doit précéder le nom de la fonction.
=Perso.xls!toto()
OU
=Personal.xlsb!toto()
selon ta version d'Excel.

MichD
--------------------------------------------
Avatar
lululanantaise2
On 10 mai, 14:18, "MichD" wrote:
Dans ce cas, tu crées un fichier de macros complémentaires.

Dans un fichier nouveau, tu copies toutes tes fonctions dans des
modules STANDARD.
Tu enregistres ton fichier en prenant soin de choisir dans la liste
déroulante du bas de la fenêtre "Enregistrer sous",
le type de fichier : Macros complémentaires xla ou xlam

Ton fichier devrait se retrouver dans ce répertoire :
C:Users"ton profil"AppDataRoamingMicrosoftAddIns

Si tu fermes Excel, lors de son ouverture, dans la fenêtre :
Barres des menus / outils / macros complémentaires /
tu devrais avoir une nouvelle appellation dans la liste du
nom de ton fichier, il ne te reste plus qu'à cocher la case à cocher.

Si tu as décidé d'enregistrer ton fichier de macros complémentaires
ailleurs que dans le répertoire par défaut, tu devras utiliser le
bouton Parcourir de la fenêtre et le retrouver dans l'arborescence
de l'explorateur Windows afin de l'ajouter à la liste des macros
complémentaires.

Ceci étant fait, toutes tes fonctions seront disponibles par leur nom
directement dans la feuille de calcul, et ce pour tous tes fichiers en
utilisant la même syntaxe que tu le fais lorsque les fonctions appartie nnent
audit fichier.

MichD
--------------------------------------------
"lululanantaise2"  a écrit dans le message de groupe de discussion :


Bonjour,
merci de ces commentaires, mais je ne désire pas l'appeler à partir d e
VBA, je voudrais m'en servir dans une feuille excel :
=MaFonction(Var1;Var2;...), qu'elle existe simplement comme une
fonction traditionnelle comme Somme() par ex.
Bien cordialement,
Lulu

On 9 mai, 19:46, "MichD" wrote:







> Bonjour,

> Dans le classeur "Perso.xls" ou "Personal.xlsb" selon ta version d'Exce l,
> tu copies ta fonction personnalisée dans un module STANDARD de ton fi chier perso.xls

> Exemple :
> '--------------------------------
> Function Message(Nom As String)
> Message = Nom
> End Function
> '--------------------------------

> Et pour appeler cette fonction dans n'importe quel module VBA
> Comme la fonction est dans un module standard, il n'est pas
> obligatoire de stipuler le nom du module, on pourrait écrire
> seulement :  x = Application.Run("Personal.xlsb!Message", "denis")
> "Denis" est la valeur du paramètre que je veux passer.

> Sub test()
> x = Application.Run("Personal.xlsb!module1.Message", "denis")
> End Sub
> '--------------------------------

> MichD
> --------------------------------------------
> "lululanantaise2"  a écrit dans le message de groupe de discussion :
>

> Bonjour,
> J'ai créé une fonction en VBA et je désirerais qu'elle existe pou r
> tous mes fichiers (actuellement je recopie le code de fichier en
> fichier...), je l'ai copiée dans le PROS.XLS mais rien ne fait.
> Y a t il moyen ?
> Merci de votre aide.
> Lulu



Merci, m'en va essayer !
Avatar
lululanantaise2
On 10 mai, 14:18, "MichD" wrote:
Dans ce cas, tu crées un fichier de macros complémentaires.

Dans un fichier nouveau, tu copies toutes tes fonctions dans des
modules STANDARD.
Tu enregistres ton fichier en prenant soin de choisir dans la liste
déroulante du bas de la fenêtre "Enregistrer sous",
le type de fichier : Macros complémentaires xla ou xlam

Ton fichier devrait se retrouver dans ce répertoire :
C:Users"ton profil"AppDataRoamingMicrosoftAddIns

Si tu fermes Excel, lors de son ouverture, dans la fenêtre :
Barres des menus / outils / macros complémentaires /
tu devrais avoir une nouvelle appellation dans la liste du
nom de ton fichier, il ne te reste plus qu'à cocher la case à cocher.

Si tu as décidé d'enregistrer ton fichier de macros complémentaires
ailleurs que dans le répertoire par défaut, tu devras utiliser le
bouton Parcourir de la fenêtre et le retrouver dans l'arborescence
de l'explorateur Windows afin de l'ajouter à la liste des macros
complémentaires.

Ceci étant fait, toutes tes fonctions seront disponibles par leur nom
directement dans la feuille de calcul, et ce pour tous tes fichiers en
utilisant la même syntaxe que tu le fais lorsque les fonctions appartie nnent
audit fichier.

MichD
--------------------------------------------
"lululanantaise2"  a écrit dans le message de groupe de discussion :


Bonjour,
merci de ces commentaires, mais je ne désire pas l'appeler à partir d e
VBA, je voudrais m'en servir dans une feuille excel :
=MaFonction(Var1;Var2;...), qu'elle existe simplement comme une
fonction traditionnelle comme Somme() par ex.
Bien cordialement,
Lulu

On 9 mai, 19:46, "MichD" wrote:







> Bonjour,

> Dans le classeur "Perso.xls" ou "Personal.xlsb" selon ta version d'Exce l,
> tu copies ta fonction personnalisée dans un module STANDARD de ton fi chier perso.xls

> Exemple :
> '--------------------------------
> Function Message(Nom As String)
> Message = Nom
> End Function
> '--------------------------------

> Et pour appeler cette fonction dans n'importe quel module VBA
> Comme la fonction est dans un module standard, il n'est pas
> obligatoire de stipuler le nom du module, on pourrait écrire
> seulement :  x = Application.Run("Personal.xlsb!Message", "denis")
> "Denis" est la valeur du paramètre que je veux passer.

> Sub test()
> x = Application.Run("Personal.xlsb!module1.Message", "denis")
> End Sub
> '--------------------------------

> MichD
> --------------------------------------------
> "lululanantaise2"  a écrit dans le message de groupe de discussion :
>

> Bonjour,
> J'ai créé une fonction en VBA et je désirerais qu'elle existe pou r
> tous mes fichiers (actuellement je recopie le code de fichier en
> fichier...), je l'ai copiée dans le PROS.XLS mais rien ne fait.
> Y a t il moyen ?
> Merci de votre aide.
> Lulu



Ça marche nickel !
Question subsidiaire, comment créer l'aide sur cette fonction?
Merci
Lulu
Avatar
Gloops
lululanantaise2 a écrit, le 12/05/2011 09:46 :
Ça marche nickel !
Question subsidiaire, comment créer l'aide sur cette fonction?
Merci
Lulu



Bonjour,

Pour créer une aide, il y a plusieurs réponses, faisant appel aux
formats HLP, CHM, HTML, PDF, notamment.

En voici une, adaptée pour peu de rubriques différentes.
On peut écrire quelque chose dans un éditeur de texte (y adjoindre au
besoin des images), et l'imprimer avec CreatePDF ou PrintToPDF.

Enregistrer le fichier PDF dans un répertoire bien repéré, par exem ple
le répertoire de la base.

Ensuite, au clic du bouton d'aide il y a deux choses à faire :
- s'assurer de la présence du fichier, dans la négative afficher un
message donnant le nom du fichier et l'emplacement où il est cherché
- dans l'affirmative l'afficher, on peut pour ça s'appuyer sur l'API
ShellExecute :

http://allapi.mentalis.org/apilist/ShellExecute.shtml

Je suis allé un peu vite sur le contrôle de la présence du fichier, pour
ça on a la fonction Dir. Par ailleurs existe aussi l'objet
FileSystemObject, mais on n'y aura recours pour contrôler la présence du
fichier que si on l'appelle pour autre chose dans le projet, puisqu'il
s'agit d'appeler une ressource supplémentaire.

J'ai juste donné le fil directeur, je laisse coller les morceaux ?