Rendre une macro d'un classeur disponible dans un autre

Comment se resservir dans le code vba d'un classeur d'une macro ou d'une fonction placées dans une macro complémentaire ou dans le perso.xls ?

Pour pouvoir utiliser les fonctions de ton classeur de macros complémentaires dans le code de n'importe quel classeur :
PREMIÈRE SOLUTION :
En prenant pour acquis que le classeur de ta macro complémentaire est chargé c'est-à-dire que ton classeur de macro complémentaire apparait dans la liste des classeurs dans la fenêtre "Projet - Projet VBA" de l'éditeur de code, tu peux utiliser ce type de syntaxe :
a = Application.Run("denis1", Range("A8"))
Denis1 = Nom de la fonction du classeur de macro complémentaire
Elle doit être OBLIGATOIREMENT située dans un module standard.
Range("A8") : J'ai supposé que cette fonction avait un paramètre qui était un "Range" pour les fins de la syntaxe.

DEUXIÈME SOLUTION : L'usage de Application.Run pour l'appel des fonctions n'est pas l'idéal comme syntaxe !
A ) débute par rendre accessible le code de ton classeur de macro complémentaire dans la fenêtre de l'éditeur de code.
B ) Tu sélectionnes le nom (étiquette du classeur) dans la fenêtre de l'éditeur de code et tu affiches les propriétés. La seule propriété disponible est Name. Par défaut, la valeur de cette propriété est : "VBAProject". Modifie ce "Name" par un nom original et unique et SAUVEGARDE ton classeur.
C ) Toujours dans la fenêtre de l'éditeur de code, barre de menu / outils / références / utilise le bouton "Parcourir" pour remonter dans l'arborescence des fichiers jusqu'à l'emplacement où est ton fichier. Lorsque tu reviens à la fenêtre des références, Excel devrait avoir ajouté la référence à ton classeur du nom que tu as baptisé ton classeur au point 2. Tu t'assures de cocher cette référence avant de fermer la fenêtre des références.
D ) Maintenant, toutes tes fonctions et procédures publiques de ton classeur de macros complémentaire sont disponibles pour tous les classeurs ouverts et pour appeler une fonction tu peux simplement utiliser cette syntaxe :
A = Denis1(Range("A8"))
Denis1 = Nom de la fonction Range("A8") est le paramètre de la fonction.

TROISIÈME SOLUTION : Sans faire usage d'un classeur de macros complémentaires, on peut toujours utiliser un classeur de type xls pour le passer en référence au classeur actif. Le classeur passé en référence rend accessible SEULEMENT au classeur auquel il est passé en référence, toutes les fonctions et procédures qu'il possède.

Auteur :

Mots clefs associés à cette page : ,