Probleme de boucle

grand_dragon_rouge54 Messages postés 23 Date d'inscription dimanche 30 avril 2006 Statut Membre Dernière intervention 14 octobre 2006 - 19 mai 2006 à 18:47
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 19 mai 2006 à 22:01
Je comprends pas.


J'ai écris le code suivant.


j = 0
While (Label(t).Caption <> 0) Or (j = 5)
   t = TireChiffre()
   j = j + 1
Wend

En fait, il s'agit de données mises aléatoirement dans 11 labels sous VB6.

> La fonction TireChiffre tire un chiffre compris entre 1 et 11 et le renvoie. Ce chiffre permet de définir quel label va recevoir la donnée.

> Tous les labels font partis d'un group nommé label. J'ai donc 11 labels nommés Label(1), Label(2), ... Label(10) et Label(11).

> Plus haut dans le programme, tous les labels sont initialisés avec un affichage de 0.

> Je veux que si le sort tombe sur un label dont l'affichage est occupé par autre chose qu'un zéro, il tire un autre numéro de label.

 ==>Néanmoins, afin de ne pas chercher indéfiniment un numéro de case si le sort ne tombe jaùais sur une place libre, je défini que le système n'aura que 5 tirages pour trouver une place libre. Après je définirais une place libre d'une autre manière.

 Le problème c'est que ma boucle n'a pas l'air de fonctionner. En effet, elle dépasse le nombre 5 pour arriver en OVERFLOW à 32767.

Quelqu'un aurait une idée ?

D'après moi ma boucle telle quelle signifie : 
TANT QUE l'affichage du label en cour n'est pas égal à 0 OU que le compteur j n'est pas égal à 5
   ALORS   on tire un nouveau numéro avec la fonction TireChiffre
                   on incrémente le compteur j pour montrer que l'on vient de faire un essai de nouveau 
                     tirage

Arrivé en fin de boucle on test l'affichage du nouveau label ou si le compteur est arrivé à 5

Ai-je fais une erreur ?

Merci à tous.

Dragon.

Que le VB soit avec vous...

3 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 mai 2006 à 21:16
Normal, ta boucle est infinie.

Quelque soit la valeur de Label(t).Caption, il sera différent de 0. Label(t).Caption est une chaine de caractère, 0 est un nombre.

modifie en  While (Label(t).Caption <> "0") Or (j = 5), ça devrait aller mieux je pense

0
grand_dragon_rouge54 Messages postés 23 Date d'inscription dimanche 30 avril 2006 Statut Membre Dernière intervention 14 octobre 2006
19 mai 2006 à 21:52
Ben j'ai fait la modif' mais ça ne marche pas.

En fait, ça me donne encore une erreur  OVERFLOW et ça me  met en surligné jaune la partie j = j+1.


Quand je me positionne sur le j ça me donne 32767.

Est ce que tu aurais une autre idée ?

Merci.

Que le VB soit avec vous...
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 mai 2006 à 22:01
Ok, j'avais pas réfléchi suffisament.

Tu as fait une condition OU, c'est à dire que tant que l'une des 2 conditions est remplie, tu exécute la boucle, quelque soit la valeur de la seconde condition. Donc tant que Label<>0 tu boucle quelque soit la valeur de j

Ta condition doit etre Tant que label<>0 ET j<5 tu boucle, donc essaye avec ça
WHILE (Label(t).Caption <> "0") AND (j<5)

0
Rejoignez-nous