VBA : Problème boucle For Each, Do While

  • Initiateur de la discussion Initiateur de la discussion polo_0109
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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
 
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.
 
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:
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:
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+
 
Re : VBA : Problème boucle For Each, Do While

Re à tous, Bonjour job75,
Toujours pas compris comme les autres moi...😱
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
 
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
 
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!
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
1 K
Réponses
0
Affichages
1 K
Retour