Macro conditionnelle

Signaler
Messages postés
3
Date d'inscription
vendredi 8 juillet 2011
Statut
Membre
Dernière intervention
18 octobre 2011
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour tout le monde,

Je voudrais faire que ma macro s'applique aux lignes colorées en jaune (font = 36)
En gros : if activecell (en jaune) = ... (100, 0 ou entre les 2) alors celle du dessus (offset (-1,0)) soit dans la couleur adaptée (vert, rouge, bleu)
Mais je ne vois pas comment formuler l'application seulement aux lignes jaunes ?

Voici la macro actuelle :

Sub Couleur2()
Dim c As Variant
For m = 6 To 100
For n = 6 To 55
If Cells(m, n).Value = 100 Then
Cells(m, n).Offset(-1, 0).Font.ColorIndex = 43
Else
If Cells(m, n).Value = 0 Then
Cells(m, n).Offset(-1, 0).Font.ColorIndex = 3
Else
Cells(m, n).Offset(-1, 0).Font.ColorIndex = 5
End If
End If
Next
Next
End Sub


Merci d'avance

6 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Bonjour,
en ajoutant ta condition, à l'aidee de And, selon ce type de syntaxe
If Cells(x, y).propriété1 valeur1 and cells(x,y).propriété2 valeur2 then

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
ou cette deuxième forme d'expression qui, bien que plus gourmande en lignes de code, est plus rapide en exécution :


For x = 6 To 100
  For y = 6 To 55
    If cells(x,y).propriété2 = ...... then ' ou propriété 2 est par exemple ta couleur 
      select case cells(x,y).value
         case 100
          ' ton action
         case 0
           'ton autre action
        case else
          ' ce que tu fais alors d'autre
        end select
    End If
  Next
Next

Observe : j'ai indenté le code et le présente ici avec sa mise en forme (utilisation des balises code) ===>> on y voit beaucoup plus claire, non ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
3
Date d'inscription
vendredi 8 juillet 2011
Statut
Membre
Dernière intervention
18 octobre 2011

Merci ucfoutu, je viens de tester (v. ci-dessous), mais ca me mets tout en bleu, je me demande si c'est parce la couleur des lignes est faite via une mise en forme conditionnelle (une ligne sur deux "=MOD(LIGNE();2)=0") et pas directement dans la page excel ???

Sub Couleur2()
Dim c As Variant
For m = 6 To 100
For n = 6 To 55
If Cells(m, n).Value 100 And Cells(m, n).Interior.ColorIndex 36 Then
Cells(m, n).Offset(-1, 0).Font.ColorIndex = 43
Else
If Cells(m, n).Value 0 And Cells(m, n).Interior.ColorIndex 36 Then
Cells(m, n).Offset(-1, 0).Font.ColorIndex = 3
Else
Cells(m, n).Offset(-1, 0).Font.ColorIndex = 5
End If
End If
Next
Next
End Sub
Messages postés
3
Date d'inscription
vendredi 8 juillet 2011
Statut
Membre
Dernière intervention
18 octobre 2011

Je viens de tester ta deuxième version ucfoutu, mais ca ne colle toujours pas :

Sub couleur3()
For x = 6 To 100
  For y = 6 To 55
    If Cells(x, y).Interior.ColorIndex = 36 Then
    '...... then ' ou propriété 2 est par exemple ta couleur
      Select Case Cells(x, y).Value
         Case 100
            Cells(x, y).Offset(-1, 0).Font.ColorIndex = 43
            ' ton action
         Case 0
            Cells(x, y).Offset(-1, 0).Font.ColorIndex = 3
            'ton autre action
        Case Else
          Cells(x, y).Offset(-1, 0).Font.ColorIndex = 5
          ' ce que tu fais alors d'autre
        End Select
    End If
  Next
Next
End Sub
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
mais ca ne colle toujours pas


Qu'est-ce qui "ne colle pas" ?
ce code ne peut que marcher ! Encore faut-il qu'il trouve les bonnes couleurs (donc réellement 36 en colorindex comme condition générale) au départ et les valeurs que tu définis ensuite !

Si la police de la cellule (x,y) n'est pas de la couleur 36 ===>> rien ne se passera (c'est ce que tu voulais, non ?)
si tu as tout en bleu, c'est que tu es dans le cas Else (et que donc le contenu de la cellule (x,y) ne vaut ni 100, ni 0)

Et : une autre fois : ce code ne peut que marcher !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
Pour ton information !
Tu as été à ce point convaincant et insistant que j'ai fini par simuler et tester (bien qu'inutile) ===>> Ce code marche bien. Ton problème est donc ailleurs : soit dans ta couleur jaune, soit dans tes vfaleurs


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient