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

Autres Mettre en couleur ligne avec VBA car MFC occupées (Excel 2003)

un internaute

XLDnaute Impliqué
Bonjour le forum
Je voudrais mettre en couleur la ligne contenant "Repos "Congés" par VBA car les 3 MFC occupées
Colonnes B à E



La colonne A est bonne



Macro ci-dessous
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim NombreJour As Integer
Dim Ladate As Date
Dim MoisSuivant As String
Dim sDate As String, ValDate As Variant
Dim MoisPrec As String

    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Sh.Range("B6:B36")) Is Nothing Then
        If Target.Value = "" Then
            Cells(Target.Row, "A").Resize(, 3) = ""
            Cells(Target.Row, "I") = ""
        ElseIf IsNumeric(Target) Then       ' Ajout ligne Modifs le 09/02/2023 pour pouvoir taper un nombre même s'il y a Repos ou Congés dans la cellule colonne B
            Cells(Target.Row, "C") = ""     ' Ajout ligne Modifs le 09/02/2023 pour pouvoir taper un nombre même s'il y a Repos ou Congés dans la cellule colonne B
        End If
    End If
 
  If Not Intersect(Target, Sh.Range("F2:F3")) Is Nothing Then          '1ère ligne en commentaires pour employer le /
    ValDate = Target.Value2
    If IsNumeric(ValDate) Then
      ' Selon la saisie effectuée
      Select Case Len(ValDate)
      Case 4  ' format jmaa
        sDate = "0" & Left(ValDate, 1) & "/0" & Mid(ValDate, 2, 1) & "/" & Right(ValDate, 2)
      Case 5  ' format jmmaa
        sDate = "0" & Left(ValDate, 1) & "/" & Mid(ValDate, 2, 2) & "/" & Right(ValDate, 2)
      Case 6  ' format jjmmaa
        sDate = Left(ValDate, 2) & "/" & Mid(ValDate, 3, 2) & "/" & Right(ValDate, 2)
      Case 7  ' format jmmaaaa
        sDate = Left(ValDate, 1) & "/" & Mid(ValDate, 2, 2) & "/" & Right(ValDate, 4)
      Case 8  ' format jjmmaaa
        sDate = Left(ValDate, 2) & "/" & Mid(ValDate, 3, 2) & "/" & Right(ValDate, 4)
      End Select
      End If
      
      Dim J As Integer
      Dim Total As Double
      
      Application.EnableEvents = False
      On Error Resume Next
      Target.Value = CDate(sDate)
      On Error GoTo 0
      Target.NumberFormat = "dd mmm yyyy"
      Application.EnableEvents = True
      
      If Month(DateValue(Sh.Name)) > 1 Then
        MoisPrec = Application.Proper(Format(DateAdd("m", -1, DateValue(Sh.Name)), "Mmmm yyyy"))
        If Target <= CDate(Range("'" & MoisPrec & "'!F3")) Then
          MsgBox "Attention " & vbCr & vbCr & "La date inscrite est plus petite que la dernière date de la feuille " & MoisPrec
          Application.EnableEvents = False
          Target = ""
          Application.EnableEvents = True
          Exit Sub
        Else
          For J = 36 To 6 Step -1          '******* Nouvelle partie de macro Début
          If Range("'" & MoisPrec & "'!I" & J) <> "" Then
          If CDate(Range("F2")) <= CDate(Range("'" & MoisPrec & "'!I" & J)) Then Total = Total + _
            Val(Range("'" & MoisPrec & "'!D" & J)) + _
            Val(Range("'" & MoisPrec & "'!E" & J))

          End If
          Next J
           Range("F6") = TotalFrais([F2], [F3])
          End If
          End If                           '******* Nouvelle partie de macro Fin
  Else                                     '1ère ligne en commentaires pour employer le /
    Application.EnableEvents = False
    ' On recherche si la page est surveillée
    If InStr(1, "JanvierFévrierMarsAvrilMaiJuinJuilletAoûtSeptembreOctobreNovembreDécembre", _
                Split(Sh.Name, " ")(0), vbTextCompare) Then
      ' 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 = ""
      Else
 
        ' Surveille la plage du 1er au dernier jours du mois
        'If Not Intersect(Range("B6:C" & 5 + NombreJour, "F6:F" & 5 + NombreJour), Target) Is Nothing Then
        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
          Select Case Range("B" & Target.Row)
            Case "Repos", "Congés"
              Range("C" & Target.Row) = Range("B" & Target.Row)
          End Select
          If Range("B" & Target.Row) = "Congés" Or Range("B" & Target.Row) = "Repos" Then Range("C" & Target.Row) = Range("B" & Target.Row)
          Range("A" & Target.Row) = IIf(Range("B" & Target.Row) & Range("C" & Target.Row) = "", "", Application.Proper(Format(Ladate, "dddd dd mmmm yyyy")))
          Range("I" & Target.Row) = IIf(Range("A" & Target.Row) & Range("B" & Target.Row) & Range("C" & Target.Row) = "", "", Ladate)
          Range("H" & Target.Row) = IIf(Not (IsNumeric(Range("B" & Target.Row))), 0, 1)
          If Range("B" & Target.Row) = "" Then
            Range("H" & Target.Row) = ""
          ElseIf Weekday(CDate(Range("I" & Target.Row)), 2) >= 6 Then   'Modifs le 12/02//2023 pour ne pas afficher 1 dans colonne H. Avant modifs = 6 Then
            Range("H" & Target.Row) = 0
          End If
          ' 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       ' Colonne C
            ' 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 Function
            ' 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
      End If
    End If
  End If                                           'Mettre en commentaires pour employer le /
  End If
 
  Application.EnableEvents = True
'End Function
End Sub

Merci à vous pour vos éventuels retours
 
Solution
Bonsoir le forum
Comme convenu avec TooFatBoy!!!
Qui lui a certainement terminé de monter son armoire de toilette dans la salle de bain!!!
Et moi je"rame"!!!
Bonne fin de soirée
Cordialement


VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim NombreJour As Integer
Dim Ladate As Date
Dim MoisSuivant As String
Dim sDate As String, ValDate As Variant
Dim MoisPrec As String

    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Sh.Range("B6:B36")) Is Nothing Then
      Application.EnableEvents = False
        If Target.Value = "" Then
            Cells(Target.Row, "A").Resize(, 3) = ""
            Cells(Target.Row, "I") = ""
        ElseIf IsNumeric(Target) Then
            Cells(Target.Row...

Discussions similaires

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