Selectionner les Cellules de couleur par mise en forme condi pour les clear

Résolu/Fermé
DidsCraft Messages postés 30 Date d'inscription jeudi 7 juin 2018 Statut Membre Dernière intervention 3 mai 2024 - Modifié le 7 sept. 2020 à 12:26
DidsCraft Messages postés 30 Date d'inscription jeudi 7 juin 2018 Statut Membre Dernière intervention 3 mai 2024 - 8 sept. 2020 à 10:38
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

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
7 sept. 2020 à 13:36
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

0
DidsCraft Messages postés 30 Date d'inscription jeudi 7 juin 2018 Statut Membre Dernière intervention 3 mai 2024 1
7 sept. 2020 à 16:39
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
8 sept. 2020 à 08:53
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



0
DidsCraft Messages postés 30 Date d'inscription jeudi 7 juin 2018 Statut Membre Dernière intervention 3 mai 2024 1
8 sept. 2020 à 10:38
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
0