XL 2010 Contrôle saisie dates

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Pour contrôler des saisies de dates, j'ai rédigé ceci :
VB:
Function VérifieEntréeDate(cel As Range) As Boolean
'Vérifie si l'entrée est bien une date sous forme "jj/mm/aaaa"

    If IsDate(cel) And cel.Text Like "##/##/####" Then
        VérifieEntréeDate = True
    Else
        VérifieEntréeDate = False
    End If
    
End Function
Ça a l'air de bien marcher. En revanche, si je rentre, par exemple, 12320 (ce qui n'a rien à voir avec 12/3/20), l'erreur n'est pas reconnue et ça me renvoie, bien évidemment, 23/09/1933.
Comment contourner ce problème en faisant en sorte qu'une entrée, comme dans cet exemple, soit reconnue comme une erreur ?
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Merci patricktoulon pour ta tentative.
Je réexplique brièvement mon projet de contrôle d’entrée de date.
Dans une cellule on rentre une date et c’est tout. Soit cette entrée correspond à une date valable (cohérente), soit c’est une ineptie. Si la nouvelle date entrée est valable, sa valeur se substitue bien évidemment à la précédente. En revanche, si la date entrée est incohérente, l’ancienne date reste affichée et ce jusqu’à ce que l’on rentre une date qui ait un sens.

Quelles pourraient être, par exemple, les inepties ?
  • Erktghlkjuirt007 (que du texte ou du texte avec des chiffres)
  • 3/25/21 (que je sache, il n’y a pas 25 mois dans une année)
  • 33/12/21 (que je sache, il ne peut pas y avoir 33 jours dans une mois)
  • 3621 (une série de nombres)
Dans ma tentative pour résoudre ce casse-tête, les 3 premiers exemples sont résolus. En revanche, dans ta tentative, 3/25/21, n’est pas considéré comme faux et renvoie 25/03/2021…

Tu as réglé le 4ème problème, moi de mon côté, uniquement quand j > 12.

Donc, nos solutions demeurent encore bancales. Dommage…
 

Pièces jointes

  • Saisie Date5.xlsm
    23.8 KB · Affichages: 10

Magic_Doctor

XLDnaute Barbatruc
Re,

Uniquement pour le plaisir de résoudre complètement ce problème qui paraît sans solution complète.
Ce qui serait intéressant, c'est de comprendre pourquoi ça plante si j <= 12, quand on rentre un nombre entier.
Dans la PJ c'est clair. Encore faut-il l'ouvrir.
 

patricktoulon

XLDnaute Barbatruc
met toi a la place du du pc excel qui est en anglais(US) a la base et qui a été francisé
tu lui met 2/3/2021 en date us c'est me 3 février 2021 en français c'est le 2 mars 2021
comment veux tu que le pc devine tes intentions
il est conçu pour reconnaître les formats
d/m/yyyy
m/d/yyyy
dd/mm/yyyy
mm/dd/yyyy
et les deux derniers en yy
et mmmm pour les mois en lettre
il fait donc avec ce qu'il a
c'est bien pour ca que les dates en excel ne sont que des représentations graphique du nombre de jour depuis 31/12/1899 et sont gérés mathématiquement
d'ou la méprise de nombreux utilisateurs avec les fonctions date comme datedif qui en est un exemple parfait

j'ajoute aussi que les events internes change enclenche le calculate et donc excel corrige encore une fois avec ce qu'il a
quand tu lui met une année et un des deux segment de la date a plus de 12 là il ne peut plus confondre forcement
 

Magic_Doctor

XLDnaute Barbatruc
Re,

met toi a la place du du pc excel qui est en anglais(US) a la base et qui a été francisé
D'abord je n'ai pas à me mettre à la place du PC ; il est à mon service ! Puisque j'ai payé... "francisé", mais qu'est-ce que ça veut dire ? Regarde ici
Il n'y a qu'aux US qu'ils utilisent mm/jj/aaaa. Dans toute l'Europe (Russie incluse), l'Amérique latine et l'Océanie on utilise le format jj/mm/aaaa. Ça ne compte pas pour du beurre ! Il est vrai qu'ils oublient souvent que la terre est ronde et qu'il n'y a pas qu'eux au monde... On ne parle pas d'une PME mais d'une des boîtes les plus puissantes au monde ; il est étonnant qu'ils n'aient pas encore pu régler (depuis déjà presque 40 ans...) ce problème de compatibilité de dates.
En conséquence, réaliser un contrôle de saisies parfait pour les dates, ce n'est pas encore pour demain la veille...
 

patricktoulon

XLDnaute Barbatruc
bonjour @Magic_Doctor
Ah oui!!! bravo!!!

tu a un plan B j'espere 🤣
demo8.gif


ATTENDS mieux encore
demo8.gif


LOL
change rien hein ;)
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re,

Pour commencer cette solution n'est pas de moi (j'ai cité l'auteur dans sa macro) : bien trop compliquée !
Ensuite, je ne comprends pas ce que tu essaies de démontrer avec ironie. Mais peut-être n'as-tu pas compris ce que je voulais dès le départ, à savoir : quand on rentre un nombre entier (ou, si tu préfères, une série de nombres comme "000000"), celui-ci est refusé et la dernière date valide reste affichée.
C'est bien ce qui se passe dans ta démonstration. Non ?
J'en reste donc au plan A. :cool:
 

patricktoulon

XLDnaute Barbatruc
re non déjà c’était pas cela au départ ta demande mais passons
et en plus regarde plutôt la capture 2
date de départ rien du tout c'est vide alors en erreur il met le jour 0 du commencement des date dans excel
soit le 31/12/1899
mais c’était vide au départ o_O🤔

donc désolé ça fait pas le job ;)
un autre detail car je suppose que c'est pour un formulaire sur feuille
et bien essaie donc de vider la cellule comme on le ferait pour remplir une new fiche par exemple
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re,

Alors, là désolé, mais le problème est fort bien exposé dès le post#1. Mais passons...

La cellule de saisies de dates n'est jamais vide. D'ailleurs, pourquoi le serait-elle ? Il y a toujours une date valide qui est affichée ! Sinon ce serait un bordel évident dans l'application définitive.
On substitue cette date valide par une autre date valide ou pas. Si la nouvelle date est cohérente elle sera acceptée, dans le cas contraire elle sera rejetée et la dernière date valide (autrement dit la précédente) s'imposera à l'affichage. Ma foi, c'est clair !
Effectivement, je n'avais pas pensé à effacer le contenu de la cellule avant d'y entrer une nouvelle date (effacer une donnée avant d'y entrer une nouvelle, c'est pour le moins tordu...). J'ai donc fait des essais.
- J'efface le contenu de la cellule. Si je clique ailleurs, la dernière date (celle que l'on avait effacée) se réaffiche ipso facto.
- J'efface le contenu de la cellule et je rentre immédiatement une nouvelle date (sans avoir cliqué ailleurs). Si celle-ci est bonne elle sera acceptée et s'affichera. Dans le cas contraire, restera affichée la dernière date valide.
Enfin, c'est ce que je peux constater chez moi.

Par contre, explique-moi comment tu as pu effacer les contenus des 3 cellules. C'est machiavélique !

C'est difficile de trouver ou faire un truc parfait en informatique, à moins que ce soit vraiment très élémentaire. En revanche, celui qui a réussi à aller le plus loin dans ce casse-tête de saisie de dates est incontestablement Patrice740.
 
Dernière édition:

Discussions similaires

Réponses
9
Affichages
1 K

Statistiques des forums

Discussions
312 330
Messages
2 087 343
Membres
103 525
dernier inscrit
gbaipc