Macro Changement de couleur

Fernand -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à vous tous,

Je sollicite votre aide car mon code ne fonctionne pas du tout et en plus il me semble qu'il y aurait une façon plus simple d'y arriver.

Ce que je cherche à faire, je le fais déjà avec mise en forme conditionnelle, mais je suis rendu déjà rendu à 4 choix de couleur.

si(a1)=1;mettre(A1:A3)de tel couleur;si(a1)=2;mettre(A1:A3)de tel couleur;..etc.

J'ai dans mon tableau 17 casé qui peut changer de valeur et ceux-ci provient d'une autre feuille ça risque d'être d'une longueur excessif.
Voici le code que j'ai pensé mais comme je vous dis il ne fonctionne pas correctement.

Merci de votre aide.

Sub worksheet_change(ByVal target As Range)
    If Not Intersect(target, Range("a1")) Is Nothing Then
On Error Resume Next
    If Worksheets(1).Range.Value("a1") = "Vac" _
    Then Worksheets(1).Range("a1:a3").Interior.ColorIndex = 1
    If Worksheets(1).Range.Value("a1") = "For" _
    Then Worksheets(1).Range("a1:a3").Interior.ColorIndex = 2
    If Worksheets(1).Range.Value("a1") = "Pre" _
    Then Worksheets(1).Range("a1:a3").Interior.ColorIndex = 3
    If Worksheets(1).Range.Value("a1") = "Mal" _
    Then Worksheets(1).Range("a1:a3").Interior.ColorIndex = 4
ElseIf Not Intersect(target, Range("b1")) Is Nothing Then
    If Worksheets(1).Range.Value("b1") = "Vac" _
    Then Worksheets(1).Range("b1:b3").Interior.ColorIndex = 1
    If Worksheets(1).Range.Value("b1") = "For" _
    Then Worksheets(1).Range("b1:b3").Interior.ColorIndex = 2
    If Worksheets(1).Range.Value("b1") = "Pre" _
    Then Worksheets(1).Range("b1:b3").Interior.ColorIndex = 3
    If Worksheets(1).Range.Value("b1") = "Mal" _
    Then Worksheets(1).Range("b1:b3").Interior.ColorIndex = 4
ElseIf Not Intersect(target, Range("c1")) Is Nothing Then
    If Worksheets(1).Range.Value("c1") = "Vac" _
    Then Worksheets(1).Range("c1:c3").Interior.ColorIndex = 1
    If Worksheets(1).Range.Value("c1") = "For" _
    Then Worksheets(1).Range("c1:c3").Interior.ColorIndex = 2
    If Worksheets(1).Range.Value("c1") = "Pre" _
    Then Worksheets(1).Range("c1:c3").Interior.ColorIndex = 3
    If Worksheets(1).Range.Value("c1") = "Mal" _
    Then Worksheets(1).Range("c1:c3").Interior.ColorIndex = 4
ElseIf Not Intersect(target, Range("d1")) Is Nothing Then
    If Worksheets(1).Range.Value("d1") = "Vac" _
    Then Worksheets(1).Range("d1:d3").Interior.ColorIndex = 1
    If Worksheets(1).Range.Value("d1") = "For" _
    Then Worksheets(1).Range("d1:d3").Interior.ColorIndex = 2
    If Worksheets(1).Range.Value("d1") = "Pre" _
    Then Worksheets(1).Range("d1:d3").Interior.ColorIndex = 3
    If Worksheets(1).Range.Value("d1") = "Mal" _
    Then Worksheets(1).Range("d1:d3").Interior.ColorIndex = 4
End If
End Sub

4 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    autre méthode VBA uniquement

    Private Sub Worksheet_Change(ByVal Target As Range)   
    Dim Adresse As String   
    If Not Intersect(Target, Range("A1:D1")) Is Nothing Then   
         Adresse = Target.Address   
         Select Case Adresse   
              Case Is = "$A$1"   
                   colorier Target, "A1:A3"   
              Case Is = "$B$1"   
                   colorier Target, "B1:B3"   
              '.... à complèter   
         End Select   
    End If   
    
    End Sub   
    
    '------------------------  
    
    Sub colorier(cible, plage)   
         With Sheets(1).Range(plage).Interior   
              Select Case cible   
                   Case Is = "Vac"   
                      ColorIndex = 1   
                   Case Is = "For"   
                         .ColorIndex = 2   
                   Case Is = "Pre"   
                         .ColorIndex = 3   
                   Case Is = "Mal"   
                        .ColorIndex = 4   
                   Case Else   
                        MsgBox "erreur de saisie", vbCritical   
                        Exit Sub   
              End Select   
         End With   
    End Sub   
    


    attention , sensible à la casse mais facilement adaptable
    Select case Ucase(cible)
    Case is ="VAC"
    etc.
    Michel
    0
    1. Fernand
       
      Bonjour Michel,
      La macro fonctionne bien, mais la mise à jour ne se fait pas, probablement dû au fait que l'information de la cellule provient d'une autre feuille.
      Avez-vous une idée ou une solution ?
      0
  2. Fernand
     
    Merci à vous tous d'avoir pris le temps de m'aider et c'est grandement apprécié, je test le tous ce soir et je vous redonne des nouvelles bientôt.

    Merci.
    0
  3. Fernand
     
    Bonjour à tous,
    Merci pour vos réponse.

    La macro fonctionne bien, mais la mise à jour ne se fait pas, probablement dû au fait que l'information de la cellule provient d'une autre feuille.

    Avez-vous une idée ou une solution ?
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      bonjour,

      dans quelle solution ????

      en ce qui me concerne, manquait un point
      Select Case cible
      Case Is = "Vac"
      .ColorIndex = 1
      et j'ai testé: ca fonctionne
      0