Excel et VB

Bonjour a tous
Par rapport au contenu d'une cellule (0,1,2 ou 3), j'aimerais coloriser toute la ligne correspondante (nature, jaune, rose ou rouge).
Merci aux mecs sympas qui peuvent m'aider.

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Salut,

    Tu peux faire une mise en forme conditionnelle =>Sélectionne tes cellules puis Format/Mise en forme conditionnelle....
    Sino par macro, mais je pense que la Mise en forme conditionnelle suffira.....

    A+
    1. Salut Tompols
      Merci de me répondre, effectivement la mise en forme conditionnelle marche bien mais juste pour la cellule concernée par contre je voudrais appliquer le formatage sur la ligne complète.
      Merci quand même. :-)
  2. Hello Jack,

    Essaie ça, à mettre dans le code de ta feuille.
    Pour davantage de clarté, donne un nom à ta cellule (dans mon test, je l'ai appelée...Cellule !)
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
        Dim Couleur As Integer
        Dim Plage   As Range
    
        Set Plage = Range("Cellule")
        Select Case Plage.Value
        Case 1
            Couleur = 6
        Case 2
            Couleur = 38
        Case 3
            Couleur = 3
        Case Else
            Couleur = 0
        End Select
    
        Plage.EntireRow.Interior.ColorIndex = Couleur
    
    End Sub

    Dis-moi si ça colle.
    Ajx.
    1. Salut Armojax
      ça marche pour cette seule cellule mais pour une colonne remplie de 0,1,2 ou 3, comment j'adapte ?
      Merci
  3. Hello JackF,

    Excuse-moi, je n'avais pas compris que tu voulais que ça fonctionne pour toute une plage de cellules dans une colonne.
    Donc voici une nouvelle mouture.
    Je suppose que toutes les cellules qui sont concernées forment un rectangle compact (une seule colonne ou non).
    J'ai nommé cette plage "Cellules".
    Voici un nouveau code :
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
        Dim Couleur As Integer
        Dim Plage   As Range
    
        Set Plage = Range("Cellules")
        For Each Cellule In Plage
            Select Case Cellule.Value
            Case 1
                Couleur = 6
            Case 2
                Couleur = 38
            Case 3
                Couleur = 3
            Case Else
                Couleur = 0
            End Select
            Cellule.EntireRow.Interior.ColorIndex = Couleur
        Next
    
    End Sub

    Dis-moi si on progresse !
    1. Et pour une ligne entière, à la place de "EntireRow", je peux mettre "EntireLine" ??? Je le fais au hasard, mais ça ne semble pas marcher !...
    2. @AlexisOn va oublier ma question : précipitation, vagues souvenirs... Row c'est une ligne !!!... En fait, mon souci serait de borner les couleurs à une plage de cellules : exemple, si B3 vaut "D", que B3:AB3 soit en bleu ciel... D'ailleurs, peut-on trouver qq part le codage des couleurs Excel ?
      Merci bcp, désolé pour la question précédente ! ;-)
    3. @AlexisBonjour Alexis,

      Je comprends moyennement ta question :

      - est-ce que pour toi "D" représente la couleur bleu ciel, et que tu comptes associer une couleur à une lettre ?
      - est-ce que c'est toujours (et seulement) en colonne B que la lettre doit être interprétée ? et dans ce cas, c'est toute la plage de B à AB, sur la ligne choisie, qui doit être colorée ?

      Armojax.
    4. @ArmojaxC'est vrai, je n'étais pas très clair !

      Alors, en fait, je cherche à mettre en éviodence les WE automatiquement dans un planning : donc je veux mettre en surbrillance les samedi et dimanche (je recherche donc "S" et "D" dans la colonne des jours...).
      Ensuite, je veux que toute la ligne soit en bleu ciel (j'ai trouvé le code : c'est 20 pour la valeur voulue).
      Ca marche sans souci, mais ce serait plus propre si les colonnes en dehors du tabeau n'étaient pas elles aussi en bleu ciel...

      Merci...
  4. Hi Armojax
    Mieux, c'est pas possible :-))
    C'est tout a fait ce que je voulais.
    Encore merci et bien le bonjour aux Nantais et a sa région (J'ai des cousins a La Chapelle sur Erdre)
    1. Content que ça soit tout bon.
      Je vais me faire un p'tit restau avec une Chapellaine dans quelques jours. Je la saluerai de ta part !
      Ajx.
    2. @ArmojaxTu peux même aller au delà des salutations ............
      Bonne chance !
    3. @JackFbonjour je souahiterais faire l'équivalent de la mise n forme condidtionnelle mais avec plus de 3 conditions. si qq peut m'aider, ce serait cool!
      @+
    4. @jeremieSalut Jérémie,

      En standard dans Excel, c'est 3 conditions maxi.
      Si tu en veux davantage, il faut te faire une petite macro. Tu peux t'inspirer de mon premier jet ci-dessus, en supprimant EntireRow. En plus de la couleur, tu peux changer ce que tu veux : couleur, bordures, etc.

      Ajx.
  5. Bonjour Jérémie,

    Exemple ci-dessous : comptage du nombre de cellules rouges dans la plage "A1:H20".
    Sub RedCells()
    
      Dim Ctr     As Long
      Dim Plage   As Range
      Dim Cellule As Range
      
      Set Plage = Range("A1:H20")
      
      Ctr = 0
      For Each Cellule In Plage
        If Cellule.Interior.ColorIndex = 3 Then
          Ctr = Ctr + 1
        End If
      Next
      
      MsgBox "Il y a " & Ctr & " cellules rouges"
      
    End Sub
    Armojax.
    1. Re Alexis,

      Voici 2 solutions, selon le cas :

      1) Soit la macro se trouve dans le code de ta feuille, et réagit quand tu saisis "S" ou "D" dans la colonne B. Ça va convenir si tu saisis ton calendrier au fur et à mesure. Par contre, si tout est déjà saisi, il faudrait que tu réinterviennes sur chaque cellule pour déclencher la macro.

      2)Soit un balayage des lignes colorie tout en une seule fois.

      Tout dépend de ton contexte.
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      
        Dim Lig As Integer
        If ActiveCell.Column <> 2 Then Exit Sub
        If ActiveCell.Value = "S" _
        Or ActiveCell.Value = "D" Then
          Lig = ActiveCell.Row
          Range(Cells(Lig, 2), Cells(Lig, 28)).Interior.ColorIndex = 20
        End If
        
      End Sub

      Sub WeekEnds()
      
        Dim Lig As Integer
        
        For Lig = 1 To 36 ' adapter la fourchette !!!
          If Cells(Lig, 2).Value = "S" _
          Or Cells(Lig, 2).Value = "D" Then
            Range(Cells(Lig, 2), Cells(Lig, 28)).Interior.ColorIndex = 20
          End If
        Next
        
      End Sub


      Vois ce qui te convient.
      Ajx.
      1. Merci énormément...

        Pour être complet, afin de faire à 100 % ce que je souhaitais, j'ai fait 2 ou 3 modifs :

        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        
          Dim Lig As Integer
          
          For Lig = 3 To 33 ' adapter la fourchette !!!
            If Cells(Lig, 2).Value = "S" _
            Or Cells(Lig, 2).Value = "D" Then
              Range(Cells(Lig, 2), Cells(Lig, 30)).Interior.ColorIndex = 20
            End If
            If Cells(Lig, 2).Value = "L" _
            Or Cells(Lig, 2).Value = "Ma" _
            Or Cells(Lig, 2).Value = "Me" _
            Or Cells(Lig, 2).Value = "J" _
            Or Cells(Lig, 2).Value = "V" _
            Or Cells(Lig, 2).Value = "..." _
            Or Cells(Lig, 2).Value = "" Then
              Range(Cells(Lig, 2), Cells(Lig, 30)).Interior.ColorIndex = 0
            End If
          Next
          
        End Sub
        


        ... et ça marche !!!Merci énormément...

        Pour être complet, afin de faire à 100 % ce que je souhaitais, j'ai fait 2 ou 3 modifs :

        Private Sub Worksheet_SelectionChange(ByVal Target As Range)

        Dim Lig As Integer

        For Lig = 3 To 33 ' adapter la fourchette !!!
        If Cells(Lig, 2).Value = "S" _
        Or Cells(Lig, 2).Value = "D" Then
        Range(Cells(Lig, 2), Cells(Lig, 30)).Interior.ColorIndex = 20
        End If
        If Cells(Lig, 2).Value = "L" _
        Or Cells(Lig, 2).Value = "Ma" _
        Or Cells(Lig, 2).Value = "Me" _
        Or Cells(Lig, 2).Value = "J" _
        Or Cells(Lig, 2).Value = "V" _
        Or Cells(Lig, 2).Value = "..." _
        Or Cells(Lig, 2).Value = "" Then
        Range(Cells(Lig, 2), Cells(Lig, 30)).Interior.ColorIndex = 0
        End If
        Next

        End Sub

        ... et ça marche !!!