Aide création d'une boucle

fan2foot

XLDnaute Nouveau
Bonsoir,

Je m'essaie a la création d'une boucle mais je n'y arrive pas.

Ce que je souhaite faire, si la cellule b2 est en fond rouge et si elle n'est pas vide alors la cellule b1 est en fond gris
ou si la cellule c2 est en fond rouge et si elle n'est pas vide alors la cellule b1 est en fond gris
ou si la cellule d2 est en fond rouge et si elle n'est pas vide alors la cellule b1 est en fond gris
ainsi de suite de suite jusqu'à k2

Et je souhaite appliquer cette formule jusqu'à la ligne 100.

Pour vous donner une idée de mon piètre niveau, voici ce que j'ai essayer et ce qui à échouer.
Code:
For k = 2 To 100
if feuil2.Range(cells(2,k:11,k)).Interior.ColorIndex = 3 and feuil2.Range (2,k:11,k).value <>"" then cells(1,k).Interior.ColorIndex = 48
Else: Cells(1, k).Interior.ColorIndex = xlColorIndexNone
Next k
End If
 

Lone-wolf

XLDnaute Barbatruc
Re : Aide création d'une boucle

Bonsoir fanfan :)

Le k:11 est de trop dans ta macro. Et c'est Cells(k, Colonne) puisque For k.

Si tu veux 100 lignes pourquoi "Ainsi de suite de suite jusqu'à k2" ???

Et si j'ai bien compris

Code:
Sub test()
Dim ligne As Long, col As Long
With Feuil2
For col = 3 To 11 '3 = colonne C, 11 = colonne K
For ligne = 2 To 100
If .Cells(ligne, col) <> "" And .Cells(ligne, col).Interior.ColorIndex = 3 Then
.Cells(1, 2).Interior.ColorIndex = 48
Else
Cells(1, 2).Interior.ColorIndex = xlColorIndexNone
End If
Next ligne
Next col
End With
End Sub
 
Dernière édition:

fan2foot

XLDnaute Nouveau
Re : Aide création d'une boucle

bonsoir lone,

merci de ton aide, en voyant ta solution je commence a piger le truc.

Pour ce qui est du "Ainsi de suite de suite jusqu'à k2"
C'est que dans mon exemple je souhaitais vous expliquez comment sa fonctionner pour la première ligne de ma plage.
et enfaîte le "jusqu'a 100" c'est que je vais faire le meme procéder pour la ligne 3,4,5,6, ... jusqu'à 100.

Tu as bien compris, ta proposition est ce que je souhaiter faire, j'ai plus qu'a tester voir si mon idée de boucle fonctionne.

merci lone
 

fan2foot

XLDnaute Nouveau
Re : Aide création d'une boucle

je fait les test et je suis confronter à un problème, si je laisse le code en l'état mes cases colonne A ne se grise jamais. ( je me suis trompé ces les colonnes a qui doivent se griser et non b)
Pour essayer j'ai enlever la fonction else, et la les cases se grise bien. Par contre ce qui est logique elle ne se dégrise jamais.
Du coup je me suis dit, moi ce que je souhaite faire c'est si il arrive au moins une fois sur la ligne b2 à k2 qu'une cellule soit en fond rouge et ne soit pas vide alors a2 est en fond gris, donc je vais utiliser la fonction countA.
Code:
Dim ligne As Long, col As Long
With Feuil2
For col = 2 To 11 '2 = colonne b, 11 = colonne K
For ligne = 2 To 100

If Application.WorksheetFunction.CountA(.Cells(ligne, col) <> "" And .Cells(ligne, col).Interior.ColorIndex = 3) >= 1 Then
.Cells(ligne, 1).Interior.ColorIndex = 48
Else
Cells(ligne, 1).Interior.ColorIndex = xlColorIndexNone
End If

Next ligne
Next col
End With

Et là toute ma colonne A de 2 à 100 est grisé peu importe l' état des cellule se trouvant sur la ligne en question .
 
Dernière modification par un modérateur:

fan2foot

XLDnaute Nouveau
Re : Aide création d'une boucle

j'ai une autre question concernant le fonctionnement des boucles.
Vu qu'à la fin du code on fait Next ligne, Next col est ce qu'on fait bien de b2 à k2, avant de passer de b3 à k3 ?
Ne voit aucune critique, j’essaie de comprendre le fonctionnement et moi à lire comme ca avec mes yeux de novice, je comprend qu'on fait b2 puis c3, puis d4, puis e5, ...
 

fan2foot

XLDnaute Nouveau
Re : Aide création d'une boucle

Bonsoir,

Par rapport a mon com précédent, j'ai compris mon erreur avec countA, c'est une erreur bête puisque que countA compte le nombre de case vide.
Bon alors je fais un nouvel essaie, et je bloque sur une procédure, j'aimerais que tant que col n'est pas égal a 11, la variable ligne ne s'incrémente pas.
Mais du coup une fois que col égale 11, on ajoute 1 à ligne et on remet col à 2. En faisant ca, j'ai peur de créer une boucle sans fin, je pense qu'il faudrait rajouter une condition pour sortir de la boucle quelque chose qui ressemblerait à si col=11 et ligne = 100 alors on sort de la boucle.

Pour ce qui est du code, j'ai rempalcer countA par deux variable x et y, si un quelqu'un pourrait venir me corriger mon code.
Code:
Dim ligne As Long, col As Long
Dim x As Boolean
Dim y As Variant
With Feuil2
For col = 2 To 11 '2 = colonne b, 11 = colonne K
For ligne = 2 To 100
x = .Cells(ligne, col) <> "" And .Cells(ligne, col).Interior.ColorIndex = 3
If x Is True Then y = y + 1
Else: y = y
End If
If y >= 1 Then
.Cells(ligne, 1).Interior.ColorIndex = 48
Else
Cells(ligne, 1).Interior.ColorIndex = xlColorIndexNone
End If
Next col
'C'est a cette endroit que je souhaiterais mettre la condition si col=11
Next ligne
y = 0
End With
 

Lone-wolf

XLDnaute Barbatruc
Re : Aide création d'une boucle

Bonsoir fanfan,

d'après ton premier code, il manque une parenthèse et une variable

Application.WorksheetFunction.CountA(.Cells(ligne, col)

Code:
Sub test()
Dim ligne As Long, col As Long, x As Long
With Feuil1
.Range("a2:a102").Interior.ColorIndex = xlColorIndexNone
For col = 2 To 11 '2 = colonne b, 11 = colonne K
For ligne = 2 To 100
x = WorksheetFunction.CountA(.Cells(ligne, col).Interior.ColorIndex = 3)
If x >= 1 And .Cells(ligne, col) <> "" And .Cells(ligne, col).Interior.ColorIndex = 3 Then
.Range("a" & ligne).Interior.ColorIndex = 48
End If
Next ligne
Next col
End With
End Sub
 
Dernière édition:

fan2foot

XLDnaute Nouveau
Re : Aide création d'une boucle

Bonsoir lone,

J'ai essayer ton code mais il ne fonctionne pas, les cases en A ne se grise pas.

Mais bonne nouvelle, j'ai trouvé un code qui fonctionne comme je le souhaite.
Il est très répétitif je pense qu'il y a moyen de le raccourcir, mais je pense que ce sera plus facile à comprendre ce que je souhaite faire avec un code plutôt que de longues explication.
alors voici le code:
Code:
Dim ligne As Long
With Feuil2
For ligne = 2 To 100

If (.Cells(ligne, 2) <> "" And .Cells(ligne, 2).Interior.ColorIndex = 3) _
Or (.Cells(ligne, 3) <> "" And .Cells(ligne, 3).Interior.ColorIndex = 3) _
Or (.Cells(ligne, 4) <> "" And .Cells(ligne, 4).Interior.ColorIndex = 3) _
Or (.Cells(ligne, 5) <> "" And .Cells(ligne, 5).Interior.ColorIndex = 3) _
Or (.Cells(ligne, 6) <> "" And .Cells(ligne, 6).Interior.ColorIndex = 3) _
Or (.Cells(ligne, 7) <> "" And .Cells(ligne, 7).Interior.ColorIndex = 3) _
Or (.Cells(ligne, 8) <> "" And .Cells(ligne, 8).Interior.ColorIndex = 3) _
Or (.Cells(ligne, 9) <> "" And .Cells(ligne, 9).Interior.ColorIndex = 3) _
Or (.Cells(ligne, 10) <> "" And .Cells(ligne, 10).Interior.ColorIndex = 3) _
Or (.Cells(ligne, 11) <> "" And .Cells(ligne, 11).Interior.ColorIndex = 3) _
Then
.Range("a" & ligne).Interior.ColorIndex = 48
Else: .Range("a" & ligne).Interior.ColorIndex = xlColorIndexNone
End If
Next ligne
End With

De ce que j'ai compris avec les codes que tu m'as montré au par avant, il faudrait faire next col avant chaque Or et remettre la variable col a 2 une fois qu'on a fini.
Est ce possible de faire ca ? Et comment sortir de la boucle ? Parce que si on remet col à 2 a chaque fin, la boucle est infini. On peut faire une "porte de sortie" si col =11 et ligne= 100 ?
 

Paf

XLDnaute Barbatruc
Re : Aide création d'une boucle

Bonjour fan2foot, Lone-wolf,

Si j'ai bien compris, pour chaque ligne (de 2 à 100) s'il y a au moins une cellule (de colonne B à colonne K) rouge et non vide, la cellule colonne A devient grise.

Code:
Dim Ligne As Long, Col As Integer, OK As Boolean
With Feuil4
For Ligne = 2 To 100
    For Col = 2 To 11
        If (.Cells(Ligne, Col) <> "" And .Cells(Ligne, Col).Interior.ColorIndex = 3) Then
            OK = True
            Exit For
        End If
    Next Col
    If OK Then
        .Range("a" & Ligne).Interior.ColorIndex = 48
        OK = False
    Else
        .Range("a" & Ligne).Interior.ColorIndex = xlColorIndexNone
    End If
Next Ligne
End With

A+
 

Discussions similaires

Réponses
1
Affichages
139
Réponses
0
Affichages
83

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou