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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
33
Affichages
709
Réponses
5
Affichages
286
  • Question Question
Réponses
7
Affichages
329
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…