Chevauchement de périodes (dates)

andré

XLDnaute Barbatruc
Salut,

Petit problème de formule matricielle.

En A2 :B4 des périodes d’indisponiblité d’un engin de chantier.
Colonne A : date de début.
Colonne B : date de fin

25.03.06 03.04.06
11.04.06 18.04.06
25.04.06 06.05.06

En A11 :B11 une période de chantier
03.04.06 29.04.06

Je cherche à calculer le nombre de jours que cet engin n’est pas disponible sur ce chantier durant la période stipulée en A11 :B11, dimanche non compris.

Pour la première période d’indisponibilté, pas de problème :
SI(MOD(NB(A2:B4);2)>0;0;MAX(0;MIN(B11;B2)-MAX(A11;A2)+1-ENT((MIN(B11;B2)-1)/7)+ENT((MAX(A11;A2)-2)/7)))

Pour ne pas devoir additionner trois fois cette formule (une par période d’indisponibilité), je souhaite la transformer en matricielle.

Quelqu’un a-t-il une idée ?
Merci d’avance.

Â+

Message édité par: andré, à: 26/06/2006 08:55
 

Gruick

XLDnaute Accro
Bonjour André,
Je n'ai trouvé que nommer les 2 cellules de début et fin du chantier ligne 11 ou mettre des $ où il faut, sinon, je ne vois pas comment y arriver, la mettre en face des trois périodes et les additionner.
Demandes à Super Monique, reine incontestée des formules.
Cette demi-solution, j'étais tout fier de pouvoir aider un Barbatruc, et plouf.
En attendant...A plus,
Gruick
 

andré

XLDnaute Barbatruc
Salut Gruick,

Merci de t'être penché sur mon problème, mais ta solution est justement celle que je veux éviter.

Mon exemple ne reprend que trois périodes d'indisponibilité, mais en réalité il y en a beaucoup plus.

Chaque fois qu'un engin de chantier est réservé à un chantier, la période d'indisponibilité est inscrite.
Lorsqu'un nouveau chantier a besoin de cet engin, il est aisé de voir si les délais de disponibilité répondent aux besoins.

Avec un planning Gantt c'est facile à visualiser, mais il n'y a que 256 colonnes !

J'avais déjà essayé de trouver une formule avec SOMMPROD, mais pas de résultat concluant.

Â+
 

Gruick

XLDnaute Accro
Re,
Certes 256 colonnes, mais 65536 lignes (179 ans)
et 250 chantiers, et un nombre de feuilles (?)
une par engin.
En faisant pivoter l'écran !!!!!
Je plaisante, mais c'est une idée comme une autre, en attendant la lumière.
A suivre...
Gruick
 

andré

XLDnaute Barbatruc
Salut Gruick,

Figures-toi que j'y avais aussi songé.
J'ai même fait des essais, et ils sont très concluants.
Je sais que pour les responsables de chantier, un petit dessin (planning Gantt) vaut mieux qu'une belle formule, mais le problème c'est que tout ceci entre dans le cadre d'un assez gros dossier.

Mais là n'est pas le but de ma réponse.
Je suis sur que tu n'es pas le seul à t'étre penché sur ma question, mais bien le seul qui me signale ne pas avoir trouvé 'la' solution, tout en m'indiquant des pistes qui pourraient peut-être ...
Et c'est pour cela que je tiens tout particulierement à te remercier.

Tu vois, il est facile de laisser paraître que tu gagnes toujours au Loto, si tu ne montres que tes billets gagnants.

Il me semble être arrivé à la limite des connaissances des 'spécialistes' d'XLD (moi je n'ai pas honte d'avouer ne pas avoir de réponse).
Il me faudra donc chercher d'autres horizons.
N'empêche que j'ai eu le grand plaisir d'avoir pu partager un bout de chemin avec toi.

Bonne soirée.
Â+
 
A

andré

Guest
Salut Pascal,

Il est assez simple (pour les spécialistes évidemment) de faire une boucle en VBA pour apporter une solution à ce problème.
Ti_ m'a entre-temps fourni une solution par macro, magistrale comme à son habitude !

Mais tu sais combien je suis allergique aux macros (on n'aime que ce qu'on maîtrise et on ne maitrise, parfois, que ce qu'on aime)

Il m'est tout aussi facile de nommer les formules, et après avoir fait un comparatif entre les deux solutions (formules nommées et macro) je me dois de constater que la première solution (formules nommées) 'pèse' toujours bien moins qu'une macro.
Mon choix est donc simple.

Et pourtant je reste persuadé qu'il existe une solution par formule, matricielle ou SOMMEPROD), le tout étant de la trouver.

Tu comprendrzs aussi aisément que pendant que je la cherche, je serai un peu moins présent.

Bonne soirée à toi.
Â+
 

ChTi160

XLDnaute Barbatruc
Salut André
bonsoir le fil
je vois que tu as eu des propositions (honnêtes j'espère )suite au post de Pascal j'avais fait cette Fonction arffff
donc je poste lol
Public Function Cmpjour(MydateDept As String, MyDateFin As String)
Dim DatDept As Long, DatFin As Long
Dim Item As Long
Dim Njour As Integer
DatDept = Format(CDate(Application.Substitute(Trim(MydateDept), '.', '/')), '00000')
DatFin = Format(CDate(Application.Substitute(Trim(MyDateFin), '.', '/')), '00000')
For Item = DatFin To DatDept Step -1

If Weekday(Item) > 1 Then Njour = Njour + 1

Next
Cmpjour = Njour
End Function
dans la colonne C en C1 mettre = cmpjour(A1;B1)puis incrémenter
bonne fin de Journée

Message édité par: Chti160, à: 27/06/2006 18:56
 

Monique

Nous a quitté
Repose en paix
Bonjour,

Une matricielle (quatre au choix, en fait)

Indisponibilité de l'engin
Dates de début en colonne, plage nommée Debut
Dates de fin en colonne, plage nommée Fin
Dates de début et de fin du chantier : cellules nommées De et Fi

Nombre de jours d'indisponibilité, hors dimanche :
=SOMME((LIGNE(INDIRECT(De&':'&Fi))>=TRANSPOSE(Debut))*(LIGNE(INDIRECT(De&':'&Fi))1))

Sans dimanches ni fériés :
=SOMME((LIGNE(INDIRECT(De&':'&Fi))>=TRANSPOSE(Debut))*(LIGNE(INDIRECT(De&':'&Fi))1)*(NB.SI(Fer;LIGNE(INDIRECT(De&':'&Fi)))=0))

Pour faire plus court mais disposition moins pratique,
dates d'indisponibilité de l'engin en ligne
Dates de début en ligne, plage nommée DeE
Dates de fin en ligne, plage nommée FiE

Nombre de jours d'indisponibilité, hors dimanche :
=SOMME((LIGNE(INDIRECT(De&':'&Fi))>=DeE)*(LIGNE(INDIRECT(De&':'&Fi))1))

Sans dimanches ni fériés :
=SOMME((LIGNE(INDIRECT(De&':'&Fi))>=DeE)*(LIGNE(INDIRECT(De&':'&Fi))1)*(NB.SI(Fer;LIGNE(INDIRECT(De&':'&Fi)))=0))
 

andré

XLDnaute Barbatruc
Bonjour Monique,

Mille mercis.

Comme je devais étirer la formule vers le bas pour d'autres 'dates de chantier', il m'a suffit d'enlever les $ des cellules nommées De et Fi pour que cela fonctionne.
Problème résolu.

Petite question toutefois.
La partie de formule : =LIGNE(INDIRECT(De&':'&Fi)) renvoie 'lun 03 avr 06'
=De et =E5 me renvoient la même valeur.
Pourquoi dans le formule ne puis-je remplacer l'un par l'autre ?

Je regarde la suite et me permettrai de te déranger si j'ai d'autres questions.
Bonne journée.

Â+
 

C@thy

XLDnaute Barbatruc
Pfiou!!! Super Géniale Monique a parlé, et tout est dit! Et en plus, elle a même intégré les jours fériés (elle pense à tout cette Monique!!!)
Sublime!!! J'en reste sur le c... (je dirais bien sans voix, mais je vois d'ici André me dire que pour une femme c'est pas possible ;)!)

Encore une fois, merveilleuse Monique et ses formules magiques!

Bises

C@thy
 

Statistiques des forums

Discussions
312 216
Messages
2 086 348
Membres
103 194
dernier inscrit
rtison