Selectionner les Cellules de couleur par mise en forme condi pour les clear [Résolu]

Signaler
Messages postés
14
Date d'inscription
jeudi 7 juin 2018
Statut
Membre
Dernière intervention
20 septembre 2020
-
Messages postés
14
Date d'inscription
jeudi 7 juin 2018
Statut
Membre
Dernière intervention
20 septembre 2020
-
Bonjour,

Je réalise un planning d'équipe en 3x8 et j’essaie de l'automatiser au maximum.
Sur la feuille "Janv" j'ai placé un bouton pour Reset les valeurs et le format des cellules pour entamer la nouvelle année. Pour cela j'ai réalisé ce code est pas de souci.
Sub Reset() 'Reset de tout le classeur

Dim Classeur As Worksheet, Reset As Integer
Reset = MsgBox("Si vous n'avez pas enregistrer votre fichier pour la nouvelle année," & Chr(10) & "toutes les données de l'année précédente seront perdu." & Chr(10) & "" & Chr(10) & "Voulez vous continuer ?", vbYesNo)

If Reset = vbYes Then
Sheets("Janv").Select 'premier onglet
Application.ScreenUpdating = False
    For Each Classeur In ActiveWorkbook.Worksheets
    If Classeur.Name <> "Base" Then
            Classeur.Activate
        Range("C8:X38").Select
            Selection.ClearContents
        With Selection.Interior 'Suppression des couleurs de fond
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        Range("C8:C38").Value = "J"
        Range("C8:C38").Select
        With Selection.Interior 'couleurs de fond colonne Monique
            .Color = 15783870
        End With
        Range("A1").Select 'selec A1 pour desselec la suppr
    End If
    Next Classeur
    Sheets("Janv").Select 'Retour au mois Janv
Else
MsgBox "Enregistrez votre fichier avec le nom de la nouvelle année, puis revenez supprimer toutes les données."
End If
End Sub


Le problème que j'ai c'est que je souhaite que pour la colonne du Chef qui est toujours de journée, la lettre "J" s'affiche suite au Reset (chose faite à la ligne 19).
Seulement je souhaite que les cellules correspondant aux week-end reste vide. Les cellules des samedi/dimanche étant de couleur différentes je me suis dit pas de souci, je cherche les cellule de cette couleur et je les clear.
Pour cela j'ai créé ce code la :
Sub TestColor()
Dim plage As Range, cellule As Range
Dim couleur As Long
  couleur = RGB(250, 191, 143)                        'couleur
  Set plage = Range("C8:C38")
  For Each cellule In plage.Cells                     ' Analyse de chaque cellule
    If cellule.Interior.Color = couleur Then          ' si elle est de la bonne couleur ...
      cellule.ClearContents            ' ... remplacer par aucun remplissage
    End If
  Next cellule
End Sub


Alors ça fonctionne bien sur les cases dont le fond est de la bonne couleur (couleur mise manuellement pour tester), cependant ça ne fonctionne pas dans mon cas car mes week-end sont colorisé par mise en forme conditionnelle.
J'ai l'impression que Excel applique un calque sur la cellule pour appliquer une couleur en MiseEnFC et donc la considère transparente malgré un visuel colorisé.

J’espère avoir été suffisamment claire.
Je verrais pour mettre mon fichier si besoin (pas mal d'info personnel à retirer avant)
Merci

Configuration: Windows / Firefox 80.0

3 réponses

Messages postés
16209
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
17 septembre 2020
3 031
bonjour

J'ai l'impression que Excel applique un calque sur la cellule pour appliquer une couleur en MiseEnFC et donc la considère transparente malgré un visuel colorisé.

Il faut gérer par la valeur qui a déclenché la MFC et non par la couleur résultante

Messages postés
14
Date d'inscription
jeudi 7 juin 2018
Statut
Membre
Dernière intervention
20 septembre 2020

Ok je vais chercher dans cette direction.
C’est dommage j’espérais que ce soit possible car autant le rechercheV en formule (qui est dans ma MFC) pas de souci mais transcrire une rechercheV en vba faut que je me creuse la tête ^^.
Je fais mes recherches et test et je reviens vers vous si j’ai la solution.
Au cas où quelqu’un a des exemples de code équivalent à une rechercheV je suis preneur ;)
En tout cas merci
Messages postés
16209
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
17 septembre 2020
3 031
Bonjour,

Quelle est la formule de ta MFC ?
au besoin:
Mettre le classeur sans données confidentielles en pièce jointe sur 
https://mon-partage.fr
Dans lien de téléchargement
faire un clic droit- copier l’adresse du lien et le coller dans votre message en cours sur ccm



Messages postés
14
Date d'inscription
jeudi 7 juin 2018
Statut
Membre
Dernière intervention
20 septembre 2020

C'est bon.
J'ai d'abord tourné un peu en rond mais à force de chercher dans la direction du test de ma MFC, comme tu me l'as conseillé, j'ai trouvé la solution.
Je le met au cas ou ça peut aider certaines personnes.
Sub DateTest()
    Dim NumLine As Long
 For NumLine = 8 To 38
    If Weekday(Cells(NumLine, 1).Value, vbMonday) > 5 Then
        Cells(NumLine, 3).Value = ""
    End If
 Next
End Sub


Pour ceux qui ont plus de mal avec la lecture de code je m'explique.
J'ai finalement fait une boucle For pour les lignes de mes jours (de 8 à 38=31jours), puis j'ai cherché si dans ses cellules il y avait des jours supérieure à 5 (semaine commençant par un lundi). Pour finir, si mon "If" est correct je ne met aucune valeur dans la cellule de la colonne de la ligne testée.

Je suis parti dans ce sens là par rapport à mon idée de base mais finalement je vais faire l'inverse et inscrire la lettre J dans les jours qui sont inférieur à 6. C'est plus logique que de tout remplir puis supprimer.

Encore merci