Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1378 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  boucle for a l'interieur d'un select case possible en vb6?[RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

boucle for a l'interieur d'un select case possible en vb6?[RESOLU]

n°1571312
fabientoup​eti
Posté le 07-06-2007 à 09:03:15  profilanswer
 

bonjour,
 
j'aimerais savoir si il etait possible de créer une boucle for à l'interieur d'un select case en vb6.
je veux faire ça parce que je ne connais pas à priori le nombre de cas que je vais devoir tester.
 
si cela n'est pas possible, y aurait-il une autre solution pour arriver à un résultat similaire (autres boucles...)?
 
merci d'avance pour vos réponses
 
Fabientouepti


Message édité par fabientoupeti le 08-06-2007 à 11:34:39
mood
Publicité
Posté le 07-06-2007 à 09:03:15  profilanswer
 

n°1571352
tegu
Posté le 07-06-2007 à 10:29:33  profilanswer
 

Oui on peut mettre une boucle For dans une clause Case de la structure de programmation Select Case... en VB6.
 
Mais ça ne me semble pas convenir à l'usage que tu veux en faire.
Pour peu que je l'ai compris en tout cas.
 
Il faudrait que tu détailles un peu ton besoin stp.

n°1571391
fabientoup​eti
Posté le 07-06-2007 à 10:59:12  profilanswer
 

En fait ce que j'aimerais faire c'est incorporer une boucle for entre select case et le premier case voici exemple:

Code :
  1. Select Case t1
  2. For X = 1 To cantidad - 2
  3.     Case 5 * X
  4.     sum(X) = Sqr(LeTableau(j)(3) ^ 2 + LeTableau(j)(4) ^ 2 + LeTableau(j)(5) ^ 2)
  5.     sum(X) = Round(sum(X), 5)
  6.     af(X).writeline (sum(X))
  7. Next X


 
mais quand je fais ça mon programme ne se lance pas (message d'erreur) et je ne sais pas ce qui le gêne.
 
en ce moment chaque cas 5,10,15,20...sont ecrit explicitement mais pour la finalité de mon programme faut que je trouve une solution d'automatiser cela parce que par la suite je ne vais plus connaitre cantidad,ca va etre un parametre à renseigner au lancement du programme.
voilivoilou
en esperant avoir été clair.
 
merci d'avance
 
fabientoupeti

n°1571417
fabientoup​eti
Posté le 07-06-2007 à 11:21:31  profilanswer
 

je viens de lire plus precisement le message d'erreur, il me dit qu'il n'est pas possible de mettre autre chose qu'un commentaire entre select case et le premier case...ça ne m'arrange pas cela.
 
avant a la place de l'instruction select case j'utilisais l'instruction if...elseif mais ce n'es pas non plus possible d'introduire une boucle for juste avant le elseif...
 
là vraiment je ne sais pas comment solutionner mon probleme??
je vais continuer à chercher mais si quelqu'un a une idee je suis preneur parce que là pour l'instant j'avoue ne pas trop savoir comment faire.
 
voilivoilou
 
merci d'avance pour les aides que vous pourrez m'apporter  
 
fabientoupeti

n°1571541
dante4024
Posté le 07-06-2007 à 14:23:21  profilanswer
 

Pourquoi ne pas faire un if dans la boucle for si ta boucle for est executée quelque soit le case  

Code :
  1. For X = 1 To cantidad - 2   
  2. If t1 = 5 * X Then
  3. sum(X) = Sqr(LeTableau(j)(3) ^ 2 + LeTableau(j)(4) ^ 2 + LeTableau(j)(5) ^ 2)   
  4. sum(X) = Round(sum(X), 5)   
  5. af(X).writeline (sum(X))
  6. End If
  7. Next X


 
Sinon, si tu veux explicitement regarder tous les 5, essaie d'adapter un For x =  To ... Step 5 ou de jouer avec les modulo.

n°1571560
fabientoup​eti
Posté le 07-06-2007 à 14:45:16  profilanswer
 

Merci dante4024 pour ton aide
 
En fait je me prends la tete parce que c'est un peu plus compliqué (ou peut etre qu'à force de buter sur ce probleme je ne suis plus tres clair avec ce que je cherche).
 
je m'explique j'ai un fichier texte avec env 12000 lignes, la 1º colonne contient les chiffres que je veux analyser d'où t1  
 
le truc c'est que le 5 va etre amener à changer, cela depend de ce que l'on rentre au debut du prog (normalement ça doit varier entre 1 et 5)
 
j'ai changé 5 par ls
 

Code :
  1. For X = 1 To (cantidad - 2)
  2. For j = 4 To i 'principio de lectura :linea 4 (antes son solo declaraciónes)
  3.     'j=linea y 0=pimera columna
  4. Dim t1
  5. t1 = LeTableau(j)(0)
  6. Select Case t1
  7.     Case ls * X
  8.     sum(X) = Sqr(LeTableau(j)(3) ^ 2 + LeTableau(j)(4) ^ 2 + LeTableau(j)(5) ^ 2)
  9.     sum(X) = Round(sum(X), 5)
  10.     af(X).writeline (sum(X))
  11. End Select
  12. Next j
  13. Next X


 
mais avec ce prog rien ne s'ecrit dans mes fichiers texte??
quelqu'un pourrait il m'aider pour me dire où je fais une erreur parce que tout seul je ne m'en sort pas.
 
merci d'avance pour vos aides et merci pour celles qu vous avez pu me donner jusqu'à présent
 
 
voici la partie de prog qui fonctionne avec un nombre de case fixe (20) mais dans mon prog je ne vais pas savoir avt de le lancer le nombre de case a analyser...et mon probleme vient de là, c'est pour ça que j'aimerais automatiser l'analyser des cas
 

Code :
  1. For j = 4 To i 'principio de lectura :linea 4 (antes son solo declaraciónes)
  2.     'j=linea y 0=pimera columna
  3. Dim t1
  4. t1 = LeTableau(j)(0)
  5. Select Case t1
  6. 'test X=5mm
  7.     Case ls * 1
  8.     sum(1) = Sqr(LeTableau(j)(3) ^ 2 + LeTableau(j)(4) ^ 2 + LeTableau(j)(5) ^ 2) 'calculo el desplazamiento en el plano X
  9.     sum(1) = Round(sum(1), 5) 'limitación a 5 cifras despues de la coma
  10.     af(1).writeline (sum(1)) 'escritura en sum*.txt
  11. 'test X=10mm
  12.     Case ls * 2
  13.     sum(2) = Sqr(LeTableau(j)(3) ^ 2 + LeTableau(j)(4) ^ 2 + LeTableau(j)(5) ^ 2)
  14.     sum(2) = Round(sum(2), 5)
  15.     af(2).writeline (sum(2))
  16.     Case ls * 3
  17.     sum(3) = Sqr(LeTableau(j)(3) ^ 2 + LeTableau(j)(4) ^ 2 + LeTableau(j)(5) ^ 2)
  18.     sum(3) = Round(sum(3), 5)
  19.     af(3).writeline (sum(3))
  20. '.......
  21.     Case ls * 20
  22.     sum(20) = Sqr(LeTableau(j)(3) ^ 2 + LeTableau(j)(4) ^ 2 + LeTableau(j)(5) ^ 2)
  23.     sum(20) = Round(sum(20), 5)
  24.     af(20).writeline (sum(20))
  25. End Select
  26. Next j


 
 
 

n°1571584
dante4024
Posté le 07-06-2007 à 15:09:15  profilanswer
 

Si j'ai tout compris, le bout de prog faire :
 
Si t1 = ls * k, Alors on remplit le tableau k
 
ca revient à dire qu'on remplit le tableau (t1 / ls) non ? (en s'assurant que ca donne bien un entier (je ne sais pas si \ donne la division entière))
Plutot que de chercher le bon X qui marche (par ta boucle For), autant le calculer de manière directe puisque cela semble possible.  
 
Cela donnerai juste alors :
 

Code :
  1. X = t1/ls
  2. sum(X) = Sqr(LeTableau(j)(3) ^ 2 + LeTableau(j)(4) ^ 2 + LeTableau(j)(5) ^ 2)   
  3. sum(X) = Round(sum(X), 5)   
  4. af(X).writeline (sum(X))

n°1572083
fabientoup​eti
Posté le 08-06-2007 à 11:14:55  profilanswer
 

merci bcp pour ton aide dante 4024, grace a toi j'ai pu trouver une solution a mon probleme!
 
voici le bout de prog qui fonctionne impeccable, si ca peut aider quelqu'un

Code :
  1. For j = 4 To i  'principio de lectura :linea 4 (antes son solo declaraciónes)
  2.     ''j=linea y 0=pimera columna
  3. X = LeTableau(j)(0) / ls
  4. If X = CInt(X) Then
  5. sum(X) = Sqr(LeTableau(j)(3) ^ 2 + LeTableau(j)(4) ^ 2 + LeTableau(j)(5) ^ 2)
  6. sum(X) = Round(sum(X), 5)
  7. af(X).writeline (sum(X))
  8. End If
  9. Next j


 
merci encore
 
fabientoupeti
y a t il un truc a faire en particulier pour dire que ce probleme est resolu?

n°1572094
dante4024
Posté le 08-06-2007 à 11:24:08  profilanswer
 

Editer le titre pour rajouter Resolu ou Repondu.
 
le "If X = CInt(X)" me parait bizarre par contre ^_^. On doit pouvoir faire mieux pour tester si c'est un entier mais je sais pas trop comment.
Petet mettre directement  
X = CInt(LeTableau(j)(0) / ls) et zapper le if
Mais ca reste du peaufinage. :)

n°1572121
fabientoup​eti
Posté le 08-06-2007 à 11:39:11  profilanswer
 

jai peur que X = CInt(LeTableau(j)(0) / ls) ne fasse pas ce que je veux, je m'explique j'ai un fichier texte avec sur chaque ligne un chiffre pour la premier colonne, ce chiffre peut etre entier ou non.
et si j'ai bien compris CInt converti ce qu'il a entre () en entier...et moi ce n'est pas ca que je veux faire.
je veux juste reperer les entiers et travailler sur leurs lignes.
 
voilivoilou
merci encore pour tes aides
 
fabientoupeti

mood
Publicité
Posté le 08-06-2007 à 11:39:11  profilanswer
 

n°1572321
tegu
Posté le 08-06-2007 à 14:22:41  profilanswer
 

C'est la fonction Int() tout court qu'il te faut :
If Int(X) = X Then


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  boucle for a l'interieur d'un select case possible en vb6?[RESOLU]

 

Sujets relatifs
[Batch] [Résolu]Analyse d'une chaine de caractères + redimensionnement[mysql] Requete possible ?
Fonction Array() et variable, possible?[Résolu] eclipse exporter option -Xmx500m
[Resolu] taille de base de données oracle(RESOLU) diminution du temps d'execution [VBA EXCEL]
[RÉSOLU] requête MySQL select prochains évènements[résolu] Problème d'include chez Free mais pas en local
[VBA] [Résolu] Partager des variables entre plusieurs userform 
Plus de sujets relatifs à : boucle for a l'interieur d'un select case possible en vb6?[RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR