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

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

l'utilisation des commentaires ralentit vraiment l'exécution des macros. A mon avis, il faut éviter cela et ajouter une colonne supplémentaire.
Dans l'exemple en PJ, j'ai 14 tâches et avec "Benchmark" je sais le temps d'exécution de chaque fonction.
J'ai amélioré la méthode "Job75" dans la fonction "f_Avance1" et elle prendra les jours à partir du fin vers le début sans priorité.
Puis j'ai la méthode "BSALV1" dans la fonction "f-Avance2" et cette méthode utilise une priorité pour ces dates, donc on part aussi du fin au début mais une première fois pour les samedis normaux, puis pour les dimanches normaux, puis pour les fériés du lu-ven, puis les fériés du samedi et alors les fériés du dimanche.
Le but final est de faire cela comme "fonction" sans intervention d'une macro "event", comme je l'ai fait dans les colonnes O:Q, mais pour les moment, j'utilise les colonnes I:N pour l'explication. Plus tard, quand vous avez fait votre choix, ces colonnes et quelques macros seront supprimées.
Les colonnes "BSALV2" sont le résultat de la fonction que j'avais présenté la semaine passée, la seule différence avec BSALV1, c'est que la séquence est du début vers le fin au lieu du contraire. Mais bon, BSALV2 est à ignorer, je suppose, c'est pourquoi, je l'ai grisé.
Bon, pour chaque méthode et 14 lignes, mon ordinateur a besoin d'environ 100 ms, soit 5-6 ms/ligne. C'est significatif mieux que les propositions précédentes !!! Mais cela n'a rien à voir avec l'algorithme de job75 ou moi, mais l'utilisation des commentaires.
Vous voyez aussi qu'on a une MFC qui montre les différences entre colonne J et L. Bon, La colonne L est un peut plus tôt pour "combattre un incendie alors que la maison est déjà en feu" 😉 (BSALV2 est le plus prudent, puis BSALV1 et puis Job75). Les jours fériés sont en majuscule et autres jours en miniscules.
PS. l'avancement, pour le moment est une simple calculation avec les jours, mais si vous voulez utiliser les jours qu'on a travaillé, ce n'est que petit ajout à la fonction.
 

Pièces jointes

Dernière édition:
Bonjour kdet, bsalvv, le forum,
l'utilisation des commentaires ralentit vraiment l'exécution des macros.
C'est vrai mais cela n'a guère d'importance car normalement on ne traite qu'une seule ligne du tableau à chaque entrée.

Sauf avec la Workbook_Open ou lors de copier-coller.

Allez deux dernières modifications, j'ai remplacé dans la Worksheet_Change :
VB:
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
par :
VB:
With ListObjects(1).Range 'tableau structuré
    Set Target = Intersect(Target, .Columns(4).Resize(, 4)) 'Colonnes E F G H
    If Target Is Nothing Then Exit Sub
    Set Target = Intersect(Target.EntireRow, .Columns(7)).Cells 'j'avais oublié .Cells
End With
La macro ne s'exécute pas quand on modifie les colonnes B C D, la Workbook_Open est donc beaucoup plus rapide.

J'ai aussi ajouté dans la Workbook_Open :
VB:
Me.Saved = True 'évite l'invite à la fermeture si aucune modification

A+
 

Pièces jointes

comme je l'avais dit dans mon poste précédent, à la limite, on a seulement besoin d'une fonction et on n'a pas d'autres soucis (events, etc). Dès qu'on change une des 3 cellules, la fonction se recalcule tout seul. Impossible de battre cette principe. En plus et pour moi, dès le début, mon reproche principal, si on peut planifier un samedi normal au lieu d'un dimanche ou un férié, même si ce samedi n'est pas directement avant le fin, il faut le faire. Un samedi est beaucoup moins cher et c'est plus facile à trouver des victimes qu'un dimanche ou un férie.
 

Pièces jointes

Bonjour bsalv, le forum,
Les commentaires c'est pour une meilleure visibilité et encore merci @bsalv
j'opte pour : "la fonction sans intervention d'une macro"
kdet
 
Re, bsalv, le forum,
j'ai ce message :

kdet
 
Bonjour job75, le forum,

j'en prends bonne note de vos modifications.
Encore merci.

kdet
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…