Excel et VB

JackF -  
 Alexis -
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

  1. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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+
    0
    1. JackF
       
      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. :-)
      0
  2. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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.
    0
    1. JackF
       
      Salut Armojax
      ça marche pour cette seule cellule mais pour une colonne remplie de 0,1,2 ou 3, comment j'adapte ?
      Merci
      0
  3. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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 !
    0
    1. Alexis
       
      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 !...
      0
      1. Alexis > Alexis
         
        On 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 ! ;-)
        0
      2. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529 > Alexis
         
        Bonjour 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.
        0
      3. Alexis > Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention  
         
        C'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...
        0
  4. JackF
     
    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)
    0
    1. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
       
      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.
      0
    2. JackF > Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention  
       
      Tu peux même aller au delà des salutations ............
      Bonne chance !
      0
    3. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529 > JackF
       
      J'y compte bien !!!!!!
      0
    4. jeremie > JackF
       
      bonjour 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!
      @+
      0
    5. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529 > jeremie
       
      Salut 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.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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.
    0
  7. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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.
    0
    1. Alexis
       
      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 !!!
      0