Mise en forme conditionnelle remplacé par un code VBA

22classeur-test.xlsx (12.01 Ko)

Bonjour à tous,

je souhaite solliciter votre aide pour une petite Macro,

je souhaite remplacer la mise en forme conditionnelle par un code VBA si c'est possible car la mise en forme conditionnelle déconne parfois sur mon fichier Partagé.

j'ai expliqué mon besoin sur le fichier.

Merci par avance pour votre aide.

Bonjour,

Un exemple :

La macro se lance au moment du changement d'onglet.

Pour actualiser la macro si la cellule nommé "Date" (ta cellule Q6) est modifiée,

Private Sub Worksheet_Activate()
' Doit devenir
Private Sub Worksheet_Change(ByVal Target As Range)
' et ajoute en début de macro
If Not Intersect(Target, Range("Date")) Is Nothing Then
' et n'oublie pas le End if a la fin

A+

Merci pour votre réponse, mais je pense que vous n'avez pas bien compris mon besoin,

je souhaite que les colonnes à partir de H se remplissent en fonction des dates renseignées sur les colonnes D et E en bleu, et en vert si la colonne G est remplie.

Alors oui, j'ai bien compris le besoin.

Et le changement de couleur est bien en vert si la colonne G n'est pas vide.

Change les dates

image

Puis passe sur la feuil 2 et quand tu reviens sur la feuil 1 :

image

Si tu veux que la macro se lance a chaque changement de date fait comme mon message precedent avec Private Sub Worksheet_Change(ByVal Target As Range) a la place de Worksheet_Activate()

bonjour,

car la mise en forme conditionnelle déconne parfois sur mon fichier Partagé.

il faut resoudre ce problème avec une code en VBA, pouvez-vous ajouté vos MFCs dans le fichier ?

merci @Geof52, ça fonctionne très bien, merci bcp. Passes une excellente journée.

@Geof52, est-ce possible de modifier le code et de lancer le remplissage que sur la ligne ou je souhaite saisir les date début et fin, et non si je fais une modif sur la cellule "Date".
car ton code refait le remplissage de toutes les lignes quand je change la cellule "date"

merci par avance.

C'est normal, ta cellule "Date" détermine le début de ton planning en cellule H7,
Si le début de ton planning change, chaque ligne doit retrouver ses dates par rapport au nouveau planning.

Ou j'ai mal compris ?

Par contre si tu souhaites que la macro se lance a chaque changement de date de début et fin de dispo (colonne 4 et 5) au lieu de la cellule "Date"
Le code doit ressembler à :

Private Sub Worksheet_Change(ByVal Target As Range)
'Lien couleurs => https://www.excel-pratique.com/fr/vba/liste-couleurs-rgb

If Target.Column = 4 Or Target.Column = 5 Or Target = Range("Date") Then
    Application.ScreenUpdating = False
    Dim DateDepart, DateDebut, DateFin   As Date
    Dim LigMachine, FinLigMachine, Coul_OK As Integer

    Bleu = RGB(0, 0, 255)
    Vert = RGB(0, 255, 0)

    DateDepart = Format(Range("H7"), "dd/mm/yy")   '+27 col
    FinLigMachine = Cells(Rows.Count, 1).End(xlUp).Row

    For LigMachine = 9 To FinLigMachine
        DateDebut = Cells(LigMachine, 4)
        DateFin = Cells(LigMachine, 5)
        Range("H" & LigMachine & ": AI" & LigMachine).Interior.Pattern = xlNone
        For Coul_OK = 0 To 27
            With Cells(LigMachine, 8 + Coul_OK)
                If DateDebut <= DateAdd("d", Coul_OK, DateDepart) Then
                    If Cells(LigMachine, 7) = "" Then .Interior.Color = Bleu Else .Interior.Color = Vert
                End If
                If DateFin < DateAdd("d", Coul_OK, DateDepart) Then
                    .Interior.Pattern = xlNone
                End If
            End With
        Next Coul_OK
    Next LigMachine
    Application.ScreenUpdating = True
End If
End Sub

re,

si les MFCs se déconnent, on n'a qu'à mettre à jour les MFCs avec les MFC originaux corrects. On lance ce macro par exemple à l'ouverture du fichier. Je suppose que les MFC de H9:AI9 sont correct

Sub Update_MFC()
     With Sheets("Feuil1").Range("H9:AI9")   'plage avec les MFC corrects
          .Offset(1).Resize(100).FormatConditions.Delete     'supprimer les MFCs dans la plage en dessous
          .Copy                              'copier les MFC originaux
          .Offset(1).Resize(100).PasteSpecial xlFormats     'coller
     End With
End Sub

Bonjour BsAlv,

J'avoue m'en être tenu qu'au titre donc "pas de MFC" mais ta solution est bien plus rapide aussi bien a la construction que l'execution.
Apres pourquoi dans ce fichier partagé la MFC déconne, le mystere reste entier.

A+

Salut à tous les deux,

C'est astucieux de ta part @BsAlv car ça permets directement de corriger la MFC si elle déconne. mais aussi la solution proposée par @Geof52 est impec aussi.

je vous remercie tous les deux.

moi aussi je ne sais pas pourquoi la MFC déconne, c'est peut être les différentes versions d'Excel car le fichier est partagé entre plusieurs utilisateurs avec différentes versions.

merci encore une fois.

on a ce déconnage avec des tableaux structurés quand on commence à supprimer/ajouter/copier des lignes. Le nombre de MFCs peut se doubler à chaque fois avec chaque fois une autre plage.

Alors si on n'a pas touché à la premiere ligne, on supprime tous les MFCs à partir de la 2ième ligne et puis on copie et colle les MFC de la première ligne vers le reste.

C'est quelque chose qu'on doit faire régulièrement, pas à chaque changement, 1 fois par jour ??? Donc si on le fait à chaque ouverture ...

Rechercher des sujets similaires à "mise forme conditionnelle remplace code vba"