Salut à tous.
Je vous demandais il y a quelques jours comment manipuler les plages nommées
comme si c'était des variables Range. J'ai trouvé une solution : j'ai fait
tout un tas de déclarations du type :
Public MaPlage1 as Range
Public MaPlage2 as Range
...
Puis dans une procédure, j'ai affecté mes variables :
Static Sub Affectation()
Set MaPlage1 = Range ("MaPlage1")
...
End Sub
Et ça marche. Je peux faire référence à mes plages de manière plus claire
que, par exemple Range("MaPlage1").Rows(1)
Cale devient
MaPlage1.Rows(1)
C'est plus court et plus clair.
Néanmoins, j'ai encore un problème : comment faire qu'il ne soit pas
nécessaire de réaffecter les variables à chaque lancement du programme :
quand mon prog sera fini, il suffira de faire appel une fois à ma sub
Affectation() au lancement, mais pour l'instant, je débugue, et chaque fois
que le prog s'interrompt, je dois relancer Affectation().
Y a-t-il un moyen pour que ces affectations soient "intrinsèques" ?
J'ai essayé
Public Const MaPlage as Variant = Range("MaPlage")
Mais ça ne marche pas.
Il faut peut-être traiter cela comme une macro complémentaire, mais je ne
sais pas comment.
Merci de vos réponses.
--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!
Bonjour, une lecture qui ne manquera pas de t'interesser : http://longre.free.fr/pages/prog/hnamespace.htm
;-))) @+
-----Message d'origine----- Salut à tous. Je vous demandais il y a quelques jours comment manipuler les plages nommées
comme si c'était des variables Range. J'ai trouvé une solution : j'ai fait
tout un tas de déclarations du type : Public MaPlage1 as Range Public MaPlage2 as Range ....
Puis dans une procédure, j'ai affecté mes variables :
Static Sub Affectation() Set MaPlage1 = Range ("MaPlage1") ....
End Sub
Et ça marche. Je peux faire référence à mes plages de manière plus claire
que, par exemple Range("MaPlage1").Rows(1) Cale devient MaPlage1.Rows(1)
C'est plus court et plus clair. Néanmoins, j'ai encore un problème : comment faire qu'il ne soit pas
nécessaire de réaffecter les variables à chaque lancement du programme :
quand mon prog sera fini, il suffira de faire appel une fois à ma sub
Affectation() au lancement, mais pour l'instant, je débugue, et chaque fois
que le prog s'interrompt, je dois relancer Affectation ().
Y a-t-il un moyen pour que ces affectations soient "intrinsèques" ?
J'ai essayé Public Const MaPlage as Variant = Range("MaPlage") Mais ça ne marche pas.
Il faut peut-être traiter cela comme une macro complémentaire, mais je ne
sais pas comment.
Merci de vos réponses.
-- Carpe Diem Quam Minimum Credula Postera Bicose Sic Transit Gloria Mundi, et Arx Tarpeia Capitoli Proxima !!
.
Gadget
C'est effectivement interessant et cela me servira probablement pour d'autres raisons, mais mon prob actuel, c'est non pas que le nom de ma plage ne soit pas volatil, mais la variable que j'ai définie à partir de cette plage nommée. Y a-t-il moyen d'écrire une macro dont les "effets" restent valables pendant toute la cession excel ?
-- -- Carpe Diem Quam Minimum Credula Postera Bicose Sic Transit Gloria Mundi, et Arx Tarpeia Capitoli Proxima !! "Modeste" a écrit dans le message de news:178201c426c8$2e43da90$ Bonjour, une lecture qui ne manquera pas de t'interesser : http://longre.free.fr/pages/prog/hnamespace.htm
;-))) @+
-----Message d'origine----- Salut à tous. Je vous demandais il y a quelques jours comment manipuler les plages nommées
comme si c'était des variables Range. J'ai trouvé une solution : j'ai fait
tout un tas de déclarations du type : Public MaPlage1 as Range Public MaPlage2 as Range ....
Puis dans une procédure, j'ai affecté mes variables :
Static Sub Affectation() Set MaPlage1 = Range ("MaPlage1") ....
End Sub
Et ça marche. Je peux faire référence à mes plages de manière plus claire
que, par exemple Range("MaPlage1").Rows(1) Cale devient MaPlage1.Rows(1)
C'est plus court et plus clair. Néanmoins, j'ai encore un problème : comment faire qu'il ne soit pas
nécessaire de réaffecter les variables à chaque lancement du programme :
quand mon prog sera fini, il suffira de faire appel une fois à ma sub
Affectation() au lancement, mais pour l'instant, je débugue, et chaque fois
que le prog s'interrompt, je dois relancer Affectation ().
Y a-t-il un moyen pour que ces affectations soient "intrinsèques" ?
J'ai essayé Public Const MaPlage as Variant = Range("MaPlage") Mais ça ne marche pas.
Il faut peut-être traiter cela comme une macro complémentaire, mais je ne
sais pas comment.
Merci de vos réponses.
-- Carpe Diem Quam Minimum Credula Postera Bicose Sic Transit Gloria Mundi, et Arx Tarpeia Capitoli Proxima !!
.
C'est effectivement interessant et cela me servira probablement pour
d'autres raisons, mais mon prob actuel, c'est non pas que le nom de ma plage
ne soit pas volatil, mais la variable que j'ai définie à partir de cette
plage nommée. Y a-t-il moyen d'écrire une macro dont les "effets" restent
valables pendant toute la cession excel ?
--
--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!
"Modeste" <Gee-dee-@discussions.microsoft.com> a écrit dans le message de
news:178201c426c8$2e43da90$a101280a@phx.gbl...
Bonjour,
une lecture qui ne manquera pas de t'interesser :
http://longre.free.fr/pages/prog/hnamespace.htm
;-)))
@+
-----Message d'origine-----
Salut à tous.
Je vous demandais il y a quelques jours comment
manipuler les plages nommées
comme si c'était des variables Range. J'ai trouvé une
solution : j'ai fait
tout un tas de déclarations du type :
Public MaPlage1 as Range
Public MaPlage2 as Range
....
Puis dans une procédure, j'ai affecté mes variables :
Static Sub Affectation()
Set MaPlage1 = Range ("MaPlage1")
....
End Sub
Et ça marche. Je peux faire référence à mes plages de
manière plus claire
que, par exemple Range("MaPlage1").Rows(1)
Cale devient
MaPlage1.Rows(1)
C'est plus court et plus clair.
Néanmoins, j'ai encore un problème : comment faire qu'il
ne soit pas
nécessaire de réaffecter les variables à chaque
lancement du programme :
quand mon prog sera fini, il suffira de faire appel une
fois à ma sub
Affectation() au lancement, mais pour l'instant, je
débugue, et chaque fois
que le prog s'interrompt, je dois relancer Affectation
().
Y a-t-il un moyen pour que ces affectations
soient "intrinsèques" ?
J'ai essayé
Public Const MaPlage as Variant = Range("MaPlage")
Mais ça ne marche pas.
Il faut peut-être traiter cela comme une macro
complémentaire, mais je ne
sais pas comment.
Merci de vos réponses.
--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!
C'est effectivement interessant et cela me servira probablement pour d'autres raisons, mais mon prob actuel, c'est non pas que le nom de ma plage ne soit pas volatil, mais la variable que j'ai définie à partir de cette plage nommée. Y a-t-il moyen d'écrire une macro dont les "effets" restent valables pendant toute la cession excel ?
-- -- Carpe Diem Quam Minimum Credula Postera Bicose Sic Transit Gloria Mundi, et Arx Tarpeia Capitoli Proxima !! "Modeste" a écrit dans le message de news:178201c426c8$2e43da90$ Bonjour, une lecture qui ne manquera pas de t'interesser : http://longre.free.fr/pages/prog/hnamespace.htm
;-))) @+
-----Message d'origine----- Salut à tous. Je vous demandais il y a quelques jours comment manipuler les plages nommées
comme si c'était des variables Range. J'ai trouvé une solution : j'ai fait
tout un tas de déclarations du type : Public MaPlage1 as Range Public MaPlage2 as Range ....
Puis dans une procédure, j'ai affecté mes variables :
Static Sub Affectation() Set MaPlage1 = Range ("MaPlage1") ....
End Sub
Et ça marche. Je peux faire référence à mes plages de manière plus claire
que, par exemple Range("MaPlage1").Rows(1) Cale devient MaPlage1.Rows(1)
C'est plus court et plus clair. Néanmoins, j'ai encore un problème : comment faire qu'il ne soit pas
nécessaire de réaffecter les variables à chaque lancement du programme :
quand mon prog sera fini, il suffira de faire appel une fois à ma sub
Affectation() au lancement, mais pour l'instant, je débugue, et chaque fois
que le prog s'interrompt, je dois relancer Affectation ().
Y a-t-il un moyen pour que ces affectations soient "intrinsèques" ?
J'ai essayé Public Const MaPlage as Variant = Range("MaPlage") Mais ça ne marche pas.
Il faut peut-être traiter cela comme une macro complémentaire, mais je ne
sais pas comment.
Merci de vos réponses.
-- Carpe Diem Quam Minimum Credula Postera Bicose Sic Transit Gloria Mundi, et Arx Tarpeia Capitoli Proxima !!
.
Benead
Salut Gadget,
En principe, et sauf erreur, les variables déclarées en début de module standard en tant que "Public", ne se réinitialisent pas lorsque la procédure est finie. Par contre, mieux vaut fermer VBA.
Tiré de l'aide : ' ******************** Remarques Les variables déclarées avec l'instruction Public sont accessibles à toutes les procédures, dans l'ensemble des modules de toutes les applications, à moins que Option Private Module ne soit activé. Dans ce cas, les variables ne sont publiques qu'au sein du projet qui les accueille. ' ********************
Pour exemple dans module1 tu mets ce code :
' ******************** Public Maplage As Range
Sub Test1() Set Maplage = ActiveSheet.Range("A1:A15") End Sub ' ********************
Et dans Module2 tu mets :
' ******************** Option Explicit
Sub Test2() If Maplage Is Nothing Then MsgBox "La variable Maplage est réinitialisée !!!" Else MsgBox Maplage.Address End If End Sub ' ********************
Si tu fermes VBA et que tu lances Test1 puis Test2, tu t'apercevras que Maplage n'a pas été réinitialisée...
A+ Benead
Gadget a écrit:
C'est effectivement interessant et cela me servira probablement pour d'autres raisons, mais mon prob actuel, c'est non pas que le nom de ma plage ne soit pas volatil, mais la variable que j'ai définie à partir de cette plage nommée. Y a-t-il moyen d'écrire une macro dont les "effets" restent valables pendant toute la cession excel ?
Salut Gadget,
En principe, et sauf erreur, les variables déclarées en début de module standard en tant que "Public", ne se réinitialisent pas lorsque la procédure
est finie. Par contre, mieux vaut fermer VBA.
Tiré de l'aide :
' ********************
Remarques
Les variables déclarées avec l'instruction Public sont accessibles à toutes les procédures, dans l'ensemble des modules de toutes les applications, à
moins que Option Private Module ne soit activé. Dans ce cas, les variables ne sont publiques qu'au sein du projet qui les accueille.
' ********************
Pour exemple dans module1 tu mets ce code :
' ********************
Public Maplage As Range
Sub Test1()
Set Maplage = ActiveSheet.Range("A1:A15")
End Sub
' ********************
Et dans Module2 tu mets :
' ********************
Option Explicit
Sub Test2()
If Maplage Is Nothing Then
MsgBox "La variable Maplage est réinitialisée !!!"
Else
MsgBox Maplage.Address
End If
End Sub
' ********************
Si tu fermes VBA et que tu lances Test1 puis Test2, tu t'apercevras que Maplage n'a pas été réinitialisée...
A+
Benead
Gadget a écrit:
C'est effectivement interessant et cela me servira probablement pour
d'autres raisons, mais mon prob actuel, c'est non pas que le nom de ma plage
ne soit pas volatil, mais la variable que j'ai définie à partir de cette
plage nommée. Y a-t-il moyen d'écrire une macro dont les "effets" restent
valables pendant toute la cession excel ?
En principe, et sauf erreur, les variables déclarées en début de module standard en tant que "Public", ne se réinitialisent pas lorsque la procédure est finie. Par contre, mieux vaut fermer VBA.
Tiré de l'aide : ' ******************** Remarques Les variables déclarées avec l'instruction Public sont accessibles à toutes les procédures, dans l'ensemble des modules de toutes les applications, à moins que Option Private Module ne soit activé. Dans ce cas, les variables ne sont publiques qu'au sein du projet qui les accueille. ' ********************
Pour exemple dans module1 tu mets ce code :
' ******************** Public Maplage As Range
Sub Test1() Set Maplage = ActiveSheet.Range("A1:A15") End Sub ' ********************
Et dans Module2 tu mets :
' ******************** Option Explicit
Sub Test2() If Maplage Is Nothing Then MsgBox "La variable Maplage est réinitialisée !!!" Else MsgBox Maplage.Address End If End Sub ' ********************
Si tu fermes VBA et que tu lances Test1 puis Test2, tu t'apercevras que Maplage n'a pas été réinitialisée...
A+ Benead
Gadget a écrit:
C'est effectivement interessant et cela me servira probablement pour d'autres raisons, mais mon prob actuel, c'est non pas que le nom de ma plage ne soit pas volatil, mais la variable que j'ai définie à partir de cette plage nommée. Y a-t-il moyen d'écrire une macro dont les "effets" restent valables pendant toute la cession excel ?
Gadget
Merci Benead, mais ce n'est pas tout à fait ce que je recherche : j'aimerais que la valeur de MaPlage soit intrinsèque au projet en cours, c'est à dire qu'il ne soit pas nécessaire de lancer la proc Test1(). en fait j'aimerais que MaPlage "fasse partie des meubles" avec sa valeur, comme si je déclarais une constante :
Public Const MaPlage as Range = Range("PlageNommée")
mais cette déclaration ne fonctionne pas. Peut-être faut-il créer quelque chose comme une bibliothèque, mais je ne sais pas le faire. Ou peut-être avec un module de classe ?
-- -- Carpe Diem Quam Minimum Credula Postera Bicose Sic Transit Gloria Mundi, et Arx Tarpeia Capitoli Proxima !! "Benead" a écrit dans le message de news:
Salut Gadget,
En principe, et sauf erreur, les variables déclarées en début de module standard en tant que "Public", ne se réinitialisent pas lorsque la procédure
est finie. Par contre, mieux vaut fermer VBA.
Tiré de l'aide : ' ******************** Remarques Les variables déclarées avec l'instruction Public sont accessibles à toutes les procédures, dans l'ensemble des modules de toutes les
applications, à
moins que Option Private Module ne soit activé. Dans ce cas, les variables ne sont publiques qu'au sein du projet qui les accueille.
' ********************
Pour exemple dans module1 tu mets ce code :
' ******************** Public Maplage As Range
Sub Test1() Set Maplage = ActiveSheet.Range("A1:A15") End Sub ' ********************
Et dans Module2 tu mets :
' ******************** Option Explicit
Sub Test2() If Maplage Is Nothing Then MsgBox "La variable Maplage est réinitialisée !!!" Else MsgBox Maplage.Address End If End Sub ' ********************
Si tu fermes VBA et que tu lances Test1 puis Test2, tu t'apercevras que Maplage n'a pas été réinitialisée...
A+ Benead
Merci Benead, mais ce n'est pas tout à fait ce que je recherche : j'aimerais
que la valeur de MaPlage soit intrinsèque au projet en cours, c'est à dire
qu'il ne soit pas nécessaire de lancer la proc Test1(). en fait j'aimerais
que MaPlage "fasse partie des meubles" avec sa valeur, comme si je déclarais
une constante :
Public Const MaPlage as Range = Range("PlageNommée")
mais cette déclaration ne fonctionne pas.
Peut-être faut-il créer quelque chose comme une bibliothèque, mais je ne
sais pas le faire. Ou peut-être avec un module de classe ?
--
--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!
"Benead" <NoSpam-Benead.forumxl@club-internet.fr> a écrit dans le message de
news:40859EDA.3060609@club-internet.fr...
Salut Gadget,
En principe, et sauf erreur, les variables déclarées en début de module
standard en tant que "Public", ne se réinitialisent pas lorsque la procédure
est finie. Par contre, mieux vaut fermer VBA.
Tiré de l'aide :
' ********************
Remarques
Les variables déclarées avec l'instruction Public sont accessibles à
toutes les procédures, dans l'ensemble des modules de toutes les
applications, à
moins que Option Private Module ne soit activé. Dans ce cas, les variables
ne sont publiques qu'au sein du projet qui les accueille.
' ********************
Pour exemple dans module1 tu mets ce code :
' ********************
Public Maplage As Range
Sub Test1()
Set Maplage = ActiveSheet.Range("A1:A15")
End Sub
' ********************
Et dans Module2 tu mets :
' ********************
Option Explicit
Sub Test2()
If Maplage Is Nothing Then
MsgBox "La variable Maplage est réinitialisée !!!"
Else
MsgBox Maplage.Address
End If
End Sub
' ********************
Si tu fermes VBA et que tu lances Test1 puis Test2, tu t'apercevras que
Maplage n'a pas été réinitialisée...
Merci Benead, mais ce n'est pas tout à fait ce que je recherche : j'aimerais que la valeur de MaPlage soit intrinsèque au projet en cours, c'est à dire qu'il ne soit pas nécessaire de lancer la proc Test1(). en fait j'aimerais que MaPlage "fasse partie des meubles" avec sa valeur, comme si je déclarais une constante :
Public Const MaPlage as Range = Range("PlageNommée")
mais cette déclaration ne fonctionne pas. Peut-être faut-il créer quelque chose comme une bibliothèque, mais je ne sais pas le faire. Ou peut-être avec un module de classe ?
-- -- Carpe Diem Quam Minimum Credula Postera Bicose Sic Transit Gloria Mundi, et Arx Tarpeia Capitoli Proxima !! "Benead" a écrit dans le message de news:
Salut Gadget,
En principe, et sauf erreur, les variables déclarées en début de module standard en tant que "Public", ne se réinitialisent pas lorsque la procédure
est finie. Par contre, mieux vaut fermer VBA.
Tiré de l'aide : ' ******************** Remarques Les variables déclarées avec l'instruction Public sont accessibles à toutes les procédures, dans l'ensemble des modules de toutes les
applications, à
moins que Option Private Module ne soit activé. Dans ce cas, les variables ne sont publiques qu'au sein du projet qui les accueille.
' ********************
Pour exemple dans module1 tu mets ce code :
' ******************** Public Maplage As Range
Sub Test1() Set Maplage = ActiveSheet.Range("A1:A15") End Sub ' ********************
Et dans Module2 tu mets :
' ******************** Option Explicit
Sub Test2() If Maplage Is Nothing Then MsgBox "La variable Maplage est réinitialisée !!!" Else MsgBox Maplage.Address End If End Sub ' ********************
Si tu fermes VBA et que tu lances Test1 puis Test2, tu t'apercevras que Maplage n'a pas été réinitialisée...
A+ Benead
Bonjour Benoït, peut-etre voir du coté de : Public Property Set ???? @+
-----Message d'origine----- Merci Benead, mais ce n'est pas tout à fait ce que je recherche : j'aimerais
que la valeur de MaPlage soit intrinsèque au projet en cours, c'est à dire
qu'il ne soit pas nécessaire de lancer la proc Test1(). en fait j'aimerais
que MaPlage "fasse partie des meubles" avec sa valeur, comme si je déclarais
une constante :
Public Const MaPlage as Range = Range("PlageNommée")
mais cette déclaration ne fonctionne pas. Peut-être faut-il créer quelque chose comme une bibliothèque, mais je ne
sais pas le faire. Ou peut-être avec un module de classe ?
-- -- Carpe Diem Quam Minimum Credula Postera Bicose Sic Transit Gloria Mundi, et Arx Tarpeia Capitoli Proxima !! "Benead" a écrit dans le message de
news:
Salut Gadget,
En principe, et sauf erreur, les variables déclarées en début de module
standard en tant que "Public", ne se réinitialisent pas lorsque la procédure
est finie. Par contre, mieux vaut fermer VBA.
Tiré de l'aide : ' ******************** Remarques Les variables déclarées avec l'instruction Public sont accessibles à
toutes les procédures, dans l'ensemble des modules de toutes les
applications, à
moins que Option Private Module ne soit activé. Dans ce cas, les variables
ne sont publiques qu'au sein du projet qui les accueille.
' ********************
Pour exemple dans module1 tu mets ce code :
' ******************** Public Maplage As Range
Sub Test1() Set Maplage = ActiveSheet.Range("A1:A15") End Sub ' ********************
Et dans Module2 tu mets :
' ******************** Option Explicit
Sub Test2() If Maplage Is Nothing Then MsgBox "La variable Maplage est réinitialisée !!!"
Else MsgBox Maplage.Address End If End Sub ' ********************
Si tu fermes VBA et que tu lances Test1 puis Test2, tu t'apercevras que
Maplage n'a pas été réinitialisée...
A+ Benead
.
Bonjour Benoït,
peut-etre voir du coté de : Public Property Set
????
@+
-----Message d'origine-----
Merci Benead, mais ce n'est pas tout à fait ce que je
recherche : j'aimerais
que la valeur de MaPlage soit intrinsèque au projet en
cours, c'est à dire
qu'il ne soit pas nécessaire de lancer la proc Test1().
en fait j'aimerais
que MaPlage "fasse partie des meubles" avec sa valeur,
comme si je déclarais
une constante :
Public Const MaPlage as Range = Range("PlageNommée")
mais cette déclaration ne fonctionne pas.
Peut-être faut-il créer quelque chose comme une
bibliothèque, mais je ne
sais pas le faire. Ou peut-être avec un module de
classe ?
--
--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!
"Benead" <NoSpam-Benead.forumxl@club-internet.fr> a
écrit dans le message de
news:40859EDA.3060609@club-internet.fr...
Salut Gadget,
En principe, et sauf erreur, les variables déclarées
en début de module
standard en tant que "Public", ne se réinitialisent pas
lorsque la procédure
est finie. Par contre, mieux vaut fermer VBA.
Tiré de l'aide :
' ********************
Remarques
Les variables déclarées avec l'instruction Public sont
accessibles à
toutes les procédures, dans l'ensemble des modules de
toutes les
applications, à
moins que Option Private Module ne soit activé. Dans
ce cas, les variables
ne sont publiques qu'au sein du projet qui les accueille.
' ********************
Pour exemple dans module1 tu mets ce code :
' ********************
Public Maplage As Range
Sub Test1()
Set Maplage = ActiveSheet.Range("A1:A15")
End Sub
' ********************
Et dans Module2 tu mets :
' ********************
Option Explicit
Sub Test2()
If Maplage Is Nothing Then
MsgBox "La variable Maplage est
réinitialisée !!!"
Else
MsgBox Maplage.Address
End If
End Sub
' ********************
Si tu fermes VBA et que tu lances Test1 puis Test2, tu
t'apercevras que