VBA - [If]...[Then]...[Else] dans une boucle [For each]

Bonjour,

Je m'inscrit sur ce forum, mais je m'en sers énormément depuis quelques semaines pour avancer sur mon projet VBA, donc avant tout grand merci.

Je travaille sur un outil VBA permettant de gérer des lits pour des patients hospitalisés; je ne vous poste évidement pas tout l'outil, mais un exemple qui illustre mon problème.

J'ai besoin de créer une boucle qui va chercher dans chaque onglet la valeur d'une cellule précise (dans l'exemple, A1) puis, si cette valeur est la bonne déclencher une action (dans l'exemple, une MsgBox "BRAVO").

J'ai utilisé le code suivant:

Sub TestBoucle()

Dim Ws As Worksheet

For Each Ws In ThisWorkbook.Worksheets

If Ws.Range("A1").Value = "Chien" Then MsgBox "BRAVO"

Next WsEnd

Sub

Et ça fonctionne en soit très bien. Mon problème est le suivant: le code ne fonctionne plus si je termine par un [END IF] avant le [Next Ws]. Ca me pose deux problèmes:

-pourquoi ne faudrait-il pas arrêter ce IF là alors que on arrête les IF quand ils sont dans une boucle de type [For i=x to y] ? Est-ce que les fonctions [FOR EACH] terminent automatiquement les [IF]?

-dans la mesure ou ce code sera en fait une toute petite partie d'une macro qui réalise énormément de choses, est-ce que le fait que le fait que ce [IF] n'ait pas de bornes ne risque pas de poser problème? Parce que du coup j'ai l'impression que tel que c'est codé, si la condition n'est pas remplie (dans l'exemple si Ws.range("A1").value n'est pas égal à "CHIEN", alors il n'y aura pas d'itération sur l'onglet suivant ou sur n'importe quoi que je coderais derrière?

J'espère avoir été clair; je vous met l'exemple en PJ et je vous remercie d'avance

14test-boucle.xlsm (16.01 Ko)

.

Pierre

Salut Pierre,

il faudrait déjà que tu fournisses un fichier correct : pour l'exemple, il faut chercher en [A1] et il n'y a rien en [A1] sur UNE feuille.
On doit tout faire, quoi!?
La boucle est facile mais, d'expérience, je sens que ça va foirer : ce code devra faire partie d'un tout, dis-tu...
Quel tout ? Comment ce bout de code doit-il s'intégrer là-dedans? D'autres données s'invitent-elles dans les critères de recherche ? Etc..., etc..

Sois plus clair, plus complet, stp!


A+

bonjour,

edit, salut Curulis57

la différence de syntaxe n'est pas liée à l'utilisation du for, mais au fait de mettre une instruction sur la même ligne que le then

si c'est sur la même ligne, on ne peut pas mettre de end if

Sub TestBoucle()

Dim Ws As Worksheet

For Each Ws In ThisWorkbook.Worksheets

If Ws.Range("A1").Value = "Chien" Then MsgBox "BRAVO"

Next WsEnd

Sub

si c'est sur une autre ligne, il faut un end if

Sub TestBoucle()

Dim Ws As Worksheet

For Each Ws In ThisWorkbook.Worksheets

If Ws.Range("A1").Value = "Chien" Then 
  MsgBox "BRAVO"
End If
Next WsEnd

Sub

Pour commencer merci beaucoup, je me sens assez naze de ne pas avoir trouvé tout seul vu que c'était assez simple.

Par ailleurs toutes mes excuses, je me suis simplement planté en joignant mon excel-test, je viens de corriger ca :)

Comme quoi, bousculer un peu fait jaillir les bonnes inspirations!

A+

Rechercher des sujets similaires à "vba then else boucle each"