Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[RÉSOLU] La dernière ligne du mois reste en couleur alors que...

un internaute

XLDnaute Impliqué
Bonjour le forum
Quelqu'un m'a fait une macro dans ThisWorkbook qui est celle ci-dessous. Tout va bien mais lorsque ce matin c'est passé automatiquement au 1er mars la dernière ligne de février (ligne 33) reste en couleur (interior color 17)
Pourrait-on faire la ou les modifs pour que les couleurs des colonnes A =15, B = 6, C =4 puis D à G = 43 retrouvent leurs couleurs.
Merci à vous pour vos éventuels retours
Cordialement
Fichier toto joint


VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)    'La Macro COLORISE ne sert plus (mise en commentaires)
 
    Dim NombreJour As Integer
    Dim Ladate As Date
    Dim MoisSuivant As String
    Dim Plage As Range
    Dim Cel As Range
    Dim F As String
    Dim I As Integer
    Dim J As Integer
 
    If Target.Count > 1 Then Exit Sub
 
    Application.EnableEvents = False
    ' On recherche si la page est surveillée
    If IsDate("1/" & Sh.Name) Then 'plus simple non ???
 
        ' Calcul du nombre de jour dans le mois indiqué par le nom de la feuille
        NombreJour = Day(DateAdd("m", 1, DateValue(Sh.Name)) - 1)
 
        If Target.Row - 5 > Day(Date) Then
 
            Beep
            MsgBox "PAS LE BON JOUR"
            Target = ""
            Range(Cells(Target.Row, 1), Cells(Target.Row, 7)).Interior.ColorIndex = 8
        Else
            ' Surveille la plage du 1er au dernier jours du mois
            If Not Intersect(Range("B6:C" & 5 + NombreJour), Target) Is Nothing Then
                ' Reconstruit la date de fonction du nom de la feuille et du numéro de ligne sélectionnée
                Ladate = DateSerial(Split(Sh.Name, " ")(1), Month(DateValue(Sh.Name)), Target.Row - 5)
                ' Si la colonne B et la colonne C est vide on efface la date
                Range("A" & Target.Row) = IIf(Range("B" & Target.Row) & Range("C" & Target.Row) = "", "", Ladate)
                If Range("A" & Target.Row) = "" Then Cells(Target.Row, 1).Resize(, 7).Interior.ColorIndex = 8
                
                ' si la ligne modifiée est la dernière du mois et que la colonne est la C
                If Target.Row = NombreJour + 5 And Target.Column = 3 Then
                    ' On construit le nom de la feuille du mois suivant
                    MoisSuivant = MonthName(Month(DateAdd("m", 1, DateValue(Sh.Name)))) & " " & Year(DateAdd("m", 1, DateValue(Sh.Name)))
                    ' On va vérifier si la feuille existe
                    If FeuilleExiste(MoisSuivant) = False Then Exit Sub
                    ' La feuille existe
                    With Sheets(MoisSuivant)
                        'On la rend visible
                        .Visible = xlSheetVisible
                        ' On masque celle que l'on vient de finir
                        ActiveSheet.Visible = xlSheetHidden
                        ' et on la sélectionne
                        .Select
                    End With
                End If
            End If
 
            If Range("A" & Target.Row) <> "" Then
 
                Application.ScreenUpdating = False
 
                Set Plage = Range(Cells(6, 1), Cells(6 + NombreJour, 1)).Resize(, 7)
 
                'mémorise le formatage de la colonne A puis passe la colonne A au format "Standard" pour avoir des valeurs de type Long
                'F = Plage.Columns(1).NumberFormat   'Si cette ligne de macro ne fonctionne pas appliquer la ligne ci-dessous
                If IsNull(Plage.Columns(1).NumberFormat) Then F = "dddd dd mmmm yyyy" Else F = Plage.Columns(1).NumberFormat
                Plage.Columns(1).NumberFormat = "General"
 
                'effectue la recherche de la date en type Long sur la colonne A
                Set Cel = Plage.Columns(1).Find(CLng(Date), , xlValues, xlWhole)
 
                'puis rétabli le format
                Plage.Columns(1).NumberFormat = F
 
                Plage.Interior.ColorIndex = 8
                'si trouvée, mets la plage au fond 8 puis colore la ligne du jour
                If Not Cel Is Nothing Then
 
                    Range(Cells(Cel.Row, 1), Cells(Cel.Row, Plage.Columns.Count)).Interior.ColorIndex = 17
                    J = Cel.Row - 1
                End If
                If J = 0 Then J = Plage.Rows.Count + 6
                'colore ensuite les cellules en fonction du jour
                For I = 6 To J
                    If Cells(I, 1).Value <> "" Then
                        If Application.CountIf(Sheets("Menu").Range("JOursFériés"), Range("A" & I)) > 0 Or Weekday(Range("A" & I), vbMonday) > 5 Then
                            Range("A" & I & ":G" & I).Interior.ColorIndex = 38
                        Else
                            Range("A" & I).Interior.ColorIndex = 15
                            Range("B" & I).Interior.ColorIndex = 6
                            Range("C" & I).Interior.ColorIndex = 4
                            Range("D" & I & ":G" & I).Interior.ColorIndex = 43
                        End If
                    End If
                Next I
                Application.ScreenUpdating = True
            End If
        End If
    End If
  Application.EnableEvents = True
End Sub
 

Pièces jointes

  • toto.xls
    265.5 KB · Affichages: 8

Paritec

XLDnaute Barbatruc
Bonjour David, le forum
oui c'est son habitude de poster sur plusieurs forum
et il parlait de réponse sur un autre forum
bon weekend
Papou

PS: je reviens sur ton forum et je vois que le forum est nouveau, je vais peut-être maintenant arriver à me retrouvé sur ce nouveau forum, je vais venir traîner un peu pour essayer et je te redirai, car j'ai lu que tu souhaitais des retours des utilisateurs
Bon weekend David et tous
 

David Aubert

XLDnaute Barbatruc
Administrateur
Modérateur
Hello papou,
Ok je comprends mieux... pas cool.
Sinon, j’ai hâte d’aviir ton retour.
N’hesite pas à me dire ce qui manque de ton point de vue, ce qui reste pas pratique,... même si tu compares à d’autres forums
Binne journee
David
 

Paritec

XLDnaute Barbatruc
Re bonjour David le forum
moi hélas, tu le sais je pense te l'avoir dit déjà à plusieurs reprises, perso, je ne retrouvais rien dans l'ex nouveau forum et plutôt que de me prendre la tête, je ne venais plus ou pratiquement plus, et ce n'est pas faute d'aimer xld, car j'aime xld tu peux me croire.
Mais quand on se sent mal quelque part bah on change c'est humain.
Je te promet que je vais venir traîner sur ce nouveau forum et je te redirai ce que j'en pense
bon weekend
Papou
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…