OVH Cloud OVH Cloud

Déclaration de deux constantes

11 réponses
Avatar
Ayrton [ASC]
Bonsoir à tous,

Je reviens vous voir avec un problème de constantes ; j'ai deux
constantes à déclarer :
Const GP =15
Const PRO=40.66

Dans mon sous-form, j'ai 3 champs : TypeLicence ; superficieKm2 ;Montant
TypeLicence contient une liste de choix avec GP ou PRO; si je choisi GP
et que dans le champ SuperficieKm2 j'inscris3, le champ Montant doit
être égal à 45 .
Le souci est que je sais faire une petite fonction pour une seule
constante ( Eric et 3 stone m'ont expliqué en fin de semaine dernière )
mais là, avec deux valeurs et e nmodifiant la fonction, ça ne fonctionne
pas ; mon champ Montant m'affiche 0 ; j'ai essayé à peu près tout ce que
je sais faire ( ou plutôt le peu que je sais faire ;-) ) et je n'y
arrive pas

Voilà ma petite fonction :
Private Function MonTotal(UneSomme As Long)
If UneSomme = GP Then
MonTotal = UneSomme * GP
Else
MonTotal = UneSomme * PRO
End If
End Function

Par contre, je ne sais pas comment, dans mon appel, faire référence à
l'une ou l'autre de ces constantes de façon à ce que le résultat soit le
suivant :
Pour exemple-------------> TypeLicence = PRO Superficie = 2 Montant =
81.32 ?
TypeLicence=GP
Superficie=4 Montant= 60 ?

Merci de votre aide
J'espère que je me suis bien expliqué !

--
@+
Ayrton
http://cerbermail.com/?ljOK1CRTMt
Recherche dans les Archives :
http://groups.google.fr/group/microsoft.public.fr.windowsxp?hl=fr
Charte NG :
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

10 réponses

1 2
Avatar
3stone
Salut,

"Ayrton [ASC]"
| Je reviens vous voir avec un problème de constantes ; j'ai deux
| constantes à déclarer :
| Const GP 
| Const
|
| Dans mon sous-form, j'ai 3 champs : TypeLicence ; superficieKm2 ;Montant
| TypeLicence contient une liste de choix avec GP ou PRO; si je choisi GP
| et que dans le champ SuperficieKm2 j'inscris3, le champ Montant doit
| être égal à 45 .
| Le souci est que je sais faire une petite fonction pour une seule
| constante ( Eric et 3 stone m'ont expliqué en fin de semaine dernière )
| mais là, avec deux valeurs et e nmodifiant la fonction, ça ne fonctionne
| pas ; mon champ Montant m'affiche 0 ; j'ai essayé à peu près tout ce que
| je sais faire ( ou plutôt le peu que je sais faire ;-) ) et je n'y
| arrive pas
|
| Voilà ma petite fonction :
| Private Function MonTotal(UneSomme As Long)
| If UneSomme = GP Then
| MonTotal = UneSomme * GP
| Else
| MonTotal = UneSomme * PRO
| End If
| End Function
|
| Par contre, je ne sais pas comment, dans mon appel, faire référence à
| l'une ou l'autre de ces constantes de façon à ce que le résultat soit le
| suivant :
| Pour exemple-------------> TypeLicence = PRO Superficie = 2 Montant | 81.32 ?
| TypeLicence=GP
| Superficie=4 Montant= 60 ?

Bon... une fonction retourne *une* valeur, c'est vrai.
Mais, tu peux, même avec une simple Sub modifier autant de variable
(de valeur) que tu le souhaite.

Alors, soit du déclare des variables au niveau du formulaire, soit au
niveau global (dans un module).

Un exemple (idiot) dans un formulaire:

Public Var1 As double
Public Var2 As double


Public AttribueValeur( TpLic as string)
If TpLic = "PRO" then
Var1 = 12345
Var2 = 678,90
elseif TpLic = "GP" then
Var1 = 54321
Var2 = 987,60
else
Var1 = 0
Var2 = 0
End if
End sub


Pour utiliser ta sub, tu fait alors :

Call AttribueValeur("GP")

... et tes variables Var1 et Var2 seront corectement initialisées.

Comme tu vois, il suffit que les variables soient connues "dans" la sub
pour pouvoir en faire ce que l'on veut !!
...mais cela oblige aussi à faire attention à la valeur de ces variables
et au traitement qu'on leur fait subir ;-)

Une règle veut que moins il y a de variables publiques, mieux c'est !
mais parfois il faut... ou bien cela simplifie les choses.


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
Ayrton [ASC]
Bonjour *3stone*
Dans ton message de news:,
Tu as pensé très fort :-(*)

Salut,


Salut Pierre ;-)
[....]
Call AttribueValeur("GP")

... et tes variables Var1 et Var2 seront corectement initialisées.


Je suis d'accord ; à te lire je vois que je pouvais plus simple ;-)
Seulement j'en suis au même point ! ! Mon problème d'appel vient du
fait que mon champ[Montant] doit être égal à mon cham [SuperficieKm2]
que je rempli par des valeurs oscillants entre 1 et 30 multiplié par ma
variable Var1 ou Var2 ; je dois mettre dans l'évènement After_Update duè
champ [SuperficieKm2] un truc du genre :
S'il s'agit de la variable Var1 alors le résultat = Valeur de
[SuperficieKm2]*Var1 ou s'il s'agit de Var2 le résultazt est : Valeur de
[SuperficieKm2]*Var2

Et ça, je n'y arrive pas ; j'essaie depuis tout à l'heure et ça ne vas
pas ; je pense que je m'y prends mal
Comprends tu ? ;-)

L'ordre de saisie est le suivant :
1)TypeLicence = GP ou PRO ( donc Var1 ou Var2 )
2) SuperficieKM2 = entre 1 et 30
3) Montant = Typelicence * SuperficieKM2

Au début je me suis dit que j'allais faire ça en deux coups les gros car
ça me paraissait tout " con " et je m'aperçois que je butte surement sue
une connerie ( une fois de plus ) et je n'arrive pas à avoir mon
résultat ;-(

--
@+
Ayrton
http://cerbermail.com/?ljOK1CRTMt
Recherche dans les Archives :
http://groups.google.fr/group/microsoft.public.fr.windowsxp?hl=fr
Charte NG :
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

Avatar
3stone
re,

"Ayrton [ASC]"
| Seulement j'en suis au même point ! ! Mon problème d'appel vient du
| fait que mon champ[Montant] doit être égal à mon cham [SuperficieKm2]
| que je rempli par des valeurs oscillants entre 1 et 30 multiplié par ma
| variable Var1 ou Var2 ; je dois mettre dans l'évènement After_Update duè
| champ [SuperficieKm2] un truc du genre :
| S'il s'agit de la variable Var1 alors le résultat = Valeur de
| [SuperficieKm2]*Var1 ou s'il s'agit de Var2 le résultazt est : Valeur de
| [SuperficieKm2]*Var2
|
| Et ça, je n'y arrive pas ; j'essaie depuis tout à l'heure et ça ne vas
| pas ; je pense que je m'y prends mal
| Comprends tu ? ;-)
|
| L'ordre de saisie est le suivant :
| 1)TypeLicence = GP ou PRO ( donc Var1 ou Var2 )
| 2) SuperficieKM2 = entre 1 et 30
| 3) Montant = Typelicence * SuperficieKM2


Si je comprends bien, tu renseigne 2 valeurs et en désire une de retour ?


Dans ce cas la fonction est a utiliser...


Function CalculMontant( strTpLic, intSuperficie) as double
if strTpLic = "PRO" then
CalculMontant = ici ton calcul
elseif strTpLic = "GP" then
CalculMontant = ici l'autre calcul
else
CalculMontant = 0
end if
End function


et tu l'appelle simplement en renseignant les deux champs:

Montant = CalculMontant([TypeLicence],[SuperficieKM2])

il reste à trouver le moment pour appeller ta fonction.


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
Ayrton [ASC]
Re *3stone*

Si je comprends bien, tu renseigne 2 valeurs et en désire une de
retour ?


Oui et Non ;-)
Mon champ [TypeLicence] est une Zone de Liste contenant GP et PRO ; et
donc à la saisie je choisi l'un des deux

Dans ce cas la fonction est a utiliser...


Function CalculMontant( strTpLic, intSuperficie) as double
if strTpLic = "PRO" then
CalculMontant = ici ton calcul
elseif strTpLic = "GP" then
CalculMontant = ici l'autre calcul
else
CalculMontant = 0
end if
End function


Ok pour ça ; j'ai donc mis :CalculMontant= 40.66 pour "PRO" et 15 pour
"GP"
et tu l'appelle simplement en renseignant les deux champs:

Montant = CalculMontant([TypeLicence],[SuperficieKM2])

il reste à trouver le moment pour appeller ta fonction.


C'est là ou le bas blesse car je pensais le mettre sur le dernier champ
de saisie, à savoir [SuperficieKm2) en mettant sur évènement
After_Update :
MontantÊlculMontant([TypeLicence]*[SuperficieLicence]) et tu te doutes
que ça ne vas pas ;-)
Si je mets comme tu m'as dit, ça ne vas pas car mon calcul ne se fait
pas et de plus j'ai un message d'erreur !

Ca me prends la tête grave ce truc car comme je te disais je pensais
faire ça en 10 ou 15 minutes et ça fait plus de deux heures que je me
prends la tête avec un calcul qui ne veux pas se faire ! !
Ca m'a pas l'air d'être très compliqué et pourtant je ne trouve pas la
solution..........même avec ton aide ! Je dois encore moins comprendre
que d'habitude pourtant je n'ai pas bu ce week end.........
remarque c'est peut être pour ça que je n'y arrive pas lol

--
@+
Ayrton
http://cerbermail.com/?ljOK1CRTMt
Recherche dans les Archives :
http://groups.google.fr/group/microsoft.public.fr.windowsxp?hl=fr
Charte NG :
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

Avatar
3stone
Salut,

"Ayrton [ASC]"

Function CalculMontant( strTpLic, intSuperficie) as double
if strTpLic = "PRO" then
CalculMontant = 40.66 * intSuperficie
elseif strTpLic = "GP" then
CalculMontant = 15 * intSuperficie
else
CalculMontant = 0
end if
End function



| >
| > il reste à trouver le moment pour appeller ta fonction.
|
| C'est là ou le bas blesse car je pensais le mettre sur le dernier champ
| de saisie, à savoir [SuperficieKm2) en mettant sur évènement
| After_Update :
| MontantÊlculMontant([TypeLicence]*[SuperficieLicence]) et tu te doutes
| que ça ne vas pas ;-)


Ta zone de texte se nomme Montant ? Donc :

Montant = CaculMontant(nomDeTaListe , champSuperficie)

ce qui devrait faire :

Montant = CalculMontant(TypeLicence , SuperficieKM2)


Remarque, tu passe simplement les deux valeurs séparées par
une virgule... le calcul se fait dans la fonction.


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
Ayrton [ASC]
Bonjour *3stone*
Dans ton message de news:,
Tu as pensé très fort :-(*)
Salut,


Salut 3stone,

Function CalculMontant( strTpLic, intSuperficie) as double
if strTpLic = "PRO" then
CalculMontant = 40.66 * intSuperficie
elseif strTpLic = "GP" then
CalculMontant = 15 * intSuperficie
else
CalculMontant = 0
end if
End function


Effectivement, fait comme ça, ça fonctionne bien ;-)
Ta zone de texte se nomme Montant ? Donc :

Montant = CaculMontant(nomDeTaListe , champSuperficie)

ce qui devrait faire :

Montant = CalculMontant(TypeLicence , SuperficieKM2)


Merci beaucoup Pierre ; je suis à la fois super content
et...................................super déçu !
Content parce que grâce à toi, je vais pouvoir insérer cette fonction
( ce qui sera plus " propre " que de stocker mes valeurs 15 et 40.66
dans une table comme ja faisais.
Déçu, parce que je n'ai pas trouvé tout seul ;-( je m'explique: avec
toutes ces explications que tu m'as gentillement données ces derniers
remps concernant les fonctions, je pensais que j'aurais pu trouver ça
tout seul ; je savais qu'il fallait multiplier mais je le faisais au
mauvais endroit ;-( ; je n'ai pas pensé une seule seconde que je
pouvais faire faire le calcul dans la fonction et l'appeler
tranquillement ensuite; je m'entêtais à vouloir le faire absolument
pendant l'appel ; grossière erreur de ma part !Remarque, c'est la
fifférence entre un petit débutant et un pro ;-) ; mais bon, j'ai quand
même un petit goût d'amertume ! !

Remarque, tu passe simplement les deux valeurs séparées par
une virgule... le calcul se fait dans la fonction.


Ca, j'en prends bonne note !Je le saurais, à l'avenir

Encore merci Pierre
Bonne fin de journée

--
@+
Ayrton
http://cerbermail.com/?ljOK1CRTMt
Recherche dans les Archives :
http://groups.google.fr/group/microsoft.public.fr.windowsxp?hl=fr
Charte NG :
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

Avatar
3stone
Bonsoir Ayrton,

"Ayrton [ASC]"
| mais bon, j'ai quand même un petit goût d'amertume ! !

Faut pas ! Seul le fait de progresser importe...

Et le mieux est de ne pas utiliser de fonction ou de code
lorsque c'est possible ;-)

Pourquoi ?
Admettons que ta fonction tourne nickel et tout va bien.
Mais, que faire le jour ou l'on te dira:

Pour les "Type de licence", on passe à quatre !
Pro, Amateur, GP et SP ?
La jolie fonction n'est plus si jolie... et il faut reprendre le code.

Une table "Type licence" avec CodeLicence, NomLic, ValeurLic
te permettrait simplement d'ajouter "une ligne" et de faire
les calculs grâce à un simple champ calculé dans une requête...
ou un DLookup et... sans une ligne de code ;-)

Ce sera pour la prochaine fois :o)


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
Ayrton [ASC]
Bonjour *3stone*
Dans ton message de news:,
Tu as pensé très fort :-(*)

Bonsoir Ayrton,


Re Pierre ,

Une table "Type licence" avec CodeLicence, NomLic, ValeurLic
te permettrait simplement d'ajouter "une ligne" et de faire
les calculs grâce à un simple champ calculé dans une requête...
ou un DLookup et... sans une ligne de code ;-)


Je prends bonne note de ça ; à vrai dire je pensais (surement à tort )
qu'il valait mieux stocker ces valeurs dans des variables plutôt que
dans des tables ; effectivement; au vu de ton exemple, il me serait plus
simple de rajouter une ligne ou deux dans une table plutôt que d'être
obligé de remettre les mains dans du code si j'étais amener à faire des
rajouts ; comme quoi, à vouloir trop bien faire on se retrouve dès fois
avec des soucis ; le mieux est l'ennemi du bien dit on..........

Ce sera pour la prochaine fois :o)


Ben oui sûrement ! Mais j'essaierai quand même de me debrouiller avant
de venir crier " Au secours ! ! ! " lol

Encore merci

--
@+
Ayrton
http://cerbermail.com/?ljOK1CRTMt
Recherche dans les Archives :
http://groups.google.fr/group/microsoft.public.fr.windowsxp?hl=fr
Charte NG :
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm

Avatar
Ayrton [ASC]
oupss ! ! j'ai oublié de te demander ton avis ( sans vouloir abuser
bien sûr ):
Au départ, dans mon appli, j'avais ceci :
Mon Champ TypeLicence avec zone de liste déroulante contenant : GP, 15
Euros; PRO, 40,66 Euros ; les colonnes 15 Euros et 40.66 Euros étant
cachées.
Dans mon Champ SuperficieKm2, sur évènement After_Update, j'avais :
[Montant] = Nz([TypeLicence].Column(1), 0) * Nz([SuperficieKm2], 0)

Ca, je sais faire et ça fonctionnait super bien depuis le début de
l'année ; sauf qu'on m'a dit que cen'étais pas bie nde faire comme ça et
qu'il valait mieux stocker mes valeurs numériques dans des variables ;
d'où mon post d'hier.

J'aimerais juste que tu me dises ( à l"occasion hein ! il n'y a pas le
feu ) si ce que j'avais fait était correct ou pas.
Voili voilou !
Et encore toutes mes excuses car j'ai oublié de t'en parler hier et de
te demander ton avis.

Merci

--
@+
Ayrton
http://cerbermail.com/?ljOK1CRTMt
Recherche dans les Archives :
http://groups.google.fr/group/microsoft.public.fr.windowsxp?hl=fr
Charte NG :
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
Avatar
3stone
Salut,

"Ayrton [ASC]"
| Au départ, dans mon appli, j'avais ceci :
| Mon Champ TypeLicence avec zone de liste déroulante contenant : GP, 15
| Euros; PRO, 40,66 Euros ; les colonnes 15 Euros et 40.66 Euros étant
| cachées.
| Dans mon Champ SuperficieKm2, sur évènement After_Update, j'avais :
| [Montant] = Nz([TypeLicence].Column(1), 0) * Nz([SuperficieKm2], 0)

J'aurais même fait :

if IsNull(TypeLicence) then
Msgbox "Sélectionnez un type de licence !"
TypeLicence.SetFocus
else
Montant = val(TypeLicence.Column(1)) * Nz(SuperficieKm2, 0)
end if


...les crochets sont superflus puisque ni d'espace ni caractère bizarre!



|
| Ca, je sais faire et ça fonctionnait super bien depuis le début de
| l'année ; sauf qu'on m'a dit que cen'étais pas bie nde faire comme ça et
| qu'il valait mieux stocker mes valeurs numériques dans des variables ;
| d'où mon post d'hier.

Voir le contexte dans lequel le conseil à été donné...

L'utilisation de la variable est à conseiller si à partir de là, elle sert
dans une série de calcul... ce qui n'est pas le cas ici !
Autant utiliser la source de la donnée.


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://users.skynet.be/mpfa/
1 2