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.
| 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.
| 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.
| 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.
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
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.
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.