XL 2021 Planning chantier avec SERIE.JOUR.OUVRE.INTL

  • Initiateur de la discussion Initiateur de la discussion kdet
  • Date de début Date de début

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 !

kdet

XLDnaute Occasionnel
Bonsoir à tous, le forum,

J'aurai besoin de votre aide sur la fonction SERIE.JOUR.OUVRE.INTL
Dans mon planning, le chantier fonctionne du lundi au vendredi.
En G10 j'ai utilisé cette formule : LET(deb;[@DEBUT];dur;[@DUREE];fer;Fériés;weekend;11;SI(OU(ESTVIDE(deb);ESTVIDE(dur));"";SERIE.JOUR.OUVRE.INTL(deb;dur-1;1;fer))) et il y a deux résultats incohérents. Je ne sais pas ce qui cloche sur la formule.
J'aimerais apporter quelques précisions : le chantier peut exceptionnellement travailler le Samedi, Dimanche et Jous Fériés si on devrait finir le chantier en avance.
Je voudrais les inclure dans la formule mais je ne sais comment faire.
Je ne sais pas si c'est possible, sinon auriez-vous une solution.

Vous remerciant par avance de votre aide.
kdet
 

Pièces jointes

Bonjour kdet, le forum,

Si je comprends bien vous voulez pouvoir avancer quand c'est possible la date de FIN de la feuille "Planning".

Pour cela le plus simple est d'ajouter la colonne AVANCE et d'utiliser en colonne G cette fonction VBA :
VB:
Function FIN(deb As Range, duree As Range, fer As Range, avance As Range)
Dim jour&, n&
On Error GoTo 1
For jour = deb To deb + 10000
    If Weekday(jour, 2) < 6 And Application.CountIf(fer, jour) = 0 Then n = n + 1
    If n = duree Then FIN = jour - avance: Exit For
Next
1 If FIN = 0 Then FIN = ""
End Function
Le remplissage manuel des colonnes E F H du tableau est piloté par cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim fer As Range, avance&, n&, com$, jour&
With ListObjects(1).Range 'tableau structuré
    Set Target = Intersect(Target, .Cells)
    If Target Is Nothing Then Exit Sub
    Set Target = Intersect(Target.EntireRow, .Columns(7))
End With
Application.EnableEvents = False 'désactive les évènements
Target.Offset(, -1).ClearComments 'RAZ
Set fer = [Fériés]
For Each Target In Target 'si entrées ou effacements multiples
    If IsDate(Target.Offset(, -1)) Then
        avance = Abs(Int(Val(Target))): Target = IIf(avance, avance, "")
        If Target.Offset(, -1) < Target.Offset(, -3) + Target.Offset(, -2) - 1 Then
            Target.Select
            MsgBox "L'avance est trop grande et va être effacée !", 48
            Target = ""
        End If
        If Target > 0 Then
            n = 0: com = "Travail :"
            For jour = Target.Offset(, -1) + avance To 1 Step -1
                If Weekday(jour, 2) > 5 Or Application.CountIf(fer, jour) Then
                    n = n + 1
                    com = com & vbLf & "- " & Format(jour, "ddd dd/mm/yyyy")
                End If
                If n = avance Then Exit For
            Next jour
            With Target(1, 0).AddComment(com).Shape.TextFrame
                .Characters.Font.Name = "Courier New" 'chasse fixe
                .AutoSize = True 'ajuste la taille
            End With
        End If
    End If
Next Target
Application.EnableEvents = True 'réactive les évènements
End Sub
Pour la tester entrez 1 (ou plus) en cellules H14 et H23 et voyez les commentaires en colonne G.

A+
 

Pièces jointes

Dernière édition:
- 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
Retour