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

Réinitialiser une variable static / pb de portée

4 réponses
Avatar
leoxnet
Bonjour,

Je cherche =C3=A0 r=C3=A9initialiser une variable static dans une proc=C3=
=A9dure XX,
en sachant que cette variable n=E2=80=99est pas utilis=C3=A9e dans la proc=
=C3=A9dure xx,
mais dans une autre fonction inconnue de XX).

Ci-joint mon probl=C3=A8me

Afin de faire une analyse abc (pareto), je dois calculer la valeur
cumul=C3=A9e d=E2=80=99un champ ( valeur cumul=C3=A9e n =3D valeur n + val=
eur cumul=C3=A9e
n-1).

J=E2=80=99ai donc =C3=A9crit une petite fonction vba en utilisant une varia=
ble
static

Public Function cumul_ventes(ventes) As Long
Static cum_ventes
=E2=80=98cum_ventes : valeur cumul=C3=A9e
=E2=80=98 ventes : valeur que je vais additionner =C3=A0 cum_ventes pour ca=
lculer
ma nouvelle valeur cumul=C3=A9e
If IsNull(cum_ventes) Then
cum_ventes =3D ventes
Else

=E2=80=98gestion des ventes qui ne sont pas renseign=C3=A9es=E2=80=99
If ventes <> "" Then
cum_ventes =3D cum_ventes + ventes
Else: cum_ventes =3D cum_ventes + 0
End If

End If

cumul_ventes =3D cum_ventes
End Function

J=E2=80=99appelle cette fonction dans une requ=C3=AAte mise =C3=A0 jour et =
en avant le
calcul pour le pareto. L=E2=80=99op=C3=A9ration fonctionne tr=C3=A8s bien (=
la fonction
s=E2=80=99ex=C3=A9cute donc autant de fois qu=E2=80=99il y=E2=80=99a d=E2=
=80=99enregistrement =C3=A0 mettre =C3=A0
jour). Sauf que la variable static qui me permet de m=C3=A9moriser la
valeur cumul=C3=A9e entre 2 appels de fonctions m=E2=80=99emp=C3=AAche de c=
alculer 2
Pareto de mani=C3=A8re cons=C3=A9cutive sans red=C3=A9marrer Access.

Or j=E2=80=99ai besoin de calculer mon pareto une cinquantaine de fois avec
des param=C3=A8tres diff=C3=A9rents. J=E2=80=99avais pr=C3=A9vu d=E2=80=99a=
utomatiser tout =C3=A7a en vba,
mais je bloque sur la variable static car je n=E2=80=99arrive pas =C3=A0 la
r=C3=A9initialiser dans une autre proc=C3=A9dure (je pense que j=E2=80=99ai=
un =C2=AB
probl=C3=A8me de port=C3=A9e =C2=BB =EF=83=A0 ma variable static n=E2=80=99=
est connu que de ma
fonction, quand j=E2=80=99interroge sa valeur dans une autre proc=C3=A9dure=
j=E2=80=99ai
une valeur nulle). J=E2=80=99ai un peu tout essay=C3=A9 mais pas moyen, sauf
red=C3=A9marrer access =C3=A0 chaque coup.


Pour =C3=AAtre plus clair, ma proc=C3=A9dure finale (pour automatiser les =
50
calculs de ma classe ABC) devait ressembler =C3=A0 =C3=A7a
Sub automatisation()
=E2=80=981) cr=C3=A9ation d=E2=80=99un recordet =C3=A0 partir d=E2=80=99un=
e table param=C3=A8tre, me
permettant de r=C3=A9cup=C3=A9rer mes param=C3=A8tres pour le calcul des ve=
ntes

=E2=80=A6. /=E2=80=A6

=E2=80=982. je calcul mon fichier ventes en tenant compte des param=C3=A8tr=
es de
l=E2=80=99=C3=A9tape 1. Ceci se fait =C3=A0 travers plusieurs requ=C3=AAtes=
(extraction d=E2=80=99une
base centrale, cr=C3=A9ation d=E2=80=99une table sur laquelle j=E2=80=99eff=
ectuerais mon
calcul de cumul)

3=2E Calcul de ma classe abc via la fonction cumul ventes (la fonction
cumul_ventes est appel=C3=A9e par la requ=C3=AAte mise =C3=A0 jour, pas par=
le module
automatisation, donc pas de possibilit=C3=A9 de transf=C3=A9rer la valeur
cumul=C3=A9e).
Stockage du r=C3=A9sultat agr=C3=A9g=C3=A9 dans une table r=C3=A9sultat
Reinitialiser ma variable static

4=2E Red=C3=A9marrer =C3=A0 l=E2=80=99=C3=A9tape 2 avec un autre param=C3=
=A8tre

End sub()



Si vous avez des id=C3=A9es =E2=80=A6

4 réponses

Avatar
Pierre CFI [mvp]
bonjour
si tu déclares un flag boleen en public
dans un sub d'initialisation tu passes ce flag à True et tu appelle ta
fonction
public flag as boleen
sub init
dim x as long
flag = true
x=cumul_ventes(ventes,flag)
end sub

Public Function cumul_ventes(ventes,EtatFlag) As Long

if Etatflag then
'initialise ta var static

evidement quand tu appelles cette function d'ailleurs, le param étatflag est
false


--
Pierre
MVP Access
***************************************
Conseils MPFA: http://www.mpfa.info/
*********************************************************
"leoxnet" a écrit dans le message de news:

Bonjour,

Je cherche à réinitialiser une variable static dans une procédure XX,
en sachant que cette variable n'est pas utilisée dans la procédure xx,
mais dans une autre fonction inconnue de XX).

Ci-joint mon problème

Afin de faire une analyse abc (pareto), je dois calculer la valeur
cumulée d'un champ ( valeur cumulée n = valeur n + valeur cumulée
n-1).

J'ai donc écrit une petite fonction vba en utilisant une variable
static

Public Function cumul_ventes(ventes) As Long
Static cum_ventes
'cum_ventes : valeur cumulée
' ventes : valeur que je vais additionner à cum_ventes pour calculer
ma nouvelle valeur cumulée
If IsNull(cum_ventes) Then
cum_ventes = ventes
Else

'gestion des ventes qui ne sont pas renseignées'
If ventes <> "" Then
cum_ventes = cum_ventes + ventes
Else: cum_ventes = cum_ventes + 0
End If

End If

cumul_ventes = cum_ventes
End Function

J'appelle cette fonction dans une requête mise à jour et en avant le
calcul pour le pareto. L'opération fonctionne très bien (la fonction
s'exécute donc autant de fois qu'il y'a d'enregistrement à mettre à
jour). Sauf que la variable static qui me permet de mémoriser la
valeur cumulée entre 2 appels de fonctions m'empêche de calculer 2
Pareto de manière consécutive sans redémarrer Access.

Or j'ai besoin de calculer mon pareto une cinquantaine de fois avec
des paramètres différents. J'avais prévu d'automatiser tout ça en vba,
mais je bloque sur la variable static car je n'arrive pas à la
réinitialiser dans une autre procédure (je pense que j'ai un «
problème de portée » ? ma variable static n'est connu que de ma
fonction, quand j'interroge sa valeur dans une autre procédure j'ai
une valeur nulle). J'ai un peu tout essayé mais pas moyen, sauf
redémarrer access à chaque coup.


Pour être plus clair, ma procédure finale (pour automatiser les 50
calculs de ma classe ABC) devait ressembler à ça
Sub automatisation()
'1) création d'un recordet à partir d'une table paramètre, me
permettant de récupérer mes paramètres pour le calcul des ventes

.. /.

'2. je calcul mon fichier ventes en tenant compte des paramètres de
l'étape 1. Ceci se fait à travers plusieurs requêtes (extraction d'une
base centrale, création d'une table sur laquelle j'effectuerais mon
calcul de cumul)

