OVH Cloud OVH Cloud

affectation de variables une seule fois

7 réponses
Avatar
plexus
Bonjour,
J'ai regard=E9 dans la faq et cherch=E9 sur le forum mais aucune r=E9ponse
ne correspond =E0 ce que je cherche.

Y a t'il un equivalent de Public pour la d=E9claration de variables =E0
l'affectation de variables ?

bref je souhaiterai un moyen en vba d'affecter une seule fois les
donn=E9es d'une feuille =E0 des variables en dehors des proc=E9dures ou
fonction afin de les rendre disponible pour toutes les proc=E9dures ou
fonctions.

si en A1 j'ai une date de d=E9part que j'affecte =E0
date_d=E9part=3Dsheets(1).range("A1")
y a t'il un moyen pour effectuer cette op=E9ration qu'une seule fois, et
qu'=E0 chaque fois que dans une proc=E9dure ou fonction j'utilise
date_d=E9part d=E9clar=E9e en public dans mon module, cette variable soit
affect=E9e =E0 A1 ?
ou dois-je faire une proc=E9dure de d=E9claration de variables (une
globale ou une par variables?) et appeler cette ou ces proc=E9dures =E0
chaque fois dans les autres, serait-ce un gain de temsp et de
performances ?

La solution d'affecter mes variables dans workbook-open() ne ferait
elle pas que les initialiser ? le changement de valeur serait-il pris
en compte par la suite, et les affecter dans worksheet_change() ne
ralentirait pas trop le fichier ?

Merci et d=E9sol=E9 pour cette question basique

7 réponses

Avatar
Paul V
hello,

Je ne suis pas sur d'avoir bien compris tes explication ou certaines choses
me parraissent contradictoires ;-)
Comme :
j'affecte à date_départ=sheets(1).range("A1")
Plus loin:
cette variable soit affectée à A1

ceci étant dit et sauf erreur de ma part, Si tu déclare ta variable en
public dans un module dans la partie déclaration ('haut de page), et que tu
fais ton affectation en même temps, la portée de ta variable sera valable
pour toutes tes procédures.

HTH

Paul V

"plexus" a écrit dans le message de news:

Bonjour,
J'ai regardé dans la faq et cherché sur le forum mais aucune réponse
ne correspond à ce que je cherche.

Y a t'il un equivalent de Public pour la déclaration de variables à
l'affectation de variables ?

bref je souhaiterai un moyen en vba d'affecter une seule fois les
données d'une feuille à des variables en dehors des procédures ou
fonction afin de les rendre disponible pour toutes les procédures ou
fonctions.

si en A1 j'ai une date de départ que j'affecte à
date_départ=sheets(1).range("A1")
y a t'il un moyen pour effectuer cette opération qu'une seule fois, et
qu'à chaque fois que dans une procédure ou fonction j'utilise
date_départ déclarée en public dans mon module, cette variable soit
affectée à A1 ?
ou dois-je faire une procédure de déclaration de variables (une
globale ou une par variables?) et appeler cette ou ces procédures à
chaque fois dans les autres, serait-ce un gain de temsp et de
performances ?

La solution d'affecter mes variables dans workbook-open() ne ferait
elle pas que les initialiser ? le changement de valeur serait-il pris
en compte par la suite, et les affecter dans worksheet_change() ne
ralentirait pas trop le fichier ?

Merci et désolé pour cette question basique
Avatar
plexus
Bonjour Paul V,

le problème est que je ne peux pas effectuer d'affectation dans la
partie déclaration (enfin je ne sais pas comment faire)
si j'écris dans la partie décalaration de mon module :
public a as range
set a = sheets(1).range("a1")
cela me retourne une erreur de compilation : instruction incorrecte en
dehors d'une procédure.
d'où mon problème.

Mon idée de départ était de m'alléger la saisie de variables qui
ont toujours la même affectation. comme la fonction insérer, noms de
excel mais pour mon code vba.

merci de ton aide
Avatar
MichDenis
| equivalent de Public pour

Il existe une autre expression pour désigner une variable Public c'est Global

Ces 2 façons ont la même valeur, bien que l'expression Global n'est plus vraiment utilisée.
Public toto As String
Global toto As String

Pour qu'une variable soit Public ou Global, elle doit être déclarée dans le haut d'un
module Standard, d'ailleurs Global ne peut être utilisé dans un module de
classe que sont les modules "feuilles" d'un classeur.

Si on utilise Public pour définir une variable dans un module de classe,
l'expression définit une "propriété de l'objet" et non pas une variable.




"plexus" a écrit dans le message de news:

Bonjour,
J'ai regardé dans la faq et cherché sur le forum mais aucune réponse
ne correspond à ce que je cherche.

Y a t'il un equivalent de Public pour la déclaration de variables à
l'affectation de variables ?

bref je souhaiterai un moyen en vba d'affecter une seule fois les
données d'une feuille à des variables en dehors des procédures ou
fonction afin de les rendre disponible pour toutes les procédures ou
fonctions.

si en A1 j'ai une date de départ que j'affecte à
date_départ=sheets(1).range("A1")
y a t'il un moyen pour effectuer cette opération qu'une seule fois, et
qu'à chaque fois que dans une procédure ou fonction j'utilise
date_départ déclarée en public dans mon module, cette variable soit
affectée à A1 ?
ou dois-je faire une procédure de déclaration de variables (une
globale ou une par variables?) et appeler cette ou ces procédures à
chaque fois dans les autres, serait-ce un gain de temsp et de
performances ?

La solution d'affecter mes variables dans workbook-open() ne ferait
elle pas que les initialiser ? le changement de valeur serait-il pris
en compte par la suite, et les affecter dans worksheet_change() ne
ralentirait pas trop le fichier ?

Merci et désolé pour cette question basique
Avatar
MichDenis
Une variable Public lorsqu'elle a été déclarée se doit d'être
initialée à l'intérieur d'une procédure ou d'une fonction.

'Haut du module standard
Public A As range

'------------------------
Sub MaProc()

Set A = worksheets("Feuil1").Range("A1:A10")
' reste de ta procédure.

End Sub
'------------------------




"plexus" a écrit dans le message de news:

Bonjour Paul V,

le problème est que je ne peux pas effectuer d'affectation dans la
partie déclaration (enfin je ne sais pas comment faire)
si j'écris dans la partie décalaration de mon module :
public a as range
set a = sheets(1).range("a1")
cela me retourne une erreur de compilation : instruction incorrecte en
dehors d'une procédure.
d'où mon problème.

Mon idée de départ était de m'alléger la saisie de variables qui
ont toujours la même affectation. comme la fonction insérer, noms de
excel mais pour mon code vba.

merci de ton aide
Avatar
Paul V
hello à tous,

L'initialisation se fera dans ta premère procédure.
regharde ou elle se trouve et ajoute l'initialisation.

Pour plus de lisibilité tu peux la mettre dans une procédure spécifique dans
ton module et faire un call a partir de la procédure qui démarre ta macro.

HTH

Paul V

"plexus" a écrit dans le message de news:

Bonjour Paul V,

le problème est que je ne peux pas effectuer d'affectation dans la
partie déclaration (enfin je ne sais pas comment faire)
si j'écris dans la partie décalaration de mon module :
public a as range
set a = sheets(1).range("a1")
cela me retourne une erreur de compilation : instruction incorrecte en
dehors d'une procédure.
d'où mon problème.

Mon idée de départ était de m'alléger la saisie de variables qui
ont toujours la même affectation. comme la fonction insérer, noms de
excel mais pour mon code vba.

merci de ton aide
Avatar
plexus
Merci à tous pour ces précisions

Cela va rallonger considérablement mon code..... et je me demande
même si cela en vaut la peine. Il me serait peut-être plus simple de
traiter mes données avec les fonctions d'excel et ensuite d'en
attribuer certaines à des variables que de vouloir tout traiter par
vba.
mon but est de a partir d'une feuille qui sert de formulaire, exporter
cette feuille vers un autre classeur de liaison ou ses données seront
copiées afin qu'un troisième classeur puisse les traiter... et je me
disais qu'il me serait plus simple de déclarer et d'affecter une fois
pour toutes mes variables et de les récupérer dans les autres
classeurs.....
Avatar
Paul V
Quatre ou cinq lignes, c'est pas une très grande rallonge ;-)

A+

Paul V

"plexus" a écrit dans le message de news:

Merci à tous pour ces précisions

Cela va rallonger considérablement mon code..... et je me demande
même si cela en vaut la peine. Il me serait peut-être plus simple de
traiter mes données avec les fonctions d'excel et ensuite d'en
attribuer certaines à des variables que de vouloir tout traiter par
vba.
mon but est de a partir d'une feuille qui sert de formulaire, exporter
cette feuille vers un autre classeur de liaison ou ses données seront
copiées afin qu'un troisième classeur puisse les traiter... et je me
disais qu'il me serait plus simple de déclarer et d'affecter une fois
pour toutes mes variables et de les récupérer dans les autres
classeurs.....