Excel - VBA - cellule couleur - Reset

Résolu
Bonjour,
j'ai un code qui me permet de mettre en couleur certaines cellules. Il s'agit d'un calendrier mensuel, chaque cellule correspondant à un jour.
j'aimerais créer une macro qui me permette de faire un reset sur ces cellules, c'est à dire vider les cellules de leur couleur (ou les remplir en blanc, voir code ci-dessous: RGB 255,255,255)à chaque changement de mois, mais ensuite pouvoir à nouveau les "colorier" lorsque je double clique dessus.

Voici le code initial qui colorie les cellules sur double click.

Quelqu'un pourrait m'aider (je suis un novice en VBA).
D'avance merci !!

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim couleurs()
couleurs = Array(RGB(255, 0, 0), RGB(0, 0, 255), RGB(255, 255, 255))
On Error GoTo color
Target.Interior.color = couleurs(Application.WorksheetFunction.Match(Target.Interior.color, couleurs, 0) Mod 3)
Cancel = True
Exit Sub
color:
Target.Interior.color = couleurs(0)
Cancel = True
End Sub

4 réponses

  1. Re,

    Alors s'il n'est plus question de changement de couleur comme dans ton code initial, cela devient beaucoup plus simple

    crée un bouton activex (un CommandButton) et le code sera

    Private Sub CommandButton1_Click()
    [B12:C12,F12,B16:C16,F16].Interior.ColorIndex = xlNone
    [B12].Activate
    End Sub

    ou si tu veux utiliser le code couleur RGB

    Private Sub CommandButton1_Click()
    [B12:C12,F12,B16:C16,F16].Interior.color = RGB(255, 255, 255)
    [B12].Activate
    End Sub

    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    1. Merci beaucoup Mike !
      Encore une dernière question : si je veux vider les cellules de leur contenu (par exemple du texte), peux-tu m'indiquer quel code utiliser ?

      oops, j'ai trouvé....

      Private Sub CommandButton1_Click()
      [Range] .ClearContents
      End Sub

      Merci malgré tout.
  2. Re,

    le code fonctionne parfaitement, par contre ce code ne convient pas associé à un bouton.

    premier double clic la cellule devient rouge si elle est sans couleur ou passe à la couleur suivante soit bleu ou sans couleur si elle est bleu, le code

    RGB(255, 255, 255) colorise la cellule en blanc et il vaudrait mieux utiliser la syntaxe (xlNone) soit sans couleur

    regarde le fichier joint

    https://www.cjoint.com/c/EAdpzPo9zhe
    1. Bonjour

      j'aimerais créer une macro qui me permette de faire un reset sur ces cellules, c'est à dire vider les cellules de leur couleur (ou les remplir en blanc,

      Je ne sais pas si j'ai compris le pb.
      Une procedure qui colorie en blanc la plage A1:A5

      Public Sub RAZ()
      Const plage = "A1:A5"
      Range(plage).Interior.color = RGB(255, 255, 255)
      End Sub


      Salutations à Mike en passant

      Cdlmnt
      1. Merci ccm81, c'est exactement çà mais je dois associer à plusieurs range/cellules en un coup. Càd qu'en appuyant sur le point lié à la macro, les cellules B12, D12, F12 ainsi que B16, D16, F16 etc.... soient coloriées en blanc.
        Peux-tu indiquer comment mentionner cela dans le code en question?

        Merciiiiiiii
    2. Bonjour,

      Remplace MOD3 par Mod 4

      Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      Dim couleurs()
      couleurs = Array(RGB(255, 0, 0), RGB(0, 0, 255), RGB(255, 255, 255))
      On Error GoTo color
      Target.Interior.color = couleurs(Application.WorksheetFunction.Match(Target.Interior.color, couleurs, 0) Mod 4)
      Cancel = True
      Exit Sub
      color:
      Target.Interior.color = couleurs(0)
      Cancel = True
      End Sub
      1. merci Mike-31 mais cela ne marche pas (debug sur ligne Target.Interior.color = couleurs(0) )de plus je n'arrive pas à associer ce code à un bouton de Macro (le nouveau module créé n'apparait pas dans la liste des macros disponibles).
        A quoi correspond MOD 4 dans ta proposition (sachant que je crée un module 4 pour coller le code proposé ?

        merci
        MB