Procédures VBA privées vs publiques (Subs & Functions)

Ce tutoriel expliquera la différence entre les déclarations publiques et privées dans VBA et comment spécifier des modules comme privés.

Sous-procédures publiques vs privées

Les procédures (sous et fonctions) peuvent être déclarées privées ou publiques dans VBA. S'ils sont publics, cela signifie que vous pourrez les voir depuis la fenêtre de macro Excel et qu'ils peuvent être appelés de n'importe où dans votre projet VBA. S'ils sont privés, ils ne peuvent pas être vus dans la fenêtre de macro Excel et ne peuvent être utilisés que dans le module dans lequel ils sont déclarés (à l'aide de méthodes normales, consultez le bas de cet article pour savoir comment accéder aux procédures privées à partir d'autres modules) .

Les fonctions publiques peuvent être appelées comme des fonctions Excel intégrées dans la feuille de calcul Excel.

Noter: Les variables et les constantes peuvent également être publiques ou privées.

Fenêtre de macros Excel

Par défaut, les macros Excel (la plupart des procédures VBA) sont visibles par les utilisateurs de classeurs dans la fenêtre Macro :

Ceux-ci sont considérés Publique procédures. Vous pouvez définir explicitement les procédures comme publiques en ajoutant « Public » avant l'instruction Sub :

123 Public Sub HelloWorld()MsgBox "Bonjour tout le monde"Fin du sous-marin

Si vous ne définissez pas la procédure comme publique, elle sera supposée publique.

Pour déclarer une procédure comme privée, ajoutez simplement « Private » avant la sous-instruction de procédure :

123 Sous-marin privé HelloTout le monde()MsgBox "Bonjour à tous"Fin du sous-marin

La deuxième procédure ne serait pas visible dans la fenêtre Macro pour les utilisateurs d'Excel, mais peut toujours être utilisée dans votre code VBA.

Procédures avec arguments

Les sous-procédures peuvent avoir des arguments. Les arguments sont des entrées de la sous-procédure :

123 Sub Hello(strName en tant que chaîne)MsgBox "Bonjour" & strNameFin du sous-marin

Si une sous-procédure a des arguments, elle n'apparaîtra jamais dans la fenêtre de macro, même si elle est déclarée publique, car il n'y a aucun moyen de déclarer les arguments.

Les fonctions n'apparaîtront jamais non plus dans la fenêtre de macro, qu'elles soient ou non déclarées publiques.

Les fonctions publiques dans Excel peuvent être utilisées directement dans une feuille de calcul en tant que « Fonction définie par l'utilisateur » (UDF). Il s'agit essentiellement d'une formule personnalisée qui peut être appelée directement dans une feuille de calcul. Ils se trouvent dans la catégorie "Défini par l'utilisateur" de la fenêtre "Insérer une fonction" ou peuvent être saisis directement dans une cellule.

Programmation VBA | Le générateur de code fonctionne pour vous !

Utilisation de procédures entre les modules dans votre projet VBA

Les procédures publiques peuvent être appelées à partir de n'importe quel module ou formulaire de votre projet VBA.

Tenter d'appeler une procédure privée à partir d'un module différent entraînera une erreur (Remarque : voir le bas de cet article pour une solution de contournement).

Noter: Les procédures publiques et les variables dans les modules de classe se comportent légèrement différemment et sortent du cadre de cet article.

Différents modules, peuvent stocker des procédures avec le même nom, à condition qu'elles soient toutes les deux privées.

Si deux procédures ou plus ont le même nom et sont déclarées publiques, vous obtiendrez une erreur de compilation « Nom ambigu détecté » lors de l'exécution du code.

Modules privés

Par défaut, les modules sont publics.

Pour rendre un module privé, vous mettez le mot-clé suivant en haut du module.

1 Option Module Privé

Si vous déclarez un module comme privé, les procédures du module ne seront pas visibles pour les utilisateurs d'Excel. Les procédures de fonction n'apparaîtront pas dans la fenêtre Insérer une fonction mais peuvent toujours être utilisées dans la feuille Excel tant que l'utilisateur connaît le nom de la fonction !

Les sous-procédures n'apparaîtront pas dans la fenêtre Macro mais seront toujours disponibles pour être utilisées dans le projet VBA.

Accéder à une procédure privée à partir d'un module différent

Comme mentionné ci-dessus, les procédures privées sont inaccessibles dans d'autres modules de code par des méthodes "normales". Cependant, vous pouvez accéder aux procédures privées en utilisant le Application.Exécuter commande disponible en VBA.

Considérez les 3 modules suivants.

Le module 2 est un Privé Module avec un Publique Sous-procédure, alors que Module3 est Publique module avec un Privé Sous-procédure.

Dans Module1, nous pouvons appeler Hello World - le Option Module Privé en haut ne nous empêche pas d'appeler la sous-procédure - elle ne sert qu'à masquer la sous-procédure dans la fenêtre de macro.

Nous n'avons pas non plus besoin de l'instruction Call - elle est là pour rendre le code plus facile à lire.

Le code pourrait également ressembler à ceci ci-dessous :

1234 Sous-appelBonjourFromPrivate()'appeler un sous-marin depuis un module privéBonjour le mondeFin du sous-marin

Nous pouvons également exécuter la procédure HelloWorld Sub en utilisant le VBA Application.Exécuter commander.

Dans le Module3 cependant, la procédure GoodMorningWorld a été déclarée Privée. Vous ne pouvez pas l'appeler à partir d'un autre module en utilisant « normal », c'est-à-dire l'instruction Call.

Vous devez utiliser Application.RunCommand pour exécuter un Private Sub à partir d'un autre module.

1234 Sous-appelBonjour()'exécuter un sous-marin privé à partir d'un module publicApplication.Run ("GoodMorningWorld")Fin du sous-marin

Remarquez le lorsque vous utilisez le Application.RunCommand commande, vous devez mettre le nom de la sous-procédure entre guillemets.

Si nous essayons d'utiliser l'instruction Call pour exécuter la sous-procédure GoodMorningWorld, une erreur se produira.

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave