OVH Cloud OVH Cloud

comment définir une constante tableau ??

7 réponses
Avatar
News Groups
Bonjour à tous,

Voilà, dans une fonction j'utilise un tableau avec des valeurs fixes :
°° Private Function MaFunction (MaVar1 as Integer,MaVar2 as Integer) as
Integer
°° Dim intMonTableau (0 To 1, 0 To 1) As Integer
°° intMonTableau (0, 0) = 0
°° intMonTableau (0, 1) = 0
°° intMonTableau (1, 0) = 1
°° intMonTableau (1, 1) = 2
°° MaFunction = intMonTableau (MaVar1 , MaVar2 )
°° End Function

Cette fonction est bien sûr appelée plusieurs fois
et donc la déclaration du tableau et l'affectation des valeurs se fait à
chaque appel de fonction.
Or comme ces valeurs sont figées, j'aimerai déclarer mon tableau au niveau
module
avec ses valeurs pour éviter que la déclaration et les affecations ne se
fasse inutilement à chaque appel.

Est - ce possible et si oui comment ??

Merci de votre aide,
Thierry.

7 réponses

Avatar
Ilan
Bonjour,
As-tu reellement besoin d'un tableau, les valeurs du tableau semble respecter
X = MaVar1 * (MaVar2 + 1)




Bonjour à tous,

Voilà, dans une fonction j'utilise un tableau avec des valeurs fixes :
°° Private Function MaFunction (MaVar1 as Integer,MaVar2 as Integer) as
Integer
°° Dim intMonTableau (0 To 1, 0 To 1) As Integer
°° intMonTableau (0, 0) = 0
°° intMonTableau (0, 1) = 0
°° intMonTableau (1, 0) = 1
°° intMonTableau (1, 1) = 2
°° MaFunction = intMonTableau (MaVar1 , MaVar2 )
°° End Function

Cette fonction est bien sûr appelée plusieurs fois
et donc la déclaration du tableau et l'affectation des valeurs se fait à
chaque appel de fonction.
Or comme ces valeurs sont figées, j'aimerai déclarer mon tableau au niveau
module
avec ses valeurs pour éviter que la déclaration et les affecations ne se
fasse inutilement à chaque appel.

Est - ce possible et si oui comment ??

Merci de votre aide,
Thierry.





Avatar
François Fuchs
lun. 18 oct. 2004 17:20:36 News Groups a écrit dans le message de news
<news:4173df88$0$25699$ :

Cette fonction est bien sûr appelée plusieurs fois
et donc la déclaration du tableau et l'affectation des valeurs se fait à
chaque appel de fonction.
Or comme ces valeurs sont figées, j'aimerai déclarer mon tableau au niveau
module
avec ses valeurs pour éviter que la déclaration et les affecations ne se
fasse inutilement à chaque appel.

Est - ce possible et si oui comment ??


Déclarez une classe. Si vous ne savez pas faire, je vous donne un exemple.

--
Pouet

Avatar
News Groups
Je veux bien un exemple effectivement,

Merci,
Thierry.

"François Fuchs" a écrit dans le message de news:

lun. 18 oct. 2004 17:20:36 News Groups a écrit dans le message de news
<news:4173df88$0$25699$ :

Cette fonction est bien sûr appelée plusieurs fois
et donc la déclaration du tableau et l'affectation des valeurs se fait à
chaque appel de fonction.
Or comme ces valeurs sont figées, j'aimerai déclarer mon tableau au
niveau


module
avec ses valeurs pour éviter que la déclaration et les affecations ne se
fasse inutilement à chaque appel.

Est - ce possible et si oui comment ??


Déclarez une classe. Si vous ne savez pas faire, je vous donne un exemple.

--
Pouet



Avatar
News Groups
Bonjour à tous,

François Fuchs à écrit : "..Déclarez une classe. Si vous ne savez pas
faire, je vous donne un exemple..."
N'ayant pas de réponse de la part de François,
je me permet de reposter ma demande au cas où
quelqu'un pourrais m'indiquer la façon de créer cette classe.

Merci encore,
Thierry.


"News Groups" a écrit dans le message de news:
4173df88$0$25699$
Bonjour à tous,

