Valeur de variables [Résolu]

Signaler
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012
-
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012
-
Bonjour à tous,

J'ai plusieurs forms dont l'une contient des variables (déclarées en Integer dans un module).
J'ai attribué un nombre à chaque variable, mais sur une autre form, elles restent toujours à 0.

Pourtant, je croyais que des variables déclarées dans une form gardaient leur valeur pour les autres forms.

Modules pour la déclaration :
...
Public A7 As Integer
Public A10 As Integer
...


Form avec les variables :
Private Sub OptTrancheAge1_Click()
    Intro.OptTrancheAge1.BackColor = vbCyan
    Intro.OptTrancheAge1.Value = True
    Intro.OptTrancheAge2.Enabled = False
    Intro.OptTrancheAge3.Enabled = False
    cmdEnregistrer.Enabled = True
    A7 7: A10 10
End Sub


Autre form :
Private Sub cmdEnregistrer_Click()
If Intro(A7) And Val(Age) < TrancheAge - Chaine Or _
   Intro(A10) And Age > TrancheAge - Chaine Then
...

Là, y a un truc qui m'échappe et je ne vois pas à quoi cela est dû !

Si vous avez une idée, je suis preneu !

Merci d'avance.



Cordialement. JLB59

18 réponses

Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

J'ignore ce que fait :
Intro(nom_de_variable)
en VB6, car je n'ai pas eu besoin de l'utiliser.

Sinon, appliques ce que te recommande Jack, cela résolvera peut être ton pb.


---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Il nous faut être gentil. 1Alors :
1) tu aurais eu un message d'erreur si tu avais utilisé, comme on te l'a dit et redit en vain, Option Explicit. En lieu et place, tu n'a eu de cesse de crier que tu n'en n'avais point besoin !
A7, non reconnue, aurait alors été dénoncée.
2) sans option explicit, A7 0>> et intro(A7) n'est alors rien d'autre que intro(0), c'est-à dire tout simplement le tout premier contrôle chargé sur intro.
Fais donc l'expérience suivante :
msgbox intro(A7).Name & vbcrlf & intro(0).Name
et tu sauras ce que "cela fait" .



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Interroge-toi par ailleurs sur le sens ce dette ligne de code, que tu as montrée) :

If Intro(A7) And Val(Age) < TrancheAge - Chaine Or _
   Intro(A10) And Age > TrancheAge - Chaine Then


Telle qu'écrite, elle :
- utilise deux And qui ne comparent pas deux expressions conditionnelles
- un Or conditionnel
- Age y est trantôt une chaîne de caractère et tantôt un nombre

Ta ligne de code sera systématiquement vérifiée (toujours vrai) et les instructions suivant ton Then ... systématiquement exécutées.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Alors :
1) déclare en Public dans un Module .Bas tes variables A7 et A10 (j'ignore totalement où tu as placé, déclaré et initialisé toutes les autres)
2) tu pourras alors t'y référer directement depuis nj'importe où, directemùent (pas via intro)
3) cela n'enlève rien :
-- ni à ce dont je t'ai parlé dans mon message de dimanche 12 août 2012 à 17:18:51 (curiosité à propos de ton clic sur l'optionbutton)
-- ni à ma remarque faite par mon message précédent

En tout état de cause : utilise OPTION EXPLICIT
Bonne chance.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Bien.
1) Il ne te reste alors qu'à libérer ce sujet (un clic sur le tag "Réponse acceptée").
2) Tu devrais "repenser" avec plus de tenacité l'interface de ton appli car :
--- dès lors que tu demandes à l'utilisateur de donner son année de naissance, il est assez curieux de lui demander par ailleurs de cocher sa tranche d'âge, puis de contrôler que ce qui a été coché correspond bien à l'année saisie. Soit tu demandes l'année et fais calculer par ton appli la tranche d'âge correspondante (sans intervention de l'utilisateur), soit tu te contentes de laisser l'utilisateur cocher directement sa tranche d'âge. Mais pas les deux ...
--- il vaut à ce propos mieux laisser l'utilisateur cocher directement sa tranche d'âge, et ce d'autant qu'un simple millésime (une année de naissance) est très loin d'être satisfaisant ! Imagine donc (par exemple) une utilisation faite le 1er janvier alors que l'utilisateur est né un 31 décembre ! ===>> une erreur sur l'âge de 364 ou 365 jours (si année bissectile)
--- une vérification de cohérence des saisies ne sert à rien car : soit l'utilisateur ment et il mentira alors deux fois, soit il est honnête et indiquera d'emblée sa vraie tranche d'âge.
Voilà.
Bonne continuation.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

il est assez curieux de lui demander par ailleurs de cocher sa tranche d'âge, puis de contrôler que ce qui a été coché correspond bien à l'année saisie
L'âge est déjà calculé suivant l'année saisie.

L'OptionButton définit une tranche d'âge, par exemple de 7 à 10 ans, donc, de 2005 à 2002
Si l'utilisateur saisit par exemple 2000, automatiquement, l'âge ne correspondra pas à la tranche d'âge choisie !
C'est pour ça que, si ce cas arrive, le prog revient à l'introduction, donc de reprendre tout depuis le début.

Imagine donc (par exemple) une utilisation faite le 1er janvier alors que l'utilisateur est né un 31 décembre ! ===>> une erreur sur l'âge de 364 ou 365 jours (si année bissectile)
Tu sais, ce genre d'erreur n'interviendra que très très rarement !
Alors, je ne suis pas penché sur la question.

une vérification de cohérence des saisies ne sert à rien car : soit l'utilisateur ment et il mentira alors deux fois, soit il est honnête et indiquera d'emblée sa vraie tranche d'âge.
Au contraire, la cohérence est nécessaire parce que le mode de calcul est différent pour chaque tranche d'âge.
Mais comme c'est pour des enfants de 7 à 16 ans, je ne pense pas qu'il y aurait de la triche, et si cela est, l'analyse sera fausse si l'utilisateur a menti, et cela est sous sa seule responsabilité.





Cordialement. JLB59
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Que fait la fonction Intro ?

Sinon, question pratique, je te conseil de donner des noms explicites à tes variables, ce sera plus facile pour la maintenance".
Genre :
gAge : Variable globale de l'age
mAge : Variable privée d'un module/form
lAge : Variable locale
pAge : Paramètre

Ensuite, penses à toujours mettre "Option Explicit" (sans les " ) en haut de tout tes fichiers de code.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

Que fait la fonction Intro ?
C'est la page de lancement de l'appli.


Sinon, question pratique, je te conseil de donner des noms explicites à tes variables, ce sera plus facile pour la maintenance".
Genre :
gAge : Variable globale de l'age
mAge : Variable privée d'un module/form
lAge : Variable locale
pAge : Paramètre
Pour ça, il n'y a pas besoin de maintenance puisque ce sont des valeurs définies et fixes uniquement pour le test.



Ensuite, penses à toujours mettre "Option Explicit" (sans les " ) en haut de tout tes fichiers de code.
Tout est déclaré dans un module, donc, je ne pense pas que ça soit vraiment utile, d'autant plus que plusieurs variables servent dans les autres forms (y en a plus de 50) !


Cordialement. JLB59
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Bonjour,
Question posée à juste titre par NHenry :

Que fait la fonction Intro

au vu de ton code.
Réponse donnée :
C'est la page de lancement de l'appli.

Ah ?
Et qu'est donc, dans ton esprit :
Intro(A7)


Incompréhensible et contradictoire !
Sans parler de cette "curiosité" au clic de OptTrancheAge1 :
  Intro.OptTrancheAge1.Value = True
    Intro.OptTrancheAge2.Enabled = False
    Intro.OptTrancheAge3.Enabled = False

Ne serait-ce que parce que si un optionbutton est coché, les autres sont automatiquement décochés, sans aucun code.
Et si OptTrancheAge1 est déjà coché, ton code interdit qu'on le décoche (il se recoche). Et s'il n'est pas coché, mle clic le cochera de toutes manières !
Tu parais avoir de très sérieuses lacunes, qu'il convient de corriger en apprenant les bvases les plus élémentaires
Je crains fort que tu ne reçoives dans ces conditions que les mêmes rép)onses (et pour les mêmes raisons) que celles obtenues sur d'autres sites, soius différents pseudos, hein !!!

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

Incompréhensible et contradictoire !
C'est vrai que pour celles ou ceux qui ne connaissent pas le fonctionnement du prog auront sans doute du mal à interpréter.

Et qu'est donc, dans ton esprit : (Intro(A7)
C'est parce qu'à l'origine, ces variables A7, A10, etc., se trouvaient dans la form "Intro" et comme le test je le faisais dans une autre form, j'étais obligé de comparer avec l'age (suivant l'année de naissance) avec ces variables qui se trouvaient dans "Intro".

Ne serait-ce que parce que si un optionbutton est coché, les autres sont automatiquement décochés, sans aucun code.
C'est exactement ça et je ne pense pas qu'il faille d'autres codes.
En fait, il y a 3 OptionButton, et quand 1 est coché, les 2 autres sont grisés.

Ouai ! C'est pas très clair hein !

C'est pas grave, à force, je vais bien finir par trouver en faisant des modifs.

En tout cas, je vous remercie Nhenry et toi de votre soutien.
Cordialement. JLB59
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
C'est vrai que pour celles ou ceux qui ne connaissent pas le fonctionnement du prog auront sans doute du mal à interpréter.

Gné ?
Il y a incohérence quel que soit ton "prog". Une incohérence en est une. Elle se constate sans le moindre appel et ne donne lieu à aucune "interprétation" !
Bnne chance.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

"Pour ça, il n'y a pas besoin de maintenance puisque ce sont des valeurs définies et fixes uniquement pour le test. "
De manière générale, c'est très pratique pour développer et déboguer un programme.

"Tout est déclaré dans un module, donc, je ne pense pas que ça soit vraiment utile, d'autant plus que plusieurs variables servent dans les autres forms (y en a plus de 50) !"
Le Option Explicit, t’interdit d'utiliser une variable non déclarée.
Cela n'impose pas de redéclarer toutes les variables à chaque usage.
Cela évite les fautes de frappes.
Sinon, la partie "Tout est déclaré dans un module", même les variables normalement locales ?


Comment as-tu déclarer la fonction Intro ?


"C'est vrai que pour celles ou ceux qui ne connaissent pas le fonctionnement du prog auront sans doute du mal à interpréter. "
Si tu vois que l'on comprend mal, il y a que 2 raisons :
- Soit tu expliques mal et donc, tu n'aides pas à la compréhension.
- Soit ton raisonnement n'est pas logique et donc le problème peut venir de là.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

[quote[i]]Le Option Explicit, t’interdit d'utiliser une variable non déclarée.
Cela n'impose pas de redéclarer toutes les variables à chaque usage.
Cela évite les fautes de frappes.
Sinon, la partie "Tout est déclaré dans un module", même les variables normalement locales ?/i/quote
Je le savais pas ça, mais d'après ce que j'avais lu, il n'y avait pas besoin de déclarer une variable avec "Option Explicit" puisqu'elles sont déclarées dans un module avec l'option "Public" !

[i]Si tu vois que l'on comprend mal, il y a que 2 raisons :
- Soit tu expliques mal et donc, tu n'aides pas à la compréhension.
- Soit ton raisonnement n'est pas logique et donc le problème peut venir de là.
/i[quote]
Ben ! Je pense que les 2 sont à retenir !
Je vais essayer d'être plus précis dans mes explications et dans mes codes.
De cette manière, je pense qu'il y aura moins de post où beaucoup d'explications me sont demandées.

[quote]Comment as-tu déclarer la fonction Intro ?

Non, "Intro" est une form et non une fonction.
Si tu as vu "Intro(nom_de_variable)", c'est parce que je faisais les tests sur un autre page.
Donc, pour ces tests, j'avais besoin de la variable qui se trouvait dans la form "Intro".

Je sais pas si tu comprends bien !


Cordialement. JLB59
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Je sais pas si tu comprends bien !

Ca, pour avoir compris à quoi on avait affaire, rassure-toi : on a tout compris.
Et c'est sans hésiter (puisque tu aimes cela), que j'ajoute le smiley "yeux en l'air"...
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut

Non
Intro(nom_de_variable)
n'a jamais été une syntaxe permettant de contacter la variable d'une forme.
Intro.nom_de_variable
serait plus juste ... si ta variable est déclarée en Public dans la partie Déclarations de la forme susnommée ET que cette forme est chargée.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

Bonjour jack,

[i]Intro(nom_de_variable)
n'a jamais été une syntaxe permettant de contacter la variable d'une forme.
Intro.nom_de_variable
serait plus juste ... si ta variable est déclarée en Public dans la partie Déclarations de la forme susnommée ET que cette forme est chargée./i
C'est vrai, mais alors, pourquoi, il n'y avait pas d'erreur ?
Ca doit bien faire quelque chose mais quoi exactement.

Merci de ta réponse.

Cordialement. JLB59
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
et complète ton apprentissage par un autre réflexe :

MsgBox TypeName(UserForm1(A7))


qui t'indiquera le type de ce que "cela a fait" (un type de contrôle)

Tout cela ne t'arriverait pas si tu utilisais Option Explicit (une erreur aurait alors été dénoncée sur A7).
Voilà !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

Bonjour ucfoutu et nhenry,

C'est vrai que vos explications sont claires, et me les avoir données m'aident beaucoup.

ucfoutu, tu m'as donné des astuces qui me seront très utiles et je t'en remercie.

déclare en Public dans un Module .Bas tes variables A7 et A10 (j'ignore totalement où tu as placé, déclaré et initialisé toutes les autres)
C'est pour cette raison que je n'ai pas utilisé Option Explicit.
Suite à tes conseils, je l'ai mis dans les 3 premières Form du projet, puisque c'est de là que tout s'initialise, et bien, j'ai eu beaucoup d'erreur, notamment au niveau des Timer !

Je ne vais pas te citer ce erreurs parce que c'est passé, et étant donné que je me sers que du Module.bas, je n'ai plu aucun mess d'erreur.

J'ai fait différentes formes de tests et il s'est avéré que tout est correct.
Bien-sur, j'avais gardé les variables et j'en ai rajouté une de type boolean. Et ce type qui me permet de savoir quel OptionButton a été choisi et comparer les âges de cet fonction avec celle saisit de l'utilisateur.

[- Age y est trantôt une chaîne de caractère et tantôt un nombre
C'est vrai que c'est un peu rébarbatif ce que j'avais expliqué, mais les variables en question ont toutes été déclaré comme "Integer", alors, que je mette "Age" ou "Val(Age)", je ne pense pas que faille une grande différence puisque les résultats sont les mêmes.

En tout cas, tes codes me sont très utiles et, comme tu m'as dit, ça permet de voir plus clairement ce qui se passe.

Comme tout fonctionne bien à présent, je considère que c'est une affaire résolue.

Je tiens à vous remercier de votre aide, et toi particulièrement ucfoutu parce que tu es bardé de patience !

A+



Cordialement. JLB59