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
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
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 ?
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
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 !
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.
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"