Excel - VBA - cellule couleur - Reset

Résolu/Fermé
Misterbean1 Messages postés 53 Date d'inscription vendredi 13 mai 2011 Statut Membre Dernière intervention 22 août 2017 - 3 janv. 2015 à 12:19
Misterbean1 Messages postés 53 Date d'inscription vendredi 13 mai 2011 Statut Membre Dernière intervention 22 août 2017 - 3 janv. 2015 à 19:17
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

Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
3 janv. 2015 à 13:12
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 Date d'inscription vendredi 13 mai 2011 Statut Membre Dernière intervention 22 août 2017 1
3 janv. 2015 à 13:43
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 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 3/01/2015 à 14:42
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 Date d'inscription vendredi 13 mai 2011 Statut Membre Dernière intervention 22 août 2017 1
3 janv. 2015 à 16:15
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 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
3 janv. 2015 à 15:17
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 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
Modifié par Mike-31 le 3/01/2015 à 16:26
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 Date d'inscription vendredi 13 mai 2011 Statut Membre Dernière intervention 22 août 2017 1
Modifié par Misterbean1 le 3/01/2015 à 19:20
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