Contrôler la validité d’une date par rapport à une autre date

Bonjour le forum,

Je voudrais automatiser une opération pour m’avertir qu’une ou plusieurs personnes que je viens de copier dans mon tableau ont une « date de fin » (colonne AS) inférieure à la date de fin de la formation (colonne H) augmenter de la durée d’un lien en année (colonne AV) lorsqu’il en existe un (colonne AU avec « OUI ») mais je n’arrive pas à voir comment je peux m’y prendre. Est-ce que je dois partir sur une formule SI ou est-ce que je dois partir sur une macro dans le « Private Sub Worksheet_Change » qui me mettrait un message lorsque une ou plusieurs dates fin sont mises dans le tableau. Dans les deux cas je n’arrive pas à aboutir à un début de quelque chose.

Hypothèse 1 :

Si je pars sur la fonction SI, j’avais pensé à mettre une condition qui me mettrait un message en colonne AT du style « ATTENTION » ou « LIEN OK ». Cette condition serait par exemple du style : si AS3 pas vide ET AU3 = OUI alors si AS3 - (H3 + AV) < AS3 message « ATTENTION » sinon « LIEN OK ». Le problème dans ce cas c’est quand plus de traduire correctement cette formule c’est que la colonne H est fusionnée par date pour chaque formation. Cette fusion me permet d’avoir une meilleure lisibilité du tableau qui comporte plus de 7000 lignes pour plus de 1000 formations.

Je ne sais pas si j’ai été clair alors dans le fichier test joint j’ai mis manuellement le résultat recherché dans les lignes 4 et 5.

Dans la ligne 4 il apparait « ATTENTION » dans la colonne AT car la colonne AS n’est pas vide et il y a « OUI » dans la colonne AU. Alors le calcul de la date fin de formation en colonne H augmenté de 5 ans de la colonne AV ce qui donne 03/12/2023 (03/12/2018 + 5 ans) est supérieur à la date de la colonne AS (10/01/2020). Donc la date fin est trop tôt.

Dans la ligne 5 il apparait « LIEN OK » dans la colonne AT car la colonne AS n’est pas vide et il y a « OUI » dans la colonne AU. Alors le calcul de la date fin de formation en colonne H augmenté de 5 ans de la colonne AV ce qui donne 03/12/2023 (03/12/2018 + 5 ans) est inférieur à la date de la colonne AS (10/01/2024). Donc la date fin est suffisamment longue.

Hypothèse 2 :

Ajouter des lignes de commande à ma procédure « Private Sub Worksheet_Change » pour obtenir le même résultat.

J’espère être assez clair. Actuellement je fais manuellement l’opération ce qui est dommage. Si cela pourrait être exécuté automatiquement cela me permettrait en plus d’un gain de temps d’éviter les éventuelles erreurs de calcul.

Cordialement.

Bonsoir,

une chose est sur : une donnée par cellule et une cellule par donnée !

Alors oui vous avez beaucoup de ligne, mais pour automatiser certaine chose, surtout des formules il est préférable de n'avoir qu'une donnée par cellule et une cellule par donnée, dans un tableau pas de fusion...

Maintenant Est-ce que un mise en forme conditionnelle de la cellule vous convient ?

Mais on peut rester sur une formule qui affiche le résultat d'un test, y a pas de soucis !

Formule en AT4 après avoir dé fusionner les cellules en colonne H

=SI(AS4<MOIS.DECALER(H4;60);"Attention";"Lien OK")

où le 5 ans est remplacer par 60 mois...

Donc on décale la date de formation de 60 mois afin de tester si ce décalage est inférieur ou pas à la date de fin de formation du personnel, si le décalage n'est pas inférieur alors on affiche "Attention", sinon on affiche "lien OK"

Après il est toujours possible de mettre une MFC sur la cellule en fonction du texte pour afficher les "Attentions" en jaune gras sur fond rouge !

@ bientôt

LouReeD

Salut LouReed,

Merci pour ta rapidité. J'ai défusionné la colonne H et appliqué ta formule. J'ai deux question :

Question 1 : Pourquoi mettre 60 ? Les durées ne sont pas toutes de 5 ans. Certaines sont de 4, 3 voir 2 ans. Comment faire pour ajuster automatiquement la durée dans la formule.

Question 2 : Il faut que la fonction fonctionne que si la date fin (colonne AS) ne soit pas vide et qu''il existe bien un lien pour la formation c'est à dire que "OUI" soit mis dans la colonne AU. Par exemple les cellules AT3 ou en AT7 doivent restées vide car les critères de départ ne sont pas remplis (je ne sais si j'ai été clair).

Enfin je suis preneur pour une MFC comme tu proposes.

Merci encore pour le temps que tu as déjà consacré.

J'ai mis le fichier avec la colonne H défusionné.

Cordialement.

Bonsoir,

il suffit de mettre le nombre d'année que multiplie 12 :

=SI(AS4<MOIS.DECALER(H4;12*AV4);"Attention";"Lien OK")

ensuite pour la double condition :

=SI(ET(AS4<>"";AU4="OUI");SI(AS4<MOIS.DECALER(H4;12*AV4);"Attention";"Lien OK");"Pas de lien")

A la place de "Pas de lien" vous pouvez mettre ""

Pour la MFC il suffit de sélectionner la première cellule de la colonne AT soit AT3

et de mettre en formule conditionnelle :

=ET(AT3="Attention")

en format, vous cliquez sur le bouton format, puis vous "fabriquez" le format voulu.

Ensuite OK, et encore OK, puis dans la zone texte "s'applique à" il suffit de vous mettre en mode de saisie dans la zone de supprimer tout ce qui est inscrit et d'aller sur la feuille pour sélectionner les cellules de la colonne AT de la ligne 3 à la ligne 17 (au vu de votre fichier)

Cliquez sur OK ou Appliquer.

@ bientôt

LouReeD

Salut LouReeD

Ta nouvelle formule fonctionne impec . Merci encore pour cette formule.

Je mets en résolu le sujet.

Juste pour ma culture comment fonctionne la partie "MOIS.DECALER" de la fonction ? Est-ce qu'elle peut s'appliquer à l'année ou au jour ?

Cordialement.

Bonjour,

il n'y a pas de Annee.decaler, et pour les jours ce n'est pas utile car une date décaler de 17 jours est égal à :

ladate+17, vu que les dates sont des entiers dont 1 correspond au premier janvier 1900, et 2 correspond au 2 janvier 1900 etc jusqu'à aujourd'hui où le 09/12/2018 correspond au 43443ième jours depuis le premier de l'an 1900

Donc decaler une date d'un nombre de jour est égal au fait d'additionner ou soustraire un nombre de jours il n'y a pas de fonction pour cela.

L'avantage avec mois.decaler, c'est qu'il n'y a pas à faire attention au nombre de jour que contiennent les mois :

le 29/01/2018 decaler de 1 mois donne le 31/02/2018 car il n'y a pas 29 jours dans février, mais Excel comprend que l'on décale d'un mois (et non pas de 30 jours) donc il donne le jour valide le plus proche du 29 de février, soit le 28.

Si vous aviez fait une "moyenne" de jour par mois et avez fait date + 30 vous seriez tombé sur le 02/03/2018 !

Il n'y a pas d'année car une année = 12 mois, il suffit alors de décaler du nombre de mois correspondant.

=MOIS.DECALER(Date de départ; Décalage)

le décalage peut-être positif ou négatif.

@ bientôt

LouReeD

Au fait, merci pour les remerciements !

@ bientôt

LouReeD

Merci pour ces explications très claires.

Cordialement

Merci pour la clarté, car quand je me relis...

@ bientôt

LouReeD

Rechercher des sujets similaires à "controler validite date rapport"