Macro conditionnelle

cs_GabyZeDog Messages postés 3 Date d'inscription vendredi 8 juillet 2011 Statut Membre Dernière intervention 18 octobre 2011 - 18 oct. 2011 à 10:52
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 18 oct. 2011 à 14:52
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 212
18 oct. 2011 à 11:07
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 212
18 oct. 2011 à 11:27
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
0
cs_GabyZeDog Messages postés 3 Date d'inscription vendredi 8 juillet 2011 Statut Membre Dernière intervention 18 octobre 2011
18 oct. 2011 à 11:32
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
0
cs_GabyZeDog Messages postés 3 Date d'inscription vendredi 8 juillet 2011 Statut Membre Dernière intervention 18 octobre 2011
18 oct. 2011 à 12:53
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 212
18 oct. 2011 à 14:42
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 212
18 oct. 2011 à 14:52
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
0
Rejoignez-nous