Rechercher : dans
Par :

Problème avec la boucle while sur vba

Dernière réponse le 20 avr 2009 à 11:46:14 buffalo31, le 20 avr 2009 à 09:29:54 
 Signaler ce message aux modérateurs

Bonjour,

Je suis en train de faire un petit code sur vba excel mais j'ai un probleme avec la boucle while qui n'intègre pas les deux conditions que je lui associe:

ac = Worksheets("Interface").Cells(3, 3).Value
eng = Worksheets("Interface").Cells(4, 3).Value

While Worksheets("DataSheet").Cells(i, 1).Value <> ac And Worksheets("DataSheet").Cells(i, 2).Value <> eng
i = i + 1
Wend
......
.......
Quand j'exécute le code, dès que la première condition est vérifiée, il sort de la boucle sans tenir compte de la seconde condition.

Alors comment faire pour que ma boucle while prenne en compte les deux conditions? J'ai essayé en mettant des paranthèses pour séparer les deux conditions, mais ça change rien.

Merci d'avance

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Problème avec la boucle while sur vba » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Java: Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditonnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...
Javascript - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle' On appelle structure conditonnelle les instructions qui permettent de tester si une condition est vraie ou non, ce qui permet notamment de donner de l'interactivité à vos scripts : Instruction...

1

le père, le 20 avr 2009 à 10:33:47

Bonjour

le while de VBA gère parfaitement un "et" entre deux conditions, je pense plutôt que c'est toi as un petit problème pour exprimer ce que tu veux ;)

Peux-tu donner quelques exemples (avec des valeurs) de cas où la boucle doit continuer et d'autres où elle doit s'arrêter ? Tu te rendras probablement compte toi-même de ton erreur.

Répondre à le père

2

Dante-33, le 20 avr 2009 à 10:41:56

Essaye de mettre des parenthèses comme ceci

While ((Worksheets("DataSheet").Cells(i, 1).Value <> ac) And (Worksheets("DataSheet").Cells(i, 2).Value <> eng ))

mais sinon il a raison pour les opérateurs logiques en VBA voici le cours

http://www.commentcamarche.net/contents/vbscript/vbsop.php3
Les gens qui disent que windows est pourri et qui continuent de l'utiliser me font bien rire ...
95 % des erreurs proviennent de ce qu'il y a entre le clavier et la chaise

Répondre à Dante-33

3

buffalo31, le 20 avr 2009 à 11:27:47

J'ai essayé avec les paranthèses tel que vous avez indiqué mais ça change toujours pas. Voici un exemple:

Dans Worksheets("DataSheet") .Cells(i, 1) j'ai des avions et dans Worksheets("DataSheet") .Cells(i, 2) j'ai des moteurs.

Je rentre dans une feuille qui s'appelle Worksheets("Interface") un avion (ac) et un moteur (eng) respectivement "B747" et "PW4000"

L'idée c'est de récupérer la ligne i de Worksheets("DataSheet") où Worksheets("DataSheet") .Cells(i, 1) = "B747" et Worksheets("DataSheet") .Cells(i, 2) = "PW4000" pour faire d'autres traitements.

Qd je rentre le moteur qui correspond au bon avion, ya pas de pb

Mais qd je rentre un moteur qui ne correspond pas à l'avion, je m'attends à ce qu'il ne trouve rien, à la limite je mets une conditions pour qu'il sorte de boucle. Mais à ma grande surprise, il récupère la ligne i de la première condition qui est vérifiée.

Donc en gros les deux condtions paraissent dissociées, ce que je ne comprends pas.

Répondre à buffalo31

4

le père, le 20 avr 2009 à 11:39:26

Tu veux trouver Worksheets("DataSheet") .Cells(i, 1) = "B747" et Worksheets("DataSheet") .Cells(i, 2) = "PW4000"
Alors il faut boucler tant que Worksheets("DataSheet") .Cells(i, 1) <> "B747" OR Worksheets("DataSheet") .Cells(i, 2) <> "PW4000"

Répondre à le père

5

 buffalo31, le 20 avr 2009 à 11:46:14

Super ça marche, je me plantais au niveau de la négation dans mes opérateurs logiques lol! un peu de retour dans la logique en math me ferait pas de mal.
Encore une fois merci merci et à bientôt

Répondre à buffalo31