problème avec instruction do

problème avec instruction do - VB/VBA/VBS - Programmation

Marsh Posté le 28-03-2006 à 16:18:13    

Bonjour,
 
voilà un bout de mon programme:
 
Do Until Z = Zsol
    NUM_LIGNE = NUM_LIGNE + 1
    Z = Cells(NUM_LIGNE, 3).VALUE
    MsgBox "Z=" & Z
    MsgBox "Zsol=" & Zsol
    If Z = Zsol Then Exit Do
Loop
 
Il y a bien un moment où Z=Zsol (confirmé par les msgbox) pourtant la boucle ne s'arrête pas (je suis obligée de l'arrêter sauvagement)
je ne comprends pas pourquoi si quelqu'un a une idée ce serait cool..
merci d'avance

Reply

Marsh Posté le 28-03-2006 à 16:18:13   

Reply

Marsh Posté le 28-03-2006 à 16:33:18    

Pour commencer ton if Z = Zsol ne sert pas, puique que c'est le principe du do until.
Après tt dépend si ton Z et Zsol sont du  texte et du num.
Déclare bien Z et Zsol en num ou en texte...
et normalemen ca devrai marché.
si c du numérique écrit until int(z) = int(zsol).

Reply

Marsh Posté le 28-03-2006 à 16:49:24    

merci ça marche...

Reply

Marsh Posté le 28-03-2006 à 18:05:09    

je comprends pas trop dans les conditions pour les if y'a des fois où ça passe quand je mets pas de int() et des fois où ça passe pas...
y'a une raison?

Reply

Marsh Posté le 28-03-2006 à 18:23:37    

oui tout dépend si tu as bien déclarer tes variables en numérique.
si oui normalement il n'y apas besoin de le faire.
mais si tu n'as pas déclaré ta variable alors pour lui ca sera du type variant alors il y aura "5" et non 5 par exemple

Reply

Marsh Posté le 29-03-2006 à 15:22:16    

justement je n'avais rien déclaré en numérique et y'a certaines boucles qui marchaient et d'autres non
 
celle là marchait:
If Z = Z_sol Then
        Cells(NUM_LIGNE, 14).VALUE = Cells(NUM_LIGNE, 9).VALUE
    End If
celle là marchait pas:
If Z < Z_sol Then
        Cells(NUM_LIGNE, 14).VALUE = Cells(NUM_LIGNE - 1, 9).VALUE / 2 + Cells(NUM_LIGNE, 9).VALUE / 2
    End If
 
je vois pas trop pourquoi... mais bon du coup j'ai tout déclaré "as integer" et ça marche mais ça m'embête de pas comprendre

Reply

Marsh Posté le 30-03-2006 à 15:19:10    

je nais pas pourquoi, mais de tt facon fauit meix tj tt bien déclaré

Reply

Marsh Posté le 30-03-2006 à 15:26:33    

si tu n'as pas déclaré c'est comme si tu comparais "du texte"
"cinq" = "cinq" ca peut marché
mais "cinq" < "cinq" ca ne marchera jamais. et comem c'est du type variant il ne te mettra pas de message d'erreur.

Reply

Marsh Posté le 30-03-2006 à 15:32:51    

pour éviter ca, perso, je cast les types comparés =)
 
"If Cint(Cells(x,y).Value) > Cint(Cells(z,t).Value Then"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed