XL 2016 Date et périodicité [résolu]

mykid

XLDnaute Nouveau
Bonjour à tous,

Je cherche une formule qui me permettrait de tester si une date coïncide à une autre, dont on a défini une périodicité exprimée en jours.
Je m'explique. Imaginons :
en A1 une date de départ (ex : 01/01/2019)
en A2 sa périodicité (en jours) (ex : 3 jours)
en A3 une date à tester.
La formule devrait alors retourner VRAI pour A3 = 04/01/2019, ou 07/01/2019 etc... et FAUX pour toute autre date.

Puis si possible faire la même chose pour une périodicité exprimée en mois. Etant donné qu'un mois a un nombre de jours qui diffère, je pense que la formule devrait différer également ?

Etant donné mon niveau actuel je comptais faire à partir d'une liste de dates calculées en fonction de A1 et A2 et tester cette plage, mais je serais forcément limité dans le temps. Puis le fait aussi que je veux comprendre encore un peu plus le fonctionnement des formules matricielles, je me dis que c'est le bon moment pour vous demander votre aide :)
Je vous remercie infiniment par avance !

Mykael

Edit : pour une périodicité exprimée en mois (ex : tous les mois), si la date de départ est par exemple le 31/01/2019, la date de validité des mois suivants devraient correspondre à la dernière date du mois, à savoir le 28/02/2019 ou le 30/04/2019 par exemple. C'est ce qui me parait le plus logique, qu'en pensez-vous ?
 
Dernière édition:

mykid

XLDnaute Nouveau
bonjour WTF, merci de te pencher sur mon problème. En fait ça n'est pas aussi simple, il faut que la formule retourne VRAI pour TOUTES les dates qui correspondent à la périodicité, c'est à dire que dans mon exemple on aurait vrai pour A1 + 3, A1 + 6, A1 + 9 ..... A1 + 3*n
Une autre idée ?
 

mykid

XLDnaute Nouveau
Non WTF, j'obtiens une erreur #NOM?.
Et vue sur le site de Microsoft :
Remarque : Cette fonctionnalité est uniquement disponible sur Windows ou Mac si vous avez Office 2019, ou si vous avez souscrit un abonnement Office 365. Si vous êtes abonné à Office 365,vérifiez que vous avez la dernière version d’Office.

Cela dit cela m'a donné l'idée de cette formule : (moi qui pensait avoir recours à une formule matricielle ! n'importe quoi ! lol)
=SI(MOD(A3-A1;A2)=0;VRAI;FAUX)
Pour une périodicité exprimée en jours, ça a l'air de fonctionner.
Pour une périodicité mensuelle, selon les conditions énumérées sur mon 1er post, je crois que j'ai encore besoin de votre aide :)
 
Dernière édition:

mykid

XLDnaute Nouveau
J'ai pensé pouvoir me passer de communiquer un fichier, étant donné que je n'ai besoin que de 3 cases : Une pour la date de départ, une pour la périodicité (en mois) et une pour la date à tester. Mon fichier serait exactement comme l'exemple de WTF.

Sinon je suis parvenu à mes fins mais avec une formule usine à gaz, il y a sûrement moyen de faire plus simple, en attendant la voici :
en B1 la date de départ
en B2 la périodicité (en mois)
en B3 la date à tester

en B8 la formule suivante, qui renvoie VRAI si la date à tester entre dans la périodicité, FAUX sinon :

VB:
=SI(DATE(ANNEE(B1);MOIS(MOIS.DECALER(B3;-B2*(MOIS(B3)-MOIS(B1))/B2));JOUR(MOIS.DECALER(B3;-B2*(MOIS(B3)-MOIS(B1))/B2)))=B1;VRAI;SI(ET(FIN.MOIS(B1;0)=B1;FIN.MOIS(B3;0)=B3);SI(FIN.MOIS(DATE(ANNEE(B1);MOIS(MOIS.DECALER(B3;-B2*(MOIS(B3)-MOIS(B1))/B2));JOUR(MOIS.DECALER(B3;-B2*(MOIS(B3)-MOIS(B1))/B2)));0)=B1;VRAI;FAUX);FAUX))

J'ai construit cette formule au fur et à mesure donc ça a été mais si un jour j'ai à la reprendre, ce sera mission impossible !
C'est pourquoi je laisse le fil ouvert, si quelqu'un a plus simple je suis preneur :)

Merci à tous !
 

mykid

XLDnaute Nouveau
merci beaucoup Eric !
Ma formule finalement ne marchait pas dans toutes les situation.
Et non seulement ta formule fonctionne parfaitement, mais en plus elle est on ne peut plus claire !
Serait-ce abuser de ta gentillesse de bien vouloir m'expliquer en quelques mots la logique, derrière cette formule magique ?
Merci infiniment.

Edit : Je pense avoir compris. En fait on décale du nombre d'années de décalage entre les deux dates (en convertissant la différence en mois puisque la formule est MOIS.DECALER()) et on ajoute le décalage en mois entre les deux dates. On compte le nombre de périodicités complètes (par ENT) parcourues, en divisant le tout par B2. On multiplie ce résultat par B2 pour parcourir la périodicité et si on retombe sur nos pieds on arrive logiquement à B3.
Bon mon explication n'est pas très claire mais ça l'est un peu plus dans ma tête :)
Merci encore !
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Je calcule la différence en mois avec :
VB:
(ANNEE(B3)-ANNEE(B1))*12+MOIS(B3)-MOIS(B1)
que j'arrondi à un multiple du pas avec Ent(diffMois/B2)*B2
Le mois.decaler doit me donner la date B3

Bon, je vois que tu avais avancé entre-deux, tu as compris la logique est là.
Par sécurité tu devrais ajouter un arrondi : Arrondi(Ent(diffMois/B2)*B2;0)
Sinon avec 11.99999 mois.decaler utilisera 11 et non 12
eric
 

mykid

XLDnaute Nouveau
Oui j'avais avancé, mais ton explication me permet de m'éclaircir les idées.

Pour clore le sujet, voici donc les 2 formules qui permettent de tester si une date correspond à une autre à laquelle on a fixé une périodicité.
En jours : (marche donc aussi pour des périodicités hebdomadaires avec A2=7)
En A1 la date de départ
en A2 la périodicité en jours
en A3 la date à comparer

Le test en A4 qui renvoie VRAI si la date A3 correspond à A1
VB:
=MOD(A3-A1;A2)=0

En mois : (marche donc aussi pour des périodicités bimensuelles ou trimestrielles, avec A2=2 ou A2=3)
en B1 la date de départ
en B2 la périodicité en mois
en B3 la date à comparer
Le test en B4 qui renvoie VRAI si la date B3 correspond à B1
Code:
=MOIS.DECALER(B1;ARRONDI(ENT(((ANNEE(B3)-ANNEE(B1))*12+MOIS(B3)-MOIS(B1))/B2)*B2;0))=B3

Un grand merci à Eric pour son aide...
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 647
Messages
2 111 533
Membres
111 197
dernier inscrit
john49