Macro pour couleur de fond de ligne selon certaines conditions

Bonjour,

J'ai une macro qui me permet de faire, lorsque j'ai la cellule C3 avec un contenu et les cellules de I3 à AD3 sans contenu que toute la ligne de A3 à AD3 se mettent en rouge pour m'indiquer qu'il manque des contenus à ajouter.

Je souhaiterais que cette formule se répète sur toutes les lignes jusqu'à 2000 mais je n'ai aucun niveau en VBA et ne sais donc pas comment faire, quelqu'un pour me donner un coup de pouce SVP ?

Sub PseudoFormatoCondicional()
If Range("C3") <> "" Then
   If Range("A3").Interior.Color = vbRed Then
      Range("A3:AD3").Interior.ColorIndex = xlNone
   Else
      For Each celda In Range("I3:AD3")
         If celda.Value <> "" Then
            lleno = True
            Exit For
         End If
      Next
      If lleno <> True Then Range("A3:AD3").Interior.Color = vbRed
   End If
End If
End Sub

Merci.

Bonjour,

Pour pouvoir boucler sur toutes les lignes de 1 à 2000, il faut utiliser une boucle For en rendant le numéro de ligne (3) variable, ça donne ce résultat:

Sub PseudoFormatoCondicional()
For i = 3 To 2000
    If Range("C" & i) <> "" Then
       If Range("A" & i).Interior.Color = vbRed Then
          Range("A" & i, "AD" & i).Interior.ColorIndex = xlNone
       Else
          For Each celda In Range("I" & i, "AD" & i)
             If celda.Value <> "" Then
                Range("A" & i, "AD" & i).Interior.Color = vbRed
                Exit For
             End If
          Next
    End If
Next i
End Sub

Note que tu peux aussi faire ça avec une simple mise en forme conditionnelle, si ça t'intéresse...

Bonjour, salut Ausecour !

VBA est-il indispensable pour cette tâche, qui est à mon avis facilement faisable avec une MFC classique ?

Bonjour, salut Ausecour !

VBA est-il indispensable pour cette tâche, qui est à mon avis facilement faisable avec une MFC classique ?

Note que tu peux aussi faire ça avec une simple mise en forme conditionnelle, si ça t'intéresse...

Oui c'est facilement faisable avec un NBVAL()

Autant pour moi, je n'avais pas fait attention à la dernière ligne !

Pas de soucis

Bonjour à toi aussi au passage

Bonjour,

En fait, j'ai déjà fait un format conditionnel, le problème avec ce genre de méthode est triple:

  • Toujours actif, pas moyen de le désactiver sauf si on élimine la règle
  • Lorsque la feuille est vierge, tout est rouge (ou bleu, vert, ...), ça pique un peu
  • Déjà une bonne vingtaine de format conditionnel présent dans la feuille pour répondre à de nombreuses conditions, la feuille commence à ressembler à un sapin de Noël un peu trop chargé !

La recherche d'une macro s'avère d'autant plus pertinente que plusieurs personnes auront accès à la feuille et mon but est de la faire la plus simple possible pour éviter des manipulations qui la dégraderait.

Merci pour la macro mais elle ne fonctionne pas dans ma feuille, j'obtiens un message "erreur de compilation, Next Sin For", une idée ?

Pour ma part, je pense quand même qu'une MFC reste plus simple (et il est possible d'ajouter une condition pour éviter de colorer les cellules vides).

Concernant le message d'erreur, VBA, c'est juste un petit oubli je pense. Voilà le code corrigé :

Sub PseudoFormatoCondicional()
For i = 3 To 2000
    If Range("C" & i) <> "" Then
       If Range("A" & i).Interior.Color = vbRed Then
          Range("A" & i, "AD" & i).Interior.ColorIndex = xlNone
       Else
          For Each celda In Range("I" & i, "AD" & i)
             If celda.Value <> "" Then
                Range("A" & i, "AD" & i).Interior.Color = vbRed
                Exit For
             End If
          Next
       End If '<-- instruction manquante
    End If
Next i
End Sub

Elle fonctionne mais... exactement à l'envers !!

Je t'ai mis en PJ un exemple pour que tu puisses le voir par toi-même.

Dans tous les cas, merci pour le temps que tu as déjà passé la-dessus

148testmacro.xlsm (16.23 Ko)

Bonjour,

C'est normal, le test est : <> "", ça devrait être : =""

Sub PseudoFormatoCondicional()
For i = 3 To 2000
    If Range("C" & i) <> "" Then
       If Range("A" & i).Interior.Color = vbRed Then
          Range("A" & i, "AD" & i).Interior.ColorIndex = xlNone
       Else
          For Each celda In Range("I" & i, "AD" & i)
             If celda.Value = "" Then 'changement ici
                Range("A" & i, "AD" & i).Interior.Color = vbRed
                Exit For
             End If
          Next
       End If
    End If
Next i
End Sub

Bonjour Ausecour,

La modification fait que toute la table soit en rouge sans discriminer que les plages de cellules soient vides ou non.

73testmacro-2.xlsm (17.00 Ko)

Bonjour,

Je pensais qu'il fallait mettre toute la ligne en rouge dès que tu as une cellule vide sur la ligne, ce n'est pas la bonne condition?

Je donne un exemple:

Si C10 est plein et que les cellules de I10 à AD10 sont vides, toute la lgne doit apparaître en rouge.

Si C10 est plein et qu'une ou plusieurs cellules de I10 à AD10 est pleine, la ligne ne change pas.

Avec la version actuelle, que les cellules de I10 à AD10 soient vides ou pleines, toute la ligne apparaît en rouge à partir du moment ou C10 est pleine.

Ah d'accord je comprends mieux, si colonne C remplie et tout vide de I a AD, alors mettre en rouge, sinon enlever le rouge, j'ai testé et normalement c'est bon, mais ça pique toujours les yeux je trouve

Voici le fichier:

76testmacro-2.xlsm (15.55 Ko)

C'est presque parfait, comment faire pour qu'en recliquant sur le bouton assigné à la macro elle se désactive et que toutes les cellules retrouvent leur état originel ?

Ça pique effectivement un peu mais le fait de pouvoir activer/désactiver en cliquant sur un bouton rend l'état passager et permet d'identifier rapidemment les lignes dans lesquelles ils manquent des infos à indiquer.

Re,

en sauvegardant une variable d'état en Static, elle conservera sa valeur jusqu'à fermeture du fichier, au lancement du fichier, elle est égale à False, quand tu cliqueras sur le bouton, ça mettra la mise en forme, si tu recliques dessus, ça l'enlevera

Voici le fichier modifié:

219testmacro-2.xlsm (16.85 Ko)

C'est génial, merci beaucoup pour l'immense coup de pouce, ça remplit magnifiquement la fonction et représente un gain de temps énorme sur la feuille finale sans la faire ressembler à un sapin de noël !!!

J'ai modifié la couleur par une rgb un peu moins aggressive et c'est magnifique.

Merci encore

De rien

Merci d'avoir passé le sujet en résolu

une mise en forme conditionnelle

avec valeur de cellule vide remplissage rouge

Rechercher des sujets similaires à "macro couleur fond ligne certaines conditions"