3. Calcul de ma classe abc via la fonction cumul ventes (la fonction
cumul_ventes est appelée par la requête mise à jour, pas par le module
automatisation, donc pas de possibilité de transférer la valeur
cumulée).
Stockage du résultat agrégé dans une table résultat
Reinitialiser ma variable static

4. Redémarrer à l'étape 2 avec un autre paramètre

End sub()



Si vous avez des idées .
Avatar
Jessy Sempere
J'aime beaucoup le "boleen", biensûr on a tous noté que c'était : Boolean ;-))

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



bonjour
si tu déclares un flag boleen en public
dans un sub d'initialisation tu passes ce flag à True et tu appelle ta
fonction
public flag as boleen
sub init
dim x as long
flag = true
x=cumul_ventes(ventes,flag)
end sub

Public Function cumul_ventes(ventes,EtatFlag) As Long

if Etatflag then
'initialise ta var static

evidement quand tu appelles cette function d'ailleurs, le param étatflag est
false


--
Pierre
MVP Access
***************************************
Conseils MPFA: http://www.mpfa.info/
*********************************************************
"leoxnet" a écrit dans le message de news:

Bonjour,

Je cherche à réinitialiser une variable static dans une procédure XX,
en sachant que cette variable n'est pas utilisée dans la procédure xx,
mais dans une autre fonction inconnue de XX).

Ci-joint mon problème

Afin de faire une analyse abc (pareto), je dois calculer la valeur
cumulée d'un champ ( valeur cumulée n = valeur n + valeur cumulée
n-1).

J'ai donc écrit une petite fonction vba en utilisant une variable
static

Public Function cumul_ventes(ventes) As Long
Static cum_ventes
'cum_ventes : valeur cumulée
' ventes : valeur que je vais additionner à cum_ventes pour calculer
ma nouvelle valeur cumulée
If IsNull(cum_ventes) Then
cum_ventes = ventes
Else

'gestion des ventes qui ne sont pas renseignées'
If ventes <> "" Then
cum_ventes = cum_ventes + ventes
Else: cum_ventes = cum_ventes + 0
End If

End If

cumul_ventes = cum_ventes
End Function

J'appelle cette fonction dans une requête mise à jour et en avant le
calcul pour le pareto. L'opération fonctionne très bien (la fonction
s'exécute donc autant de fois qu'il y'a d'enregistrement à mettre à
jour). Sauf que la variable static qui me permet de mémoriser la
valeur cumulée entre 2 appels de fonctions m'empêche de calculer 2
Pareto de manière consécutive sans redémarrer Access.

Or j'ai besoin de calculer mon pareto une cinquantaine de fois avec
des paramètres différents. J'avais prévu d'automatiser tout ça en vba,
mais je bloque sur la variable static car je n'arrive pas à la
réinitialiser dans une autre procédure (je pense que j'ai un «
problème de portée » ? ma variable static n'est connu que de ma
fonction, quand j'interroge sa valeur dans une autre procédure j'ai
une valeur nulle). J'ai un peu tout essayé mais pas moyen, sauf
redémarrer access à chaque coup.


Pour être plus clair, ma procédure finale (pour automatiser les 50
calculs de ma classe ABC) devait ressembler à ça
Sub automatisation()
'1) création d'un recordet à partir d'une table paramètre, me
permettant de récupérer mes paramètres pour le calcul des ventes

... /.

'2. je calcul mon fichier ventes en tenant compte des paramètres de
l'étape 1. Ceci se fait à travers plusieurs requêtes (extraction d'une
base centrale, création d'une table sur laquelle j'effectuerais mon
calcul de cumul)

3. Calcul de ma classe abc via la fonction cumul ventes (la fonction
cumul_ventes est appelée par la requête mise à jour, pas par le module
automatisation, donc pas de possibilité de transférer la valeur
cumulée).
Stockage du résultat agrégé dans une table résultat
Reinitialiser ma variable static

4. Redémarrer à l'étape 2 avec un autre paramètre

End sub()



Si vous avez des idées .





Avatar
Pierre CFI [mvp]
au moins 1 qui suit :o)) par contre la puissance du raisonnemnt t'as
complétement echappé

