Programmation

Résolu
1217meyrin Messages postés 159 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 6 février 2007 - 7 janv. 2006 à 08:27
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 9 janv. 2006 à 23:30
Bonjour,
voici un bout de code qui imbrique 4 boucles for et 2 for each. le problème, c'est que les 2 boucles for i et j ne compte pas, elle reste à i=2 et j=1
auriez-vous la solution?


ch1_1 = 0



For a = 1
To 5
Step 2



For b = 1
To 61


triangle = "triangle" & b & "_" & a



For
Each ctrl
In Panel1.Controls



If ctrl.Name = triangle
And ctrl.Visible =
True
And ctrl.Top < socle1.Top
Then



For i = 2
To 6
Step 2



For j = 1
To 61


triangle2 = "triangle" & j & "_" & i



For
Each ctrl2
In Panel1.Controls



If ctrl2.Name = triangle2
Then



If ctrl.Left - 30 <> ctrl2.Left
And ctrl.Top <> ctrl2.Top
Then


chiffre = "coul" & Mid(triangle, 9, 12) & "g"


chiffrage()


ch1 = chiffreg



If ch1 > ch1_1
Then


ch1_1 = ch1


posx = ctrl.Left


posx = ctrl.Top


couleur1 = "coul" & Mid(triangle, 9, 12) & "g"


couleur_triangle()


coul1 = couleur


Label1.Text = b & a & j & i



End
If



Else



GoTo sortie



End
If



End
If



Next



Next



Next



End
If



Next



Next



Next

10 réponses

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
7 janv. 2006 à 12:02
Salut aussi à Meyrin et ses abords toujours embouteillés!

Moi je te conseil d'utiliser également les "points d'arrêt" (l'icone avec une main qui fait STOP). Ainsi, ton programme marquera une pause lorsqu'il rencontrera un de ces points. Du coup, en passant avec ta souris sur les variables des tool tip texte s'afficherons te donnant leurs valeurs (aux variables, pas aux TTT!). Ainsi tu pourras contrôler la valeur des variables et le trajet que prend ton prog. Pour faire repartir l'exécution, rien de plus simple : Exécuter lol!

Entre nous, si tes valeurs I et J restent statiques c'est très certainement parce que l'exécution n'arrive pas jusqu'a elles!!! Autrement dit, le curseur d'exécution est dévié avant d'arriver à ces lignes. Dit encore d'une autre manière : ton problème vient d'avant!

Soit le teste logique "
If ctrl.Name = triangle
And ctrl.Visible =
True
And ctrl.Top < socle1.Top
Then" empêche de poursuivre (à mon avis, ça vient de là! Mais ont peut pas vraiment te dire comme ça puisqu'on a pas les objets que tu utilises...). Il faudrait donc comprendre pourquoi le teste est toujours False. Autrement dit, comprendre pouquoi les valeurs que tu as mises n'atteignent pas ce que tu escomptais. Peut-être est-ce que ça vient de "ctrl.Name = triangle"... Où triangle devrait se mettre entre guillemets [ a mon avis c'est ça! ] !!! Ou alors, peut-être est-ce parce que ce ne sont pas des AND qu'il faut employer mais des OR ! Enfin, à toi de comprendre.

Sinon, c'est que ça vient de plus haut!!! "For
Each ctrl
In Panel1.Controls"

Est-ce que cela répond à ta question ???

Enjoy

<hr size ="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
3
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
7 janv. 2006 à 11:17
Le meilleur moyen de savoir ce qui se passe s'est d'utiliser l'option débogage de VB en pas à pas détaillé et tu verras bien ce qui coince.

Un ptit bonjour à la Suisse en passant je connais bien Meyrin près de Genève
Pascal Laurençon
0
cs_LeGrosWinnie Messages postés 47 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 18 mai 2007
7 janv. 2006 à 14:29
Tiens puisqu'on parle de bouche.

Quelle est la différence entre :

For blabla

Next

ET

For Blabla

Next nI

???
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
7 janv. 2006 à 15:52
Aucune si ce n'est que lorsque tu rencontres un Next dans un grand programme (assez grand pour ne pas avoir sous les yeux le For qui lui est rattaché), ben tu sais à quel For il appartient, tout simplement !!! Autrement dit, c'est surtout pour améliorer la lisibilité du code...

Mais attention... Il est important pour les débutant car il peut être source d'erreur... Si si... Par exemple, si un débutant marque ceci :

For t= 1 To 100
...
For i=1 To 100
...
Next
...
Next

Il va sans dir que le premier Next rencontré conserne la boucle "i". Mais il arrive parfois que les débutants ne pigent pas le paradoxe qu'il y aurait à écrire ceci :

For t=1 To 100

...

For i=1 To 100

...

Next t

...

Next i

Or, c'est parfois ce qu'ils voulaient marquer (en emplyant la première écriture). Du coup, le premier code ne leur donnera pas ce qu'ils attendaient (et ils chercheront longtemps avant de trouver!) et le deuxième génerera une erreur. Du coup, entre la peste et les rutabagas, ben moi, je préfère la peste .

Ce que je veux dire par là c'est qu'un message d'erreur est toujours préférable à une erreur sans message (phrase à inscrire dans les anales de VBFrance!!! ).

Ce qui, du coup, force les débutants à avoir une structure, à ne pas se mélanger les pinceaux, à bien indenter son code (mettre des espaces selon la profondeur), ...

Bon, ceci dit, y'a bien encore un pro qui va nous sortir qu'au niveau du compilateur on gagnent 3 nanos secondes en ne mettant rien... Bon, moi, perso, j'en sais rien : je me base uniquement sur le résultat !

Enjoy

<hr size ="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
7 janv. 2006 à 23:56
Bon, ceci dit, y'a bien encore un pro qui va nous sortir qu'au niveau du compilateur on gagnent 3 nanos secondes en ne mettant rien... Bon, moi, perso, j'en sais rien : je me base uniquement sur le résultat !

En fait, non il y a aucun gain en vitesse, le seul gain serait en temps de compilation, puisqu,au final, le code ASM est identique

désoler scsami, c'étai trop tentant lol

j'ai toujours préféré écrire la variable dans le next, c'est plus explicit comme écriture


-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
8 janv. 2006 à 00:01
C'est certain! C'est d'ailleurs ce que je recommande également!!!

Enjoy

<hr size="2" width="100%">
( Je me disais bien aussi qu'il y en aurait un ! mdr )
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
9 janv. 2006 à 23:13
Si le pb vient du fait que tu as omis les guillemets autour du mot Triangle dans ton test If ctrl.name = triangle ... voici ce que je te recommandes :
En haut de chacun de tes modules, ajoute la ligne suivante :

Option Explicit

Elle indique à VB que tu refuses de le laisser croire qu'un identificateur qu'il n'a jamais vu auparavant dans ton code, tel que le mot triangle, est un nom de variable.
En effet, par défaut, VB à la très facheuse habitude de penser que le codeur ne fait jamais d'erreur et que s'il a écrit If ctrl.Name = triangle, c'est qu'il veut comparer le nom du controle au contenu d'une variable nommée triangle, et non au mot "triangle" !!! SI tu ajoutes un Option Explicit, VB ne prend plus ce raccourci et n'accepte de considérer un symbole comme un nom de variable que si tu as volontairement déclaré cette var avant (avec un Dim Triangle As String, par exemple)
Dans ce cas, à la première execution, VB t'aurais bloqué sur cette ligne avec un code d'erreur parlant : "Identificateur inconnu" et aurait bloqué sur le mot triangle.
Tout ca donc pour militer en faveur du "Option Explicit"

A noter que si tu veux "automatiser" ce "option explicit" dans tes futurs modules de code, tu peux activer une option "Déclaration obligatoire des variables" dans les option de VB6 (pour tes modules déjà existant, il faudra l'ajouter toi-même par contre, ce n'est pas rétro actif)

Voila, en espérant ne pas être hors sujet -comme notre ami ScSami, je pense fortement que ton erreur vient de la !!-, j'espère avoir fait avancer le schmilblick ...

CR

PS : Pour l'histoire de rajouter ou pas les noms de variable aux next, perso, je ne les met jamais, pour plusieurs raisons :
1- En régle général, si je ne peux pas voir mon For et mon Next sur la même page de code, cela ne me plait pas et donc j'envisage sérieusement de revoir le contenu de la boucle (en faisant une sub/function à la place par exemple)
2- Je code désormais en VB.NET sous VS 2003 et quand tu finis de taper ta ligne de for, et que tu fait entrée, il te rajoute tout seul le next
3- Je suis fainéant !

Voila, maintenant, Papy Mougeot va se coucher ....
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
9 janv. 2006 à 23:15
Oups !!! Je viens juste de voir la ligne juste en dessous du For b = ... ou tu construit le contenu de la variable nommé triangle !!!
Bon !! Du coté je suis totalement azymuté moi avec mon "Option Explicit" !! C'est malin !!

CR
0
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
9 janv. 2006 à 23:18
c'est ça crenaud quand on veut trop répondre lol
je connais ça lol


-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
9 janv. 2006 à 23:30
C'est surtout que je n'en ai plus les capacités intellectuelles après 23h00 !!! C'est l'age mon pauv' monsieur
0
Rejoignez-nous