Voilà, dans une fonction j'utilise un tableau avec des valeurs fixes :
°° Private Function MaFunction (MaVar1 as Integer,MaVar2 as Integer) as
Integer



°° Dim intMonTableau (0 To 1, 0 To 1) As Integer
°° intMonTableau (0, 0) = 0
°° intMonTableau (0, 1) = 0
°° intMonTableau (1, 0) = 1
°° intMonTableau (1, 1) = 2
°° MaFunction = intMonTableau (MaVar1 , MaVar2 )
°° End Function

Cette fonction est bien sûr appelée plusieurs fois
et donc la déclaration du tableau et l'affectation des valeurs se fait à
chaque appel de fonction.
Or comme ces valeurs sont figées, j'aimerai déclarer mon tableau au
niveau



module
avec ses valeurs pour éviter que la déclaration et les affecations ne se
fasse inutilement à chaque appel.

Est - ce possible et si oui comment ??

Merci de votre aide,
Thierry.


Déclarez une classe. Si vous ne savez pas faire, je vous donne un exemple.
--
Pouet


Je veux bien un exemple effectivement,

Merci,
Thierry.




Avatar
Raymond [mvp]
Bonjour Thierry.

As-tu vraiment besoin d'un tableau pour caser 4 valeurs ? Ta fonction ne
charge que des constantes et tu es obligé de passer deux valeurs en
paramètres pour récupérer une seule valeur. Ou alors il y a un truc en
plusssssh ?

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"News Groups" a écrit dans le message de news:
41761051$0$29541$
Bonjour à tous,

François Fuchs à écrit : "..Déclarez une classe. Si vous ne savez pas
faire, je vous donne un exemple..."
N'ayant pas de réponse de la part de François,
je me permet de reposter ma demande au cas où
quelqu'un pourrais m'indiquer la façon de créer cette classe.

Merci encore,
Thierry.


Avatar
News Groups
En effet l'idée de base est d'utiliser un tableau de ce type
au lieu de définir un jeu d'instructions conditionnelles,
je m'explique :

les Variables MaVar1 et MaVar2 peuvent prendre les valeurs 1/0
et suivant la combinaison des deux un résulat est associé.
Ainsi ma fontion :
°° Private Function MaFunction (MaVar1 as Integer,MaVar2 as Integer) as
Integer
°° Dim intMonTableau (0 To 1, 0 To 1) As Integer
°° intMonTableau (0, 0) = 0
°° intMonTableau (0, 1) = 0
°° intMonTableau (1, 0) = 1
°° intMonTableau (1, 1) = 2
°° MaFunction = intMonTableau (MaVar1 , MaVar2 )
°° End Function

Peut aussi s'écrire (ce qui était le cas avant l'utilisation du tableau
précédent) :
°° Private Function MaFunction (MaVar1 as Integer,MaVar2 as Integer) as
Integer
°° Dim Resultat As Integer
°° If MaVar1 = 1 Then
°° If MaVar2 = 1 Then
°° Resultat = 2
°° Else
°° Resultat = 1
°° End If
°° Else
°° Resultat = 0
°° End If
°° MaFunction = Resultat
°° End Function

Le choix de l'utilisation d'un tableau est dû au fait que le choix des
valeurs de MaVar1 et MaVar2
peuvent évoluer et passer à 0/1/2/..
De même pour le résultat associé aux combinaisons, ainsi dans le temps le
tableau pourra prendre la forme de :
°° intMonTableau (0, 0) = 0
°° intMonTableau (0, 1) = 0
°° intMonTableau (1, 0) = 1
°° intMonTableau (1, 1) = 2
°° intMonTableau (2 0) = 1
°° intMonTableau (2 1) = 3.....
Or dans le cas d'instructions conditionnelles (If ou Select) j'ai peur que
cela devienne vite ingérable !

Deplus ces valeurs n'évolue pas en cours d'utilisation mais sont figée au
codage,
c'est pourquoi je voulai passer le tableau sous forme de constante.

Voilà, désolé pour la longueur des explications,
Peux tu me donner ton avis sur le principe et si il existe une autre méthode
plus adéquat ?

Merci encore,
Thierry.


