Excel - VBA - cellule couleur - Reset

Résolu
Misterbean1 Messages postés 53 Statut Membre -  
Misterbean1 Messages postés 53 Statut Membre -
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
A voir également:

4 réponses

Mike-31 Messages postés 19571 Statut Contributeur 5 136
 
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
0
Misterbean1 Messages postés 53 Statut Membre 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
0
ccm81 Messages postés 11033 Statut Membre 2 433
 
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
0
Misterbean1 Messages postés 53 Statut Membre 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
0
Mike-31 Messages postés 19571 Statut Contributeur 5 136
 
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
0
Mike-31 Messages postés 19571 Statut Contributeur 5 136
 
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.
0
Misterbean1 Messages postés 53 Statut Membre 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.
0