Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Formule un peu tordue...besoin d'un coupe de main

11 réponses
Avatar
Domi
Bonsoir à tous,
Je sollicite votre aide pour une formule un peu délicate.
En B18:B2000, j'ai une liste de dates classées par ordre croissant. Tous les
jours sans les samedi et dimanche.
Dans la colonne C, en regard de chaque date figure une valeur numérique.
Enfin dans une cellule nommée Jmasq figure une valeur numérique.

Je voudrais connaître par formule dans la cellule B16 :
La date de la colonne B18:B2000 = à la date du jour plus la valeur de Jmasq
et dont la valeur qui figure en C est <> de 0.
Si la date ne figure pas dans la plage (un samedi ou un dimanche ou si la
valeur en C= 0, alors renvoie de la première date rencontrée immédiatement >
avec C <>0.

Ex : si nous sommes le 01/07/03 et que Jmasq=5, cela devrait me renvoyer
06/07/03 mais comme c'est un dimanche cela devra me renvoyer le premier
lundi soit 07/07/03.
Si lundi 07/07/03 avait eut 0 en C, alors cela aurait du me renvoyer mardi
si C<> de 0.

J'espère que c'est à peu près clair...

Merci
Domi

10 réponses

1 2
Avatar
Cégé
Bonjour.

La fonction RECHERCHE permet des rapprochements je crois. L'important étant
que la table de recherche soit triée, ce qui est le cas.

J'ai été confronté à un pb de ce genre. Je n'ai résolu en incluant les
samedi et les dimanche et en utilisant JOURSEM comme discriminant. Je crois
qu'il existe même des fonctions date reliées au calendrier du pays incluant
les fériés. On doit pouvoir faire une fonction du genre "JourTravaillé". Qui
répond "Faux" pour 4 Juillet aux US et le 14 en France, sans paramétrer le
calendrier "à la main". JOUR.ESTOUVRE ou un truc comme ça. Peut être macros
complémentaire mais en standard avec excel.


Pardon de répondre "à côté".

--
Christian

"Domi" a écrit dans le message news:

Bonsoir à tous,
Je sollicite votre aide pour une formule un peu délicate.
En B18:B2000, j'ai une liste de dates classées par ordre croissant. Tous
les

jours sans les samedi et dimanche.
Dans la colonne C, en regard de chaque date figure une valeur numérique.
Enfin dans une cellule nommée Jmasq figure une valeur numérique.

Je voudrais connaître par formule dans la cellule B16 :
La date de la colonne B18:B2000 = à la date du jour plus la valeur de
Jmasq

et dont la valeur qui figure en C est <> de 0.
Si la date ne figure pas dans la plage (un samedi ou un dimanche ou si la
valeur en C= 0, alors renvoie de la première date rencontrée immédiatement

avec C <>0.

Ex : si nous sommes le 01/07/03 et que Jmasq=5, cela devrait me renvoyer
06/07/03 mais comme c'est un dimanche cela devra me renvoyer le premier
lundi soit 07/07/03.
Si lundi 07/07/03 avait eut 0 en C, alors cela aurait du me renvoyer mardi
si C<> de 0.

J'espère que c'est à peu près clair...

Merci
Domi




Avatar
Domi
Merci beaucoup Laurent, tes formules sont toujours impressionnantes et
efficaces :o)

Salutations
Domi

"Laurent M" a écrit dans le message de news:

Salut Domi,

Voilà ma proposition:
tu insères une colonne de calcul juste à droite de tes dates. Tu pourras
masquer cette colonne, elle sert de base de calcul à ma formule
compliquée plus bas. Donc, voici la formule à taper en C18:

=SI(D18<>0;B18;C19)

et tu recopies jusqu'en bas.

Ensuite, la "grosse" formule dans B16:


=SI(ESTNA(RECHERCHEV(C16+jmasq;$C$18:$C$2000;1;FAUX));INDEX($C$18:$C$26;EQUI

V(C16+jmasq;$C$18:$C$2000;1)+1;1);RECHERCHEV(C16+jmasq;$C$18:$C$2000;1;FAUX)
)

avec C16 contenant la date du jour.

Il est possible d'intégrer le calcul de la colonne C dans la formule,
mais j'ai trouvé qu'elle était déjà assez lourde...

A+

Laurent M.



Avatar
Daniel.M
Bonjour Domi,

La matricielle (Ctrl-Maj-Entrée) suivante:

=MIN(SI((B18:B2000>=AUJOURDHUI()+Jmasq)*(C18:C2000<>0);B18:B2000))

Salutations,

Daniel M.

"Domi" wrote in message
news:
Bonsoir à tous,
Je sollicite votre aide pour une formule un peu délicate.
En B18:B2000, j'ai une liste de dates classées par ordre croissant. Tous
les

jours sans les samedi et dimanche.
Dans la colonne C, en regard de chaque date figure une valeur numérique.
Enfin dans une cellule nommée Jmasq figure une valeur numérique.

Je voudrais connaître par formule dans la cellule B16 :
La date de la colonne B18:B2000 = à la date du jour plus la valeur de
Jmasq

et dont la valeur qui figure en C est <> de 0.
Si la date ne figure pas dans la plage (un samedi ou un dimanche ou si la
valeur en C= 0, alors renvoie de la première date rencontrée immédiatement

avec C <>0.

Ex : si nous sommes le 01/07/03 et que Jmasq=5, cela devrait me renvoyer
06/07/03 mais comme c'est un dimanche cela devra me renvoyer le premier
lundi soit 07/07/03.
Si lundi 07/07/03 avait eut 0 en C, alors cela aurait du me renvoyer mardi
si C<> de 0.

J'espère que c'est à peu près clair...

Merci
Domi




Avatar
ru-th
Salut

les 1eres gachettes n'étant pas encore présentes, une tentative par les
2èmes couteaux
=INDIRECT("c"
&EQUIV(VRAI;INDIRECT(ADRESSE(EQUIV(b16+jmasq;B18:B2000;1)+17;3)&":c2000")<>0
;0)+EQUIV(B16+JMASQ;B18:B2000;1)+16)
à valider en matricielle ctrl+maj+entrée

Ps : peux-tu indiquer si cela fonctionne ?
--
a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (vraiment à l'essai)

"Domi" a écrit dans le message de news:

Bonsoir à tous,
Je sollicite votre aide pour une formule un peu délicate.
En B18:B2000, j'ai une liste de dates classées par ordre croissant. Tous
les

jours sans les samedi et dimanche.
Dans la colonne C, en regard de chaque date figure une valeur numérique.
Enfin dans une cellule nommée Jmasq figure une valeur numérique.

Je voudrais connaître par formule dans la cellule B16 :
La date de la colonne B18:B2000 = à la date du jour plus la valeur de
Jmasq

et dont la valeur qui figure en C est <> de 0.
Si la date ne figure pas dans la plage (un samedi ou un dimanche ou si la
valeur en C= 0, alors renvoie de la première date rencontrée immédiatement

avec C <>0.

Ex : si nous sommes le 01/07/03 et que Jmasq=5, cela devrait me renvoyer
06/07/03 mais comme c'est un dimanche cela devra me renvoyer le premier
lundi soit 07/07/03.
Si lundi 07/07/03 avait eut 0 en C, alors cela aurait du me renvoyer mardi
si C<> de 0.

J'espère que c'est à peu près clair...

Merci
Domi




Avatar
ru-th
tellement plus simple !

--
a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (à l'essai)

"Daniel.M" a écrit dans le message de news:

Bonjour Domi,

La matricielle (Ctrl-Maj-Entrée) suivante:

=MIN(SI((B18:B2000>=AUJOURDHUI()+Jmasq)*(C18:C2000<>0);B18:B2000))

Salutations,

Daniel M.

"Domi" wrote in message
news:
Bonsoir à tous,
Je sollicite votre aide pour une formule un peu délicate.
En B18:B2000, j'ai une liste de dates classées par ordre croissant. Tous
les

jours sans les samedi et dimanche.
Dans la colonne C, en regard de chaque date figure une valeur numérique.
Enfin dans une cellule nommée Jmasq figure une valeur numérique.

Je voudrais connaître par formule dans la cellule B16 :
La date de la colonne B18:B2000 = à la date du jour plus la valeur de
Jmasq

et dont la valeur qui figure en C est <> de 0.
Si la date ne figure pas dans la plage (un samedi ou un dimanche ou si
la


valeur en C= 0, alors renvoie de la première date rencontrée
immédiatement



avec C <>0.

Ex : si nous sommes le 01/07/03 et que Jmasq=5, cela devrait me renvoyer
06/07/03 mais comme c'est un dimanche cela devra me renvoyer le premier
lundi soit 07/07/03.
Si lundi 07/07/03 avait eut 0 en C, alors cela aurait du me renvoyer
mardi


si C<> de 0.

J'espère que c'est à peu près clair...

Merci
Domi







Avatar
ru-th
euh en b16 , c'est la date du jour !, mais formule de toutes façons à
oublier
sauf pour moi et mon esprit tordu, indirect, adresse, equiv mélangées, il
est incrompréhensible que j'arrive à m'y repérer ;-))

--
a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (recalé)

"ru-th" a écrit dans le message de news:

Salut

les 1eres gachettes n'étant pas encore présentes, une tentative par les
2èmes couteaux
=INDIRECT("c"

&EQUIV(VRAI;INDIRECT(ADRESSE(EQUIV(b16+jmasq;B18:B2000;1)+17;3)&":c2000")<>0

;0)+EQUIV(B16+JMASQ;B18:B2000;1)+16)
à valider en matricielle ctrl+maj+entrée

Ps : peux-tu indiquer si cela fonctionne ?
--
a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (vraiment à l'essai)

"Domi" a écrit dans le message de news:

Bonsoir à tous,
Je sollicite votre aide pour une formule un peu délicate.
En B18:B2000, j'ai une liste de dates classées par ordre croissant. Tous
les

jours sans les samedi et dimanche.
Dans la colonne C, en regard de chaque date figure une valeur numérique.
Enfin dans une cellule nommée Jmasq figure une valeur numérique.

Je voudrais connaître par formule dans la cellule B16 :
La date de la colonne B18:B2000 = à la date du jour plus la valeur de
Jmasq

et dont la valeur qui figure en C est <> de 0.
Si la date ne figure pas dans la plage (un samedi ou un dimanche ou si
la


valeur en C= 0, alors renvoie de la première date rencontrée
immédiatement



avec C <>0.

Ex : si nous sommes le 01/07/03 et que Jmasq=5, cela devrait me renvoyer
06/07/03 mais comme c'est un dimanche cela devra me renvoyer le premier
lundi soit 07/07/03.
Si lundi 07/07/03 avait eut 0 en C, alors cela aurait du me renvoyer
mardi


si C<> de 0.

J'espère que c'est à peu près clair...

Merci
Domi








Avatar
AV
Salut Laurent,

Me semble qu'il y a qques problèmes :
Avec une série de dates partant du 14/07, si j'affecte la valeur 9 ou 10 à
"Jmasq" j'ai un joyeux #REF! au lieu de lundi 28-juil attendu

AV

"Laurent M" a écrit dans le message news:

Salut Domi,

Voilà ma proposition:
tu insères une colonne de calcul juste à droite de tes dates. Tu pourras
masquer cette colonne, elle sert de base de calcul à ma formule
compliquée plus bas. Donc, voici la formule à taper en C18:

=SI(D18<>0;B18;C19)

et tu recopies jusqu'en bas.

Ensuite, la "grosse" formule dans B16:


=SI(ESTNA(RECHERCHEV(C16+jmasq;$C$18:$C$2000;1;FAUX));INDEX($C$18:$C$26;EQUIV(C1

6+jmasq;$C$18:$C$2000;1)+1;1);RECHERCHEV(C16+jmasq;$C$18:$C$2000;1;FAUX))

avec C16 contenant la date du jour.

Il est possible d'intégrer le calcul de la colonne C dans la formule,
mais j'ai trouvé qu'elle était déjà assez lourde...

A+

Laurent M.



Avatar
Laurent M
Salut AV,

Je n'ai pas testé ta proposition, mais à priori, tu obtiendras toujours
#REF si la date cherchée dans la table des dates, additionnée de l'index
jmasq dépasse la borne supérieure de la table. Si on ne veut pas
alourdir la formule avec un test de dépassement, le plus simple consiste
à ajouter une date bidon à la fin du tableau, genre 31 déc 2050...Il en
va de même pour la borne inférieur (si on cherche une date inférieure à
la première date et que jmasq=0. Il suffit de mettre 1 jan 1900. Et
éventuellement masquer ces lignes.

A+

Laurent

AV wrote:
Salut Laurent,

Me semble qu'il y a qques problèmes :
Avec une série de dates partant du 14/07, si j'affecte la valeur 9 ou 10 à
"Jmasq" j'ai un joyeux #REF! au lieu de lundi 28-juil attendu



Avatar
Laurent M
AV wrote:
Non, non sans dépasser les bornes ;-) et avec la valeur de "jmasq" = 9 ou 10
Avec 8 ou 11 c'est bon !
Fais le test...


Je n'ai pas de problème. Je pense que cela a à voir avec les valeurs que
tu as entrées dans la colonne D. Évidemment, si tu n'en mets aucune, la
fonction cherche la prochaine, et ainsi de suite jusqu'à la fin du
tableau...

Laurent M.

Avatar
AV
Je t'envoie un bout de fichier test

AV
1 2