OVH Cloud OVH Cloud

Affectation de procédure VB à plusieurs boutons

12 réponses
Avatar
Merlan
Bonjour,

En l'état actuel de mes connaissances, il n'existe qu'une relation 1-1 entre bouton de barre d'outil et "macro", créée par la fonction 'affectation de macro'.

Je souhaite utiliser des procédures VBE comme sous-programmes communs à plusieurs autres. Ces sous programmes ne seraient affectés à aucun bouton, mais appelables par plusieurs Sub.
Je suppose qu'il faudrait aussi déclarer les variables communes en Public et non par Dim.

Pour être plus clair, je souhaite faire comme dans Access où l'on peut écrire du code "générique" dans Modules et du code spécifique attaché à plusieurs contrôles de formulaire par exemple.

Merci d'avance

2 réponses

1 2
Avatar
MichD
| Comment se fait-il que la déclaration de ces variables en Public (que j'ai
| essayée dans le prog appelant et/ou dans l'appelé) ne réponde pas au
besoin ?
| Public me semblait fait pour ça.

L'étendue d'une variable déclarée comme "Public" est limitée
à tous les modules du classeur, mais ne va pas au-delà.

Dans l'appel d'une fonction, tu peux passer le nombre
de paramètres que tu désires. Tu n'es pas limité à une ou
deux variables...

Il existe une autre technique qui a été développée par Laurent Longre
qui consiste à créer des "noms masqués". (ces noms masqués n'appartiennent)
à la collection "Names" (insertion / nom / définir).

Tous les noms masqués sont disponibles pour tous les classeurs ouverts.
Tu peux fermer tous les classeurs (sauf l'application Excel) et si tu ouvres
à nouveau un classeur, tu peux accéder encore à ces noms masqués. Leur
finalité se termine au moment où tu fermes Excel.

Pour définir un nom masqué, procède comme suit :
'------------------------------------
Sub AjoutVal()
Dim LaVar As String
LaVar = "Autre Nom"
Application.ExecuteExcel4Macro ("SET.NAME(""LaVal"",""" & LaVar & """)")
End Sub
'------------------------------------

Pour récupérer la valeur du "nom masqué" "LaVal" , tu utilises ceci:
'------------------------------------
ValNom = Application.ExecuteExcel4Macro("GET.NAME(""LaVal"")")
'------------------------------------

Une autre approche avec un classeur de macros personnelles, c'est que
tu peux utiliser une plage de cellules de ce dernier pour déposer la valeur
d'un certain nombre de variables et les récupérer dans n'importe quel
classeur ouvert.

Pour inscrire des valeurs dans le fichier de macros personnelles
Workbooks("Personal.xlsb").worksheets("Feuil1").range("A1") = MyVar

Pour récupérer cette valeur dans un autre classeur
MyVar = Workbooks("Personal.xlsb").worksheets("Feuil1").range("A1")

(ne pas oublier que tu peux stocker aussi temporairement ces données
dans une feuille que tu masques de ton classeur d'origine. Tu supprimes
cette feuille à la fermeture du classeur.


MichD
---------------------------------------------------------------
Avatar
merlan
Le mardi 27 Août 2013 à 21:08 par Merlan :
Bonjour,

En l'état actuel de mes connaissances, il n'existe qu'une relation 1-1
entre bouton de barre d'outil et "macro", créée par la
fonction 'affectation de macro'.

Je souhaite utiliser des procédures VBE comme sous-programmes communs
à plusieurs autres. Ces sous programmes ne seraient affectés
à aucun bouton, mais appelables par plusieurs Sub.
Je suppose qu'il faudrait aussi déclarer les variables communes en
Public et non par Dim.

Pour être plus clair, je souhaite faire comme dans Access où l'on
peut écrire du code "générique" dans Modules et
du code spécifique attaché à plusieurs contrôles de
formulaire par exemple.

Merci d'avance


J'ai tout compris

Je vais choisir la solution 2

Merci infiniment
1 2