"Raymond [mvp]" a écrit dans le message de
news: #
Bonjour Thierry.

As-tu vraiment besoin d'un tableau pour caser 4 valeurs ? Ta fonction ne
charge que des constantes et tu es obligé de passer deux valeurs en
paramètres pour récupérer une seule valeur. Ou alors il y a un truc en
plusssssh ?

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"News Groups" a écrit dans le message de news:
41761051$0$29541$
Bonjour à tous,

François Fuchs à écrit : "..Déclarez une classe. Si vous ne savez pas
faire, je vous donne un exemple..."
N'ayant pas de réponse de la part de François,
je me permet de reposter ma demande au cas où
quelqu'un pourrais m'indiquer la façon de créer cette classe.

Merci encore,
Thierry.






Avatar
Raymond [mvp]
OK, vu.

il faut faire un truc simple tant que ça va évoluer, car reprendre un
tableau tous les 6 mois n'est pas de la tarte.
tu ne passe pas par un module de classe mais par un module standard.
Tu crées le module "module1" et tu places:
Option Compare Database
Option Explicit

Public intMonTableau(0 To 1, 0 To 1) As Integer

Public Function MontableInitialize()
intMonTableau(0, 0) = 0
intMonTableau(0, 1) = 0
intMonTableau(1, 0) = 1
intMonTableau(1, 1) = 2
End Function

dans l'événement form_Load de ton formulaire, tu indiques
Private Sub Form_Load()
Call MontableInitialize
End Sub
ce qui aura pour effet de charger le tableau avec les constantes.

Lorsque tu en as besoin, tu appelles le tableau directement à partir du
formulaire avec tes paramètres
Me.MonChamp = intMonTableau(1, 1)
ou

Me.MonChamp = intMonTableau(MaVar1, MaVar2)

je pense que c'est le plus simple
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"News Groups" a écrit dans le message de news:
41764ca9$0$20489$
En effet l'idée de base est d'utiliser un tableau de ce type
au lieu de définir un jeu d'instructions conditionnelles,
je m'explique :

les Variables MaVar1 et MaVar2 peuvent prendre les valeurs 1/0
et suivant la combinaison des deux un résulat est associé.
Ainsi ma fontion :
°° Private Function MaFunction (MaVar1 as Integer,MaVar2 as Integer) as
Integer
°° Dim intMonTableau (0 To 1, 0 To 1) As Integer
°° intMonTableau (0, 0) = 0
°° intMonTableau (0, 1) = 0
°° intMonTableau (1, 0) = 1
°° intMonTableau (1, 1) = 2
°° MaFunction = intMonTableau (MaVar1 , MaVar2 )
°° End Function

Peut aussi s'écrire (ce qui était le cas avant l'utilisation du tableau
précédent) :
°° Private Function MaFunction (MaVar1 as Integer,MaVar2 as Integer) as
Integer
°° Dim Resultat As Integer
°° If MaVar1 = 1 Then
°° If MaVar2 = 1 Then
°° Resultat = 2
°° Else
°° Resultat = 1
°° End If
°° Else
°° Resultat = 0
°° End If
°° MaFunction = Resultat
°° End Function

Le choix de l'utilisation d'un tableau est dû au fait que le choix des
valeurs de MaVar1 et MaVar2
peuvent évoluer et passer à 0/1/2/..
De même pour le résultat associé aux combinaisons, ainsi dans le temps le
tableau pourra prendre la forme de :
°° intMonTableau (0, 0) = 0
°° intMonTableau (0, 1) = 0
°° intMonTableau (1, 0) = 1
°° intMonTableau (1, 1) = 2
°° intMonTableau (2 0) = 1
°° intMonTableau (2 1) = 3.....
Or dans le cas d'instructions conditionnelles (If ou Select) j'ai peur que
cela devienne vite ingérable !

Deplus ces valeurs n'évolue pas en cours d'utilisation mais sont figée au
codage,
c'est pourquoi je voulai passer le tableau sous forme de constante.

Voilà, désolé pour la longueur des explications,
Peux tu me donner ton avis sur le principe et si il existe une autre
méthode
plus adéquat ?

Merci encore,
Thierry.