VB : HELP SUR LES BOUCLES - Programmation
Marsh Posté le 29-03-2001 à 09:56:50
Le code marche mais c'est peut etre autour que ca ne marche pas.
A quoi sert la variable verif_champ ??
Marsh Posté le 29-03-2001 à 10:04:05
Salut,
Attention quand meme, tu ecrase la valeur de verif champ a chaque passage. Est-ce normal.
A+
Marsh Posté le 29-03-2001 à 11:12:44
For i = 1 To 15
verif_champ = Iif(Len(Text(i).text) = 0, False, True)
Next i
Marsh Posté le 29-03-2001 à 11:37:02
Bendes> je vois pas la différence, je préfères même la première version, car y'a pas évaluation des expressions contenues dans la fonction Iif
Text(i), c'est quoi ? une variable objet ?
Tu devrais l'appeler autrement je pense
Marsh Posté le 29-03-2001 à 16:42:45
OLALAL
Vous etes pire ke moi
text(i) c'est la zone de text. Et quand je boucle dessus, ca me m'evite de me taper text1.text ... text15.text
Marsh Posté le 29-03-2001 à 17:28:03
euh
moi pas bien comprendre
Toi dire: "text(i) c'est la zone de text"
Tu as donc un objet de type textbox que tu as nommé text(i) ?
Aaahhh c'est bizarre non ? Ce serait pas plutot un tableau d'objets de type textbox ?
Et moi ce que je disait c'est que "text" est un mot réservé en VB, donc ne pas n'utiliser pour nommé les variables ou les objets
Marsh Posté le 30-03-2001 à 12:54:19
La syntaxe text(i).text, ne marche que si tu as créer un groupe de texte avec le même nom.
Je m'explique :
Tu insères une zone de texte, puis tu fais un copier/coller, à la question voulez-vous créer un groupe, tu réponds oui.
De cette manière là, tu pourras utiliser leurs index respectifs pour obtenir la valeur.
Marsh Posté le 30-03-2001 à 16:39:02
Qd tu mets text(i), ça coule de source que c un groupe de texte box ki porte le même nom et qui sont indexé...Et non le nom de l'objet en question...
Pour thegti :
La fonction 'Iif' est très pratique lorsque tu fais des if..then..else pour ne changer la valeur que d'une variable ou autre...Y a moins a écrire!
syntaxe : Toto = Iif(i = 1,"Bonjour", "Aurevoir" )
si i = 1 alors Toto = "Bonjour" sinon Toto = "Aurevoir"
Marsh Posté le 30-03-2001 à 17:29:12
Oui mais:
1) il y a évaluation des expressions paramètres de la fonction
Par exemple, si on a:
y=Iif(x=5,6,x+7)
et x=5
et ben le calcul x+7 sera effectué
ce qui n'est pas le cas avec un if
Le code s'en trouve alourdi
2)Même dans un cas simple comme le tien :
Toto = Iif(i = 1,"Bonjour", "Aurevoir" )
il y a des passages de paramètres à une fonction et la encore ca alourdi le code
Personnellement, j'ai pas testé mais le code avec un Iif doit s'éxécuter bien plus lentement que un If classique
Maintenant c'est vrai que y'a un confort d'utilisation
Marsh Posté le 30-03-2001 à 21:35:01
thegti a écrit a écrit : Personnellement, j'ai pas testé mais le code avec un Iif doit s'éxécuter bien plus lentement que un If classique Maintenant c'est vrai que y'a un confort d'utilisation |
Traditionnellement, dans un language compilé, c'est l'inverse : l'opérateur ternaire (Iif en VB, ( ? : ) en C/C++/Java) permet de générer un code objet plus rapide et plus compact qu'un if classique. Sinon, on ne l'aurait pas inventé...
Au passage, il n'y a pas besoin du Iif ici. Comme la valeur retournée par le Iif est un booléen, on peut directement écrire :
For i = 1 To 15
verif_champ = (Len(Text(i).text) != 0)
Next i
Ce qui a l'avantage de la lisibilité et de la compacité.
Marsh Posté le 31-03-2001 à 01:02:03
Ayant fait un peu de compilation pendant mes études,
le If classique est traduit en langage machine par des branchements simples
Et la qu'en tu dis que iif génère un code plus rapide, je vois pas comment en langage machine, on peut faire du conditionnel qui s'éxécute plus rapide
Au passage, je vois pas ce que tu veux dire par génèrer du code objet pour du VB ?
Marsh Posté le 31-03-2001 à 01:39:54
Je ne sais pas ce qu'il en est du groupe de texte créé par VB. Maisil me semble que si à la question "voulez-vous créer un groupe ?" lors du copier-coller, vous répondez oui, cela veut dire que l'objet Text ne désigne plus la zone de texte mais le groupe. Dans ce cas il faut accéder aux objets contenus dans le groupe, et cela n'exclue pas que ceux-ci doivent maintenant être nommés, ou bien être accéder par leur indice d'objet.
Hors les indices d'objets sont globaux pour toute la feuille, et donc un groupe peut très bien avoir des objets dont les indices ne sont pas tous de 1 à N.
Du coup en utilisant Text(i) on ne pointe pas forcément sur la textbox attendue, mais peut-être arfois sur rien du tout. Et on a une erreur au moment où on veut accéder à l'attribut text de Text(i) puisque Text(i) n'est pas un objet...
Le seul moyen est donc de nommer explicitement les textbox du groupe.
C'est ce qu'on fait en JavaScript, où nomme couramment les champs <INPUT> en spécifiant leur ID par exemple:
<INPUT type="text" id="text1" value="">
<INPUT type="text" id="text2" value="">
<INPUT type="text" id="text3" value="">
<INPUT type="text" id="text4" value="">
Et on peut accéder aux valeurs des textbox ainsi:
<SCRIPT type="JavaScript">
function go() {
for(var i=1; i<=4; i++) {
if (eval("document.text"+i).value="" )
return false;
}
return true;
}
</SCRIPT>
Pourquoi faire encore du VB aujourd'hui alors que JavaScript est standardisé et multiplateforme et peut faire exactement la même chose avec du HTML au lieu de ressources VB ?
Et puis le développement en JavaScript peut se faire avec Office directement, sans acheter Visual Basic (si on veut utiliser MSDE pour produire un fichier .CHM avec le HTML compiler, ou pour utiliser les classes ActiveX avec le navigateur d'objets), voire même avec juste le navigateur Web et un éditeur de texte et MsPaint fournis gratuitement avec Windows, ou gratuitement aussi sous Linux en se passant même des ActiveX... (Avec déploiement possible de l'application sur le Web au lieu du PC Windows traditionnel)
Marsh Posté le 28-03-2001 à 22:20:25
Mon probleme, il veut pas prendre en consideration le text(i).text
For i = 1 To 15
If Len(Text(i).text) = 0 Then
verif_champ = False
Else
verif_champ = True
End If
Next i
HELP