Généraliser une fonction pour un appel dans n'importe quel module

Hello team forum,

Je cherche un moyen de rendre un fonction dans un module, l générique pour tous les workbooks (Je souhaite pouvoir l'appeler de n'importe quel module si besoin).

Je pensais à l'instruction "Public" juste devant la fonction du genre:

Plublic Function BIDULE( a as variant, b as string) as double

Le "Public" ne semble pas la rendre suffisamment générique pour être appelée de partout dans tous mes worksheets indifféremment.

Quelqu'un aurait il une idée ?

Merci beaucoup.

Bonjour,

Te dire que j'ai tout compris !...

Tu Crées ta fonction et tu l'enregistres dans ton classeur de macros personnelles (PERSONAL.XLSB).

Elle sera disponible dans touts tes classeurs.

Cdlt.

Bonjour Yeshua,

tu as écrit : « Plublic Function BIDULE( a as variant, b as string) as double » ; y'a une lettre en trop ; d'autre part, dans un module, une fonction ou une sub sont déjà Public par défaut : inutile de le mettre ; ainsi, ta fonction est déjà appelable depuis n'importe quel module, et depuis n'importe quelle feuille.

Function BIDULE(a as variant, b as string) as double
  '...
  'BIDULE = ...
End Function

as-tu bien placé ta fonction dans Module1 et pas dans un UserForm ?

dhany

Salut dhany ,Yeshua

tu peut essai une macro complémentaire

Pour créer une macro complémentaire (contenant la fonction)

Ouvrir Excel : un classeur vierge et enregistre la fonction dans une macro complémentaire

Enregistrer la macro complémentaire : Fichier/Enregistrer sous, Type de fichier : Macrocomplémentaire Microsoft Excel (*.xlam)

Allez : "Fichier" > "Options" > "Compléments" puis cliquez sur le bouton "Atteindre" pour ouvrir la fenêtre des compléments :

1 5 2 6 18

Dans une cellule de la feuille de travail Excel taper =Myfunction(Bla Bla Bla) : et la fonction Myfunction est maintenant utilisable part tous dans Excel !

Bonjour Dhany,

C'était une erreur d'écriture. Si toutes les sub sont publiques, je ne parviens pas à les appeler dans le module d'un autre classeur.

Je veux dire que, si j'ai deux classeurs Workbook1 et workbook2 ouvert et que je crée dans un module de workbook1 la fonction BIDULE(a, b) et que je veux la rendre accessible dans un module quelconque du workbook2, cela ne fonctionne pas.

La fonction BIDULE(a,b) ne fonctionne que dans n'importe quel module du classuer workbook1. Elle n'est pas assez générique pour tous les autres classeurs (quoique "publique" par défaut).

Bien à toi,

Yeshua.

Bonjour Jean-Eric,

Je ne connaisssais pas cette méthode. Fonctionne-t-elle vraiment ?

Je vais tester et te dirai.

Bien à toi,

Yeshua.

Bonjour Yeshua,

tu peux passer par le classeur de macros personnelles nommé "PERSONAL.XLSB" (qui est référencé automatiquement), ou utiliser un 3ème classeur .xlsm dont tu choisis le nom à ta préférence, et dans lequel tu places toutes tes macros communes ; ensuite, chaque autre classeur doit y faire référence via le menu Outils / Références... (dans VBA).

dhany

Bonjour,

@ Yeshua,

Une fois ton PERSONAL.XLSB, crée et ta procédure copiée dans ce dernier, il faudra ajouter une commande (bouton) dans la barre d'outils Accès rapide.

Celle ci sera alors disponible d'un simple clic.

A te relire pour plus d'informations.

Cdlt.

Bonjour Jean-Eric,

Ok pour la procédure; Ce que je me pose comme question c'est: cette fonction sera-t-elle accessible si on veut l'utiliser dans un module donné, où qu'il soit?

Prenons un exemple.

Je crée une fonction TrierDictionnaire( a as dictionnaire, b as ordre de tri). Je voudrais que cette fonction soit utilisable dans toutes les procédures de tous les modules, à souhait quelque soit le classeur.

Je veux juste pouvoir l'appeler à chaque fois que j'ai un besoin de trier une liste sans doublon par exemple, quelque soit le classeur dans lequel se trouve ma procédure vba. Penses tu que cela réponde à ce "Use case" ?

Sauf erreur, j'ai l'impression que cette proposition répond davantage au cas d'ajout d'un add-in fonctionnel ?!.... Corrige moi si nous ne nous comprenons pas.

Bien à toi,

Yeshua.

Re Jean-Eric, Dhany,

Je viens de comprendre ta proposition du coup, en complétant avec les explications de Dhany. Parfait !

Merci beaucoup.

Yeshua.

Re,

Si tout est clair maintenant, pense à clore le sujet.

Bonne continuation.

Hello forum,

Merci beaucoup. Les différentes propositions fonctionnent correctement.

Bravo à vous et merci enore.

Yeshua.

Rechercher des sujets similaires à "generaliser fonction appel importe quel module"