--
Pierre
MVP Access
***************************************
Conseils MPFA: http://www.mpfa.info/
*********************************************************
"Jessy Sempere" a écrit dans le message de news:

J'aime beaucoup le "boleen", biensûr on a tous noté que c'était : Boolean
;-))

@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



bonjour
si tu déclares un flag boleen en public
dans un sub d'initialisation tu passes ce flag à True et tu appelle ta
fonction
public flag as boleen
sub init
dim x as long
flag = true
x=cumul_ventes(ventes,flag)
end sub

Public Function cumul_ventes(ventes,EtatFlag) As Long

if Etatflag then
'initialise ta var static

evidement quand tu appelles cette function d'ailleurs, le param étatflag
est
false


--
Pierre
MVP Access
***************************************
Conseils MPFA: http://www.mpfa.info/
*********************************************************
"leoxnet" a écrit dans le message de news:

Bonjour,

Je cherche à réinitialiser une variable static dans une procédure XX,
en sachant que cette variable n'est pas utilisée dans la procédure xx,
mais dans une autre fonction inconnue de XX).

Ci-joint mon problème

Afin de faire une analyse abc (pareto), je dois calculer la valeur
cumulée d'un champ ( valeur cumulée n = valeur n + valeur cumulée
n-1).

J'ai donc écrit une petite fonction vba en utilisant une variable
static

Public Function cumul_ventes(ventes) As Long
Static cum_ventes
'cum_ventes : valeur cumulée
' ventes : valeur que je vais additionner à cum_ventes pour calculer
ma nouvelle valeur cumulée
If IsNull(cum_ventes) Then
cum_ventes = ventes
Else

'gestion des ventes qui ne sont pas renseignées'
If ventes <> "" Then
cum_ventes = cum_ventes + ventes
Else: cum_ventes = cum_ventes + 0
End If

End If

cumul_ventes = cum_ventes
End Function

J'appelle cette fonction dans une requête mise à jour et en avant le
calcul pour le pareto. L'opération fonctionne très bien (la fonction
s'exécute donc autant de fois qu'il y'a d'enregistrement à mettre à
jour). Sauf que la variable static qui me permet de mémoriser la
valeur cumulée entre 2 appels de fonctions m'empêche de calculer 2
Pareto de manière consécutive sans redémarrer Access.

Or j'ai besoin de calculer mon pareto une cinquantaine de fois avec
des paramètres différents. J'avais prévu d'automatiser tout ça en vba,
mais je bloque sur la variable static car je n'arrive pas à la
réinitialiser dans une autre procédure (je pense que j'ai un «
problème de portée » ? ma variable static n'est connu que de ma
fonction, quand j'interroge sa valeur dans une autre procédure j'ai
une valeur nulle). J'ai un peu tout essayé mais pas moyen, sauf
redémarrer access à chaque coup.


Pour être plus clair, ma procédure finale (pour automatiser les 50
calculs de ma classe ABC) devait ressembler à ça
Sub automatisation()
'1) création d'un recordet à partir d'une table paramètre, me
permettant de récupérer mes paramètres pour le calcul des ventes

... /.

'2. je calcul mon fichier ventes en tenant compte des paramètres de
l'étape 1. Ceci se fait à travers plusieurs requêtes (extraction d'une
base centrale, création d'une table sur laquelle j'effectuerais mon
calcul de cumul)

3. Calcul de ma classe abc via la fonction cumul ventes (la fonction
cumul_ventes est appelée par la requête mise à jour, pas par le module
automatisation, donc pas de possibilité de transférer la valeur
cumulée).
Stockage du résultat agrégé dans une table résultat
Reinitialiser ma variable static

4. Redémarrer à l'étape 2 avec un autre paramètre

End sub()



Si vous avez des idées .







Avatar
leoxnet
On 17 août, 11:18, "Pierre CFI [mvp]"
wrote:
au moins 1 qui suit :o)) par contre la puissance du raisonnemnt t'as
complétement echappé

--
Pierre
MVP Access
***************************************
Conseils MPFA:http://www.mpfa.info/
*********************************************************
"Jessy Sempere" a écrit dans le message de news:




J'aime beaucoup le "boleen", biensûr on a tous noté que c'était : Boolean
;-))

@+
Jessy Sempere
------------------------------------
Site @ccess :http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



bonjour
si tu déclares un flag boleen en public
dans un sub d'initialisation tu passes ce flag à True et tu appelle ta
fonction
public flag as boleen
sub init
dim x as long
flag = true
x=cumul_ventes(ventes,flag)
end sub

Public Function cumul_ventes(ventes,EtatFlag) As Long

if Etatflag then
'initialise ta var static

evidement quand tu appelles cette function d'ailleurs, le param état flag
est
false

--
Pierre
MVP Access
***************************************
Conseils MPFA:http://www.mpfa.info/
*********************************************************
"leoxnet" a écrit dans le message de news:

Bonjour,

Je cherche à réinitialiser une variable static dans une procédur e XX,
en sachant que cette variable n'est pas utilisée dans la procédure xx,
mais dans une autre fonction inconnue de XX).

Ci-joint mon problème

Afin de faire une analyse abc (pareto), je dois calculer la valeur
cumulée d'un champ ( valeur cumulée n = valeur n + valeur cumul ée
n-1).

J'ai donc écrit une petite fonction vba en utilisant une variable
static

Public Function cumul_ventes(ventes) As Long
Static cum_ventes
'cum_ventes : valeur cumulée
' ventes : valeur que je vais additionner à cum_ventes pour calculer
ma nouvelle valeur cumulée
If IsNull(cum_ventes) Then
cum_ventes = ventes
Else

'gestion des ventes qui ne sont pas renseignées'
If ventes <> "" Then
cum_ventes = cum_ventes + ventes
Else: cum_ventes = cum_ventes + 0
End If

End If

cumul_ventes = cum_ventes
End Function

J'appelle cette fonction dans une requête mise à jour et en avant le
calcul pour le pareto. L'opération fonctionne très bien (la foncti on
s'exécute donc autant de fois qu'il y'a d'enregistrement à mettre à
jour). Sauf que la variable static qui me permet de mémoriser la
valeur cumulée entre 2 appels de fonctions m'empêche de calculer 2
Pareto de manière consécutive sans redémarrer Access.

Or j'ai besoin de calculer mon pareto une cinquantaine de fois avec
des paramètres différents. J'avais prévu d'automatiser tout ça en vba,
mais je bloque sur la variable static car je n'arrive pas à la
réinitialiser dans une autre procédure (je pense que j'ai un «
problème de portée » ? ma variable static n'est connu que de ma
fonction, quand j'interroge sa valeur dans une autre procédure j'ai
une valeur nulle). J'ai un peu tout essayé mais pas moyen, sauf
redémarrer access à chaque coup.

Pour être plus clair, ma procédure finale (pour automatiser les 50
calculs de ma classe ABC) devait ressembler à ça
Sub automatisation()
'1) création d'un recordet à partir d'une table paramètre, me
permettant de récupérer mes paramètres pour le calcul des ventes

... /.

'2. je calcul mon fichier ventes en tenant compte des paramètres de
l'étape 1. Ceci se fait à travers plusieurs requêtes (extraction d'une
base centrale, création d'une table sur laquelle j'effectuerais mon
calcul de cumul)

3. Calcul de ma classe abc via la fonction cumul ventes (la fonction
cumul_ventes est appelée par la requête mise à jour, pas par le module
automatisation, donc pas de possibilité de transférer la valeur
cumulée).
Stockage du résultat agrégé dans une table résultat
Reinitialiser ma variable static

4. Redémarrer à l'étape 2 avec un autre paramètre

End sub()

Si vous avez des idées .- Masquer le texte des messages précéden ts -



- Afficher le texte des messages précédents -


Bonjour,


Je viens d'essayer et ca marche trés bien.
Comme quoi avoir la tête dans le guidon n'aide pas à trouver des
solutions simples

Merci pour votre aide.