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

Modifier cette macro pour incrémenter une feuille "Congés", macro de job75

Christian0258

XLDnaute Accro
Bonjour à tout le forum,

Je souhaiterais, à nouveau, votre aide pour adapter un code de job75.

Ce code fonctionne sur d'autres fichiers, mais je n'arrive pas à l'adapter à mon fichier...

voir fichier.

Merci pour le temps que vous voudrez bien vouloir m'accorder.
Bien amicalement,
Christian
 

Pièces jointes

  • Incrémenter feuille congés.xlsm
    25.4 KB · Affichages: 22

job75

XLDnaute Barbatruc
Re : Modifier cette macro pour incrémenter une feuille "Congés", macro de job75

Re,

En déclarant Dates As Range VBA fait la conversion, pas besoin de se préoccuper du calendrier.

Et c'est aussi rapide, utilise donc plutôt :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, [C13].CurrentRegion) Is Nothing Then Exit Sub
Dim a, fer As Range, numero&, nom$, Dates As Range, Conges As Range, t(), i&, ub%, n&, rest()
a = Array("CA", "RTT", "CA/HP", "CA/FR", "(CA)", "(RTT)", "(CA/HP)", "(CA/FR)") 'à adapter
Set fer = [Feries]
numero = Application.Max(Sheets("Congés").[A:A]) + 1 'nécessaire pour la MFC
nom = Target
Set Dates = [F11].Resize(, 31) 'adapter éventuellement
Set Conges = Target(16, 4).Resize(, 31) 'adapter éventuellement
'---tableau de base sans week-ends et jours fériés---
ReDim t(1 To 2, 1 To 31)
For i = 1 To 31
  If Weekday(Dates(i), 2) < 6 And Application.CountIf(fer, Dates(i)) = 0 _
    Then ub = ub + 1: t(1, ub) = Dates(i).Value2: t(2, ub) = Conges(i)
Next i
'---analyse des congés---
For i = 1 To ub
  If IsNumeric(Application.Match(Trim(t(2, i)), a, 0)) Then
    n = n + 1
    ReDim Preserve rest(1 To 5, 1 To n)
    rest(1, n) = numero
    rest(2, n) = nom
    rest(3, n) = t(1, i)
    Do
      i = i + 1
      If i > ub Then Exit Do
    Loop While t(2, i) = t(2, i - 1)
    i = i - 1
    rest(4, n) = t(1, i)
    rest(5, n) = t(2, i)
  End If
Next i
'---restitution---
If n Then
  With Sheets("Congés")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    i = .Range("A" & .Rows.Count).End(xlUp)(2).Row
    .Cells(i, 1).Resize(n, 5) = Application.Transpose(rest) 'maximum 65536 lignes
    .Cells(i, 6).Resize(n) = "=RC[-2]-RC[-3]+1"
    .Cells(i, 7).Resize(n) = "=NETWORKDAYS(RC[-4],RC[-3],Feries)"
    .Activate
  End With
End If
End Sub
Fichier (6).

Bonne soirée.
 

Pièces jointes

  • Incrémenter feuille congés(6).xlsm
    42.1 KB · Affichages: 25

Discussions similaires

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