Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Déclarations et affectations "inamovibles"

5 réponses
Avatar
Gadget
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 !!

5 réponses

Avatar
Modeste
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 !!


.



Avatar
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 !!


.



Avatar
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 ?



Avatar
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



Avatar
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




.