Comment déclarer une variable [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,

Je voulais savoir simplement comment déclarer la variable "s" !
S$ = Format$(calc1 + Int(5 + (Int(i) * 100) / 100)) & vbCrLf

C'est ce que j'ai eu parce qu'il parait que je mélangeait 2 type de variables en faisant ça :
calc1 = calc1 + Int(5 + (Int(i) * 100) / 100) & vbCrLf

J'ai regardé dans l'aide mais y a pas trop d'explications.
Il faut dire aussi que c'est un peu de l'hébreu pour moi !

Merci d'avance de votre aide.

Cordialement. JLB59

33 réponses

Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
Bonjour,

De quelle version de VB parle t-on ? VB6 ? VB.Net ?


../\_/\..
.( o.o ). ~ ElGuevel ~
..> - <..

Bonjour,

Tu dois calculer ta valeur avant de la formater. Tu ne peux pas mêler des chiffres et un caractère de contrôle (vbcrlf) dans une oprération mathématique; même que je ne crois pas non plus que tu puisses ajouter un retour de chariot (vbcrlf) à ta ligne de formatage. Ce serait plus facile si tu nous disais ce que tu veux faire et montrer quelques lignes de code avant et après.

Quand je vois ta ligne, cela m'inspire que tu veux afficher un résultat avec 2 décimales. Il y a moyen de le faire avec des chaînes de formatage, ou la fonction Round(). Rendu-là, cela dépend surtout de la version de VB.
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
ALors, voila.
Une variable se définie par sa portée dans le programme et surtout son type !
Dim est le plus utilisé et rend visible la variable partout dans ton code (voir aussi public, private etc...)
En suite le type, torchon ou serviette ?
Entier, double, chaine de caractères, etc....

Conclusion : Si tu fais du calcul (divistion etc..) il te faut des doubles (réels), si tu veux y placer du texte il te faut un string.
Aprés il est tout a fait possible de transformer un double en string par conversion !
En vb cela doit être Cstr(double) donen double en texte.
En .NET c'est encore plus simple regarde et comprends.
dim monChiffre as double
monChiffre = (145/100) * autreChose / 10
Label1.text = monChiffre.TOSTRING <= et voila le label qui attend un texte pour sa propriété d'affichage text, recois bien la valeur réel de monChiffre converti en format text.

Allez au boulot ;) bonne prog
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches. Merci
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Tiens d'ailleur dans ton code tu ne reconnais rien qui ressemblerai à une conversion ?
calc1 = calc1 + Int(5 + (Int(i) * 100) / 100)


Calc1 est un entier (int) car il est converti à chaque opération qui nécessite des doubles.
on peut lire ainsi :
ajouter à la valeur de calc1 le résultat de la convertion en entier de (i%+5)
c'est plus clair ?
@++

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches. Merci
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
C'est surtout que l'ide VB.NET est gratuit ! tapes télécharger vb.net et hop. Pour une fois que microsoft fait un "don" cela mérite de le dire !
Idem pour tous les languages ! c/c++/csharp etc...

Je vais ce week end poster une source de ton soft pour que tu puisses voir le principe et le convertir en Vb6.

kenavo

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches. Merci
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

Merci de vos réponses. J'utilise VB6.
Je mets une partie du code et l'image résultante.

Option Explicit
Dim compte1$, calcul1$, compte2$, calcul2$


For i = 1 To 8
compte1$ = Format$(cpt1 & i) & vbCrLf
TF1 = compte1$
calcul1$ = Format$(calc1 & Int(5 + (Int(i) * 100) / 100)) & vbCrLf
TF11 = calcul1$
Next i
    
For j = 9 To 16
compte2$ = Format$(cpt2 & j) & vbCrLf
F1 = compte2$
calcul2$ = Format$(calc2 & Int(5 + (Int(j) * 100) / 100)) & vbCrLf
F11 = calcul2$
Next j
    
For k = 17 To 24
cpt3 = cpt3 & k & vbCrLf
M1 = cpt3
calc3 = calc3 & Int(5 + (Int(k) * 100) / 100) & vbCrLf
M11 = calc3
Next k
...

Avant la modif :




Après :



Cordialement. JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

Bonjour à tous,

Y quelqu'un qui pourrait m'aider à déclarer une variable "nom-de-la-variable$" ?
J'ai déclaré comme ça mais je sais pas si c'est correct ! En tout cas, pas d'erreur lors de l'exécution :
Option Explicit
Dim compte1$, calcul1$, compte2$, calcul2$


Merci d'avance.

[i]PS : comment effacer ces variables avec une boucle ?
/i
Cordialement. JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

Ah j'allais oublié, pourquoi avec ces variables, je n'arrive qu'à afficher la 8ème position dans une boucle comme l'a montré le dessin ?
Cordialement. JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

Merci beaucoup Adn56, c'est vrai que tes explications sont très claires.

Donc, avec ce que tu me dis, je vais essayer de voir de plus près, parce que ça déconne vraiment !

Cordialement. JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

Conclusion : Si tu fais du calcul (divistion etc..) il te faut des doubles (réels), si tu veux y placer du texte il te faut un string.
Aprés il est tout a fait possible de transformer un double en string par conversion !
En vb cela doit être Cstr(double) donen double en texte.

On m'avait donné l'astuce :
calcul1$ = Format$(calc1 & Int(5 + (Int(i) * 100) / 100)) & vbCrLf
Maintenant est de savoir si c'est correct parce qu'il y a un prb de comptage dans une boucle. Comme le montre l'image, je n'affiche que l'index 8 pour la 1ère boucle, et 16 pour la 2ème (qui a la même fonction).



Option Explicit
   Dim compte1$, calcul1$ As String
   Dim calc1 As Double
...

Private Sub Option1_Click(Index As Integer)

Select Case Index

Case 0 

    Label2 = Option1(0).Caption
    For i = 1 To 8
    compte1$ = Format$(cpt1 & i) & vbCrLf
    TF1 = compte1$
    calcul1$ = Format$(calc1 & Int(5 + (Int(i) * 100) / 100)) & vbCrLf
    TF11 = calcul1$
    Next i

    For j = 9 To 16
    compte2$ = Format$(cpt2 & j) & vbCrLf
    F1 = compte2$
    calcul2$ = Format$(calc2 & Int(5 + (Int(j) * 100) / 100)) & vbCrLf
    F11 = calcul2$
    Next j

...


Est-ce qu'éventuellement, tu ne verrais pas une erreur ?

Merci de ton aide.
Cordialement. JLB59
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
je sais pas trop, mais c'est quoi que tu affiche ?
TF1 et F1 ? si oui il faut une boucle là aussi
TF1 puis TF2 puis TF3 sinon TF1 prends la derniére valeur de la boucle est puis c'est tout soit 8 ici
c'est ça à mon avis ton soucis ! regarde les autres boucles pour comprendre.
@++

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches. Merci
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

TF1 et F1 ? si oui il faut une boucle là aussi
TF1 puis TF2 puis TF3 sinon TF1 prends la derniére valeur de la boucle est puis c'est tout soit 8 ici

TF1 ou F1 sont simplement des labels pour l'affichage.
Pour moi, c'est plus parlant que Label1 et Label11 !
Mon soucis, comme tu le dis, est que chaque label (TF1, F1, M1, N1, etc) sont pour le comptage des boucles.
Par exemple :
[i]de 1 à 8 affichage dans TF1
9 à 16 affichage dans F1
17 à 24 affichage dans M1
/ietc.

Comme c'est pour un essai de test de QI pour les enfants, ces boucles sont le nombre d'items.

Tu comprends mieux maintenant ?


Cordialement. JLB59
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

J'ai oublié de te dire, les labels TF11, F11, M11, N11, etc., c'est pour l'affichage du calcul.

Très Faible –> TF1 (boucle de 1 à 8)
Trés Faible –> TF11 (affichage du calcul) (boucle * x = TF11)

Faible –> F1 (boucle de 9 à 13)
Faible –> TF11 (affichage du calcul) (boucle * y = TF11)

idem pour les autres.
Moyen –> M1
Normal –> N1
Parfait –> P1
Excellent –> E1
Remarquable1 –> R1
Remarquable2 –> RR1
En fait, dans le prog, l'âge n’est pas pris en compte.
C’est simplement une tranche d’âges ( de x à y ans), et c’est sur cet argument que le calcul diffère !
de 7 à 10 ans –> calcul1$ = Format$(calc1 & Int(5 + (Int(i) * 100) / 100 )) & vbCrLf
de 11 à 13 ans –> calcul1$ = Format$(calc1 & Int(5 + (Int(i) * 100) / 90)) & vbCrLf
de 13 à 16 ans –> calcul1$ = Format$(calc1 & Int(5 + (Int(i) * 100) / 80 )) & vbCrLf

Par exemple :
Si le gamin a répondu à x items, suivant son âge, le calcul sera différent, mais il est toujours affiché le nombre d’items exécutés et les points afférents.

Tu vois mieux où je veux en venir.

Le problème est que si je laisse compte1$ Format$(cpt1 & i) & vbCrLf au lieu de cpt3 cpt3 & k & vbCrLf
, la boucle n'affiche que le dernier élément.
Par exemple :
    For i  = 1 To 8
        compte1$ = Format$(cpt1 & i) & vbCrLf
        TF1 = compte1$
        calcul1$ = Format$(calc1 & Int(5 + (Int(i) * 100) / 100)) & vbCrLf
        TF11 = calcul1$
    Next i


C'est plus clair comme ça ?

Cordialement. JLB59
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Humm je pense avoir compris, en fait tu passe par un seul label par colonne et tu fais des retour à la ligne pour chaque occurrence de ta boucle. Alors là je sais le faire en VB.NET mais en VB6 cela fait trop vieux pour moi.
Un truc du style :
For i = 1 To 8
compte1$ = Format$(cpt1 & i)
TF1 = TF1 & compte1$ & vbCrLf
calcul1$ = Format$(calc1 & Int(5 + (Int(i) * 100) / 100))
TF11 = TF11 & calcul1$ & vbCrLf
Next i

Cela me parait déja un peu plus logique non ? si tu ne conserve pas la valeur antérieur de tf1 OU FR3 ^^ tu l'écrase à chaque coup ! DOnc c'est TF1 = TF1 et la suite
kenavo, penses à résolu !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches. Merci
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Je viens de relire ton codage du début de post avec les imprims écran, c'est vraiment de la logique un peu tordu ton affaire ! plein de calcul pour simplement afficher un incrément Oo'

essaye un truc de ce style

'init
tf1 = ""
f1 =""
m1=""
etc....
For index as integer = 1 to 50
select case index
case <=8
tf1 = tf1 & format$(i) & vbcrlf
tf11 = tf11 & format$(i+5) & vbcrlf

case >8 and <= 19
f1 = f1 & format$(i) & vbcrlf
f11 = f11 & format$(i+5) & vbcrlf

etc....

Le +5 correspond à un niveau d'age, donc replace le par une variable qui se met à jours en fonction du choix de la selectbox ou combobox...

dim age as integer = 0 '(en début de programme)

Private Sub Option1_Click(Index As Integer)
Select Case Index
Case 0
age = 5
case 1
age = x
case 2
age = y
end case
end sub

tu me suis ?
cela sera déja plus propre et surtout écrit une seul fois pour toute !

bonne prog. @++


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches. Merci
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

TF1 et F1 ? si oui il faut une boucle là aussi
TF1 puis TF2 puis TF3 sinon TF1 prends la derniére valeur de la boucle est puis c'est tout soit 8 ici
c'est ça à mon avis ton soucis ! regarde les autres boucles pour comprendre.

La boucle, 1 seule , sert à afficher un nombre dien défini, par exemple de 1 à 8, et ces nombres sont calculés, c'est ce qui s'affiche dans l'autre colonne.

Donc, faire 2 boucles est impossible.

Et les autres boucles, de 9 à 16, de 17 à 24, etc., ont exactement le même processus.

Mon prb est qu'en ne faisant pas de "Format$" dans une bouche mais en le laissant de type "Integer", la boucle s'affiche bien.
Si je mets "Format$", il n'y a que la dernière valeur qui s'affiche !
Par exemple :
Pour une boucle de 1 à 8, seul la dernière est affichée, soit 8 et bien-sur son calcul dans le label TF11.


Cordialement. JLB59
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
je t'ai donner la solution a ton problème dans mon post n°1 ci dessus, le second est juste une optimisation. je viens de le tester chez moi et cela marche.
Prends le temps de lire ce que nous te donnons, stp.
cordialement

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches. Merci
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

Bonjour Adn56,

J'ai tellement modifié et re-modifié le programme que tout se brouille dans ma manière de voir les choses.

Je suis d'accord avec toi en disant que c'était un peu tordu !
Pour ma part, je dirais que c'est complètement le souk (pour ne pas dire b.....)

Je vais reprendre calmement en prenant ton exemple, qui, je suis sûr, sera plus approprié que ce que j'ai fait.

Je te tiendrai informé des suites de ce test.

En fait, si ça marche chez toi, je ne vois pas pourquoi il en serait tout autre chez moi !

Merci beaucoup de ta précieuse aide Adn56.

A+

Cordialement. JLB59
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
Penses aussi à remplir les valeurs des labels qui ne changent jamais une seul fois à l'ouverture de ta form.
Tu pourrais même le faire sans code directement dans l'IDE (enfin en VB.NET on peut).

Ensuite déclare tes variables en début de code.
Il doit y avoir la variable integer age.
Et deux ou trois constante double qui correspondent à tes trois facteur d’échelle que prendra la variable age selon le choix de option1.
const age1 as double = 1.00
const echelle2 as double = 1.11
const echelle3 as double = 1.25

Ensuite les procédures :
1-form load qui appel Init_label(0)
2-option1_index changed qui appel Init_label(index+1)

la fonction principal de mise à jour des labels "score"

private sub Init_label(byval valeur as integer)
si valeur = 0 alors tous les labels sont vident
si valeur = 1 alors affiche age 1 selon constante 1
si valeur = 2 alors affiche age 2 selon constante 2
si valeur = 3 alors affiche age 2 selon constante 2
end sub

voila la structure fini
au travail ;) kenavo.

____________________
Réponse exacte ? => "RÉPONSE ACCEPTÉE" pour faciliter les recherches. Merci
Messages postés
140
Date d'inscription
jeudi 21 septembre 2000
Statut
Membre
Dernière intervention
16 août 2012

Bonjour Adn56,

Vois-tu ce que tu me donnes est encore une fois du changement à faire.

Comme je te l'avais dit, à force de modifier, je sais plus où j'en suis parce que quand je modifie une chose, il faut modifier le reste.

En définitive, reprendre tout le programme de A à Z. Ce n'est pas qu'il soit lourd, heureusement d'ailleurs, vu que c'est un test.

Le logiciel original est plus imposant mais il n'y avait pas de notation des tests basée sur l'âge.

D'ailleurs, même si cet essai est concluant, il va falloir que je fasse pareil avec l'autre... et là, c'est pas gagné d'avance parce que là, il faut tout reprendre complètement.

En tout cas, tes idées sont très bonnes et j'en note chaque détails qui me sont utiles, mais il y a des choses toutes nouvelles pour moi, alors il me faut le temps de voir ça de plus près.

J'utilise encore VB6 parce que j'ai ce logiciel enregistré à mon nom, et comme c'était pas donné à l'époque, je n'ai pas trop les moyens de prendre VB.net qui, je suppose, serait d'une plus grande utilité, vu que beaucoup utilise cette version.


Cordialement. JLB59