VBA : Problème boucle For Each, Do While

polo_0109

XLDnaute Nouveau
Bonjour,

Après plusieurs heures de recherche et d'essais, je viens vous demander de l'aide. Je précise que je suis débutant.

Voici le code en question :
Sub Essai()
Dim c As Variant
For Each c In Range("E3:EE3")
Do
c.Offset(1, 0).Interior.ColorIndex = 36
Loop While c.Value > -14
Next c
End Sub

Toutes les valeurs de la plage E3:EE3 sont supérieurs à -14 jusqu'à CT inclu. Donc les cellules E4:CT4 devraient normalement devenir jaunes.
Quand je lance la macro, seule la cellule E4 devient jaune puis le sablier de windows apparait et il ne se passe plus rien. Je suis alors obligé d'appuyer sur echap pour interrompre l'exécution.


Pourriez vous me dire si le code est correct et d'où vient le problème ?
Merci d'avance
 

Ubot303

XLDnaute Occasionnel
Re : VBA : Problème boucle For Each, Do While

Bonjour à toi,

Attention For... Next et do..loop sont 2 boucles.
Tu viens d'inclure une boucle dans une autre

Et le do.loop nécessite le rajout d'une ligne permettant l'incrémentation de la variable sinon tu fais l'opération (ici la couleur) sur la première cas puis tu boucles à l'infini...

Sub Essai()
For c = 5 to 135
cells(3, c).Interior.ColorIndex = 36
Next
End Sub

Ou
Sub Essai()
c= 5
Do until cells(3,c).value = ""
cells(3, c).Interior.ColorIndex = 36
c=c +1
Loop
End Sub
 

Efgé

XLDnaute Barbatruc
Re : VBA : Problème boucle For Each, Do While

Bonjour polo_0109, Ubot303, Bonjour pierrejean,
polo_0109, votre demande est tellement claire que personne ne comprend la même chose...
Une autre proposition (très proche de pierrejean mais pour colorer les cellules en lignes 4):
Code:
Sub Essai()
Dim c As Range
For Each c In Range("E3:EE3")
    If c.Value <> "" And c.Value > -14 Then
        c.Offset(1, 0).Interior.ColorIndex = 36
    End If
Next c
End Sub
Cordialement
 

polo_0109

XLDnaute Nouveau
Re : VBA : Problème boucle For Each, Do While

Merci pour votre réactivité mais aucune de vos propositions ne convient car j'ai été trop flou, désolé. Je vais vous dire ce dont j'ai besoin littéralement :

Sur la plage ("E3:EE3") (qui commence toujours par 1 ou -1), la case du dessous doit être jaune claire tant que la valeur est comprise entre -14 et 14. Au moment où la valeur atteint 15 ou -15, la case du dessous ne devra plus jamais être jaune claire même si la valeur repasse entre -14 et 14.
 

pierrejean

XLDnaute Barbatruc
Re : VBA : Problème boucle For Each, Do While

Re

Dans ce cas

Code:
Sub Essai()
Dim c As Variant
For n=5 to 135
 if cells(4,n).Value < -14  or cells(4,n).Value > 14 then
   cells(4,n).Interior.ColorIndex = 36
 else
   exit for   
 end if
Next 
End Sub

si c'est la valeur du dessous qui est comprise entre -14 et 14


si c'est la valeur dans la plage E3:EE3:

Code:
Sub Essai()
Dim c As Variant
For n=5 to 135
 if cells(3,n).Value < -14  or cells(3,n).Value > 14 then
   cells(4,n).Interior.ColorIndex = 36
 else
   exit for   
 end if
Next 
End Sub
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : VBA : Problème boucle For Each, Do While

Bonjour à tous,

Ceci n'est pas très clair :

la case du dessous ne devra plus jamais être jaune claire même si la valeur repasse entre -14 et 14.

mais enfin vous pouvez essayer ça :

Code:
Sub Essai()
Dim c As Range
For Each c In Range("E3:EE3")
   If  Abs(c) < 15 Then
      c.Offset(1, 0).Interior.ColorIndex = 36
      Exit Sub
   End If
Next
End Sub

Edit : salut et pardon pierrejean, tu as raison, je me suis planté !

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : VBA : Problème boucle For Each, Do While

Re,

Alors je remets ça :

Code:
Sub Essai()
Dim c As Range
For Each c In Range("E3:EE3")
   If  Abs(c) < 15 Then
      c.Offset(1, 0).Interior.ColorIndex = 36
   [COLOR="Red"]Else[/COLOR]
      Exit Sub
   End If
Next
End Sub

A+
 

Efgé

XLDnaute Barbatruc
Re : VBA : Problème boucle For Each, Do While

Re à tous, Bonjour job75,
Toujours pas compris comme les autres moi...:eek:
Une proposition quand même, si on a le droit d'écrire en ligne 4:
Code:
Sub Essai()
Dim c As Range
For Each c In Range("E3:EE3")
    If c.Value <> "" And c.Value >= -14 And c.Value < 15 And Not c.Offset(1, 0).Value = 1 Then
        c.Offset(1, 0).Interior.ColorIndex = 36
    Else
        c.Offset(1, 0).Interior.ColorIndex = xlNone
        c.Offset(1, 0).Font.ColorIndex = 2
        c.Offset(1, 0).Value = 1
    End If
Next c
End Sub
Cordialement
 

pierrejean

XLDnaute Barbatruc
Re : VBA : Problème boucle For Each, Do While

Re

Code:
Sub Essai()
Dim c As Variant
[COLOR=blue]dim n as integer[/COLOR]
For n=5 to 135
if cells(3,n).Value < -14 or cells(3,n).Value > 14 then
cells(4,n).Interior.ColorIndex = 36
else
exit for 
end if
Next 
End Sub
Mais la version de Job est plus concise
 

Raziel abel

XLDnaute Occasionnel
Supporter XLD
Re : VBA : Problème boucle For Each, Do While

Re

Dans ce cas

Code:
Sub Essai()
Dim c As Variant
For n=5 to 135
 if cells(4,n).Value < -14  or cells(4,n).Value > 14 then
   cells(4,n).Interior.ColorIndex = 36
 else
   exit for   
 end if
Next 
End Sub

si c'est la valeur du dessous qui est comprise entre -14 et 14


si c'est la valeur dans la plage E3:EE3:

Code:
Sub Essai()
Dim c As Variant
For n=5 to 135
 if cells(3,n).Value < -14  or cells(3,n).Value > 14 then
   cells(4,n).Interior.ColorIndex = 36
 else
   exit for   
 end if
Next 
End Sub

Bonjour Pierre Jean,

Etant debutant en Vba, je voulais comprendre ce que tu écrit au niveau du code.

Si j'ai bien compris tu as déclaré une variable qui est c avec

Dim c As Variant dans le code suivant

Sub Essai()
Dim c As Variant
For n=5 to 135
if cells(4,n).Value < -14 or cells(4,n).Value > 14 then
cells(4,n).Interior.ColorIndex = 36
else
exit for
end if
Next
End Sub


Et là, je ne comprend plus rien, car c ne se retrouve plus nulle part dans le code.
Ne maitrisant pas la subitilité du langage vba, je serait content que toi ou un autre Xld nautes m'explique ce qui c'est passé.

Merci!
 

Fo_rum

XLDnaute Accro
Re : VBA : Problème boucle For Each, Do While

Salut
Re

Il se passe que je suis parti d'un code existant qui utilisait ce c
Et que je n'ai pas suffisament relu
Cette ligne peut etre effacée

ou remplacée par
Code:
Dim n as Byte
Un peu plus concis et en partant du code de Job :
Code:
Sub Essai()
Dim c As Range
For Each c In Range("E3:EE3")
   If Abs(c) > 14 Then Exit Sub
   c.Offset(1, 0).Interior.ColorIndex = 36
Next
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 472
Messages
2 088 709
Membres
103 928
dernier inscrit
MIKETUAU