1217meyrin
Messages postés159Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention 6 février 2007
-
7 janv. 2006 à 08:27
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDerniè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
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 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". )
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 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". )
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_dragon
Messages postés2336Date d'inscriptionsamedi 14 juillet 2001StatutMembreDernière intervention 5 mai 20096 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
-------------------------------------------------
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 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 ....
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 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 !!
cs_dragon
Messages postés2336Date d'inscriptionsamedi 14 juillet 2001StatutMembreDernière intervention 5 mai 20096 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
-------------------------------------------------