cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 2011
-
28 févr. 2009 à 12:32
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 2013
-
2 avril 2009 à 19:08
Bonjour,
J'avais vu dans un code-source (dont j'ai perdu la trace), qu'une personne mémorisait des valeurs dans une variable numérique et j'aimerais en savoir plus.
L'idée est la suivante. Dans un programme concernant des bâtiments, il faut que j'indique si un bâtiment est destiné à accueillir :
(a) uniquement les membres du personnel ;
(b) du public ;
(c) majoritairement des enfants ;
(d) des personnes à mobilité réduite ;
- etc.
Il est clair que pour certains bâtiments, différentes options sont possible : a+b, c+d, etc.
Comment doit-on s'y prendre pour transformer cela en valeur numérique ?
Si j'ai bonne mémoire, dans le code-source cité ci-dessus), cela donnait des trucs du genre :
"Si dans" MaVariableBatiment se trouve "LaValeurCorrespondant_à_2" et "LaValeurCorrespondant_à_4"..
...alors le bâtiment accueille du public et des personnes à mobilité réduite.
J'espère que mon explication sera suffisamment claire pour obtenir une réponse (toute aussi claire)...
D'avance merci
Programmix
A voir également:
Utiliser une variable numérique pour mémoriser des valeurs
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 28 févr. 2009 à 13:28
Pas de problème : si tu utilise des nombres dans la série (y = 2^x) tu n'auras jamais de collision.
Evidemment, la taille de la variable change en fonction du nombre d'options :
8 options ou moins : Byte
16 options ou moins : Integer
32 options ou moins : Long
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 28 févr. 2009 à 12:51
Salut
Oui, tu as mis le doigt dessus :
Dans la mesure où tu peut avoir entre 1 et 4 réponses indépendantes ou ensemble, il faut donner des valeurs différentes à ces options, en s'appuyant sur la méthode ressemblant au "décimal codé binaire":
(a) 1
(b) 2
(c) 4
(d) 8
Si (b) et (d) sont cochée, suffit de faire l'addition : Code = 2 + 8
A la relecture de Code :
Case à cocher (a) = vrai si "Code And 1 > 0"
Case à cocher (b) = vrai si "Code And 2 > 0"
Case à cocher (c) = vrai si "Code And 4 > 0"
Case à cocher (d) = vrai si "Code And 8 > 0"
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 20112 28 févr. 2009 à 13:18
Merci pour la réponse, c'est ce que je pensais.
Mais étant encore peu habitué au "décimal code binaire", comment dois-je faire pour monter dans le nombre de variables ? Est-ce toujours le double du précédent ?
Ce que je crains, c'est d'utiliser un nombre pour une option qui pourrait correspondre à une somme d'autres options.
If Me.Check1(0) Then i = i + Caract.travailleur
If Me.Check1(1) Then i = i + Caract.dupublic
If Me.Check1(2) Then i = i + Caract.enfants
If Me.Check1(3) Then i = i + Caract.mobilitereduite
If Me.Check1(4) Then i = i + Caract.logement
Me.List1.AddItem "Batiment 1 =" & i
End Sub
Private Sub Command2_Click()
Dim s As String
Dim i As Integer
Call RAZ
s = Me.List1.Text
i = CInt(Mid(s, InStr(1, s, "=") + 1))
If i And Caract.travailleur Then Me.Check1(0).Value = 1
If i And Caract.dupublic Then Me.Check1(1).Value = 1
If i And Caract.enfants Then Me.Check1(2) = 1
If i And Caract.mobilitereduite Then Me.Check1(3) = 1
If i And Caract.logement Then Me.Check1(4) = 1
End Sub
Private Sub RAZ()
Me.Check1(0).Value = 0
Me.Check1(1).Value = 0
Me.Check1(2).Value = 0
Me.Check1(3).Value = 0
Me.Check1(4).Value = 0
End Sub
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 28 févr. 2009 à 15:44
If Me.Check1(0) Then i = i Or Caract.travailleur
If Me.Check1(1) Then i = i Or Caract.dupublic
If Me.Check1(2) Then i = i Or Caract.enfants
If Me.Check1(3) Then i = i Or Caract.mobilitereduite
If Me.Check1(4) Then i = i Or Caract.logement
Ca ne sert à rien d'additionner d'autant plus que ça traine !
cs_PROGRAMMIX
Messages postés1133Date d'inscriptionmercredi 2 octobre 2002StatutMembreDernière intervention24 juillet 20112 14 mars 2009 à 09:48
Une autre question...
Si cela est possible, comment faire pour utiliser cela de manière dynamique ?
Je m'explique.
Plutôt que de coder "en dur" 4 ou 5 catégories avec Enum, j'aimerais pouvoir utiliser un fichier dans lequel les catégories sont reprises et ainsi me donner la possibilité d'en ajouter/supprimer sans devoir recoder.
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 14 mars 2009 à 09:57
Faut alors se baser sur l'index de l'objet + 1.
Mais tu dois leur en affecter un chacun.
Par exemple,
chk_Option1 -- Index 1 -- "mobilité réduite"
chk_Option1 -- Index 2 -- "tout public"