XL 2019 Saisir au format date automatiquement

pat66

XLDnaute Impliqué
Bonsoir le forum,

je cherche désespérément une solution qui me permette de saisir dans la cellule K74, par exemple 12102024
et que automatiquement le format dans la cellule affiche 12/12/2024 sans avoir à saisir les parenthèses ou les tirets

Pensez vous que cela soit possible ? merci

pat66
 
Solution
Version simplifiée:
VB:
Private Const CelluleDate = "K74"

Private Sub Worksheet_Change(ByVal Target As Range)
 
    If Intersect(Target, Me.Range(CelluleDate)) Is Nothing Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub

    'Pour éviter le dépassement de capacité sur un format Date
    Target.NumberFormat = "General"
    If IsDate(Target.Value) Then Exit Sub
 
    If IsNumeric(Target.Value) Then
        Application.EnableEvents = False
        On Error Resume Next
 
        If Target.Value < 1000000 Then
            '152022 -> 01/05/2022
            Target.Value = DateSerial(Target.Value Mod 10000, (Target.Value \ 10000) Mod 10, Target.Value \ 100000)
        ElseIf Target.Value >= 1011900 Then
            '1052022 ->...

Dudu2

XLDnaute Barbatruc
Bonsoir @Eric C,
Tu as raison. Je ne pensais pas qu'un IsDate() pourrait planter.
Mais il plante si le format de la cellule est Date et qu'on y introduit un nombre qui n'est pas une date et génère des ####################.
Ça ne devrait pas arriver car Excel devrait rendre False. Mais de fait... il plante !
Je corrige la version simplifiée.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

[aparté du soir, bonsoir]
Soit une date
qui contient donc au plus deux / (donc deux caractères)
On mobile les doigts pour saisir 913 (oui j'ai compté ;)) caractères dans VBE pour éviter d'en saisir deux dans une cellule.:eek:
Drôle de logique, drôle de gain/bénéfice
;)
[/aparté]
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Il me semble que la saisie est un peu plus sioux. Avec la macro proposée, rien n'empêche de saisir 12132021 ou encore 32142021. Ce sont des saisies qui donnent une vraie date via la macro. Alors que la saisie directe 12/13/2021 ou bien 32/14/2021 ne donnent pas de date mais un texte. Un effacement de la cellule est aussi transformé en date 30/11/1999 par la macro!
Saisir les "/" permet à Excel de faire quelques vérifications basiques que la macro de saisie ignore sans vergogne. Si en plus, on met la cellule en alignement standard, on voit tout de suite si la saisie est alignée à gauche (texte donc date non valide) ou à droite (date "à priori" valide).

Ces quelques remarques parce que je m'étais attaqué à la chose et avait renoncé car le bénéfice ne valait pas la chandelle comme l'a souligné @Staple1600 que je salue ;)
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Pas retrouvé ce que j'avais fait. C'était pour un textbox dans un Userform. Avec mes vieux souvenirs, j'ai refait un essai dans le fichier joint.

La saisie peut se faire de différentes manières. Les dates peuvent être saisies avec ou sans séparateur.

Un séparateur est n'importe quel caractère sauf un chiffre. Les séparateurs peuvent être différents dans une même date. Quelques exemples: 1/5.2020 12/01-22 1/2/33 29/2/2017.

Si la date est saisie sans séparateur, la date doit comporter 6 ou 8 caractères de type: JJMMAA ou bien JJMMAAAA. Si l'année est sur deux chiffres, alors on suppose que c'est une date du 3ème millénaire (2000 à 2099).

Si la date est incorrecte, la couleur de fond de la textbox devient orange.

On évite d'utiliser les fonctions datevalue() et dateserial() qui sont trop permissives en essayant coûte que coûte de trouver une date même si la saisie est erronée. On se "tape" les vérifications à la mano.

Je n'ai pas fait tous les tests. A vous de trouver le grain de sable et pour ça je peux compter sur vous tous 😜.
 

Pièces jointes

  • mapomme- Date dans textbox- v1.xlsm
    25.9 KB · Affichages: 9
Dernière édition:

Eric C

XLDnaute Barbatruc
Bonjour le fil

@mapomme : je disposais déjà dans ma besace d'un de tes codes mais sans les séparateurs, code qui était pleinement satisfaisant (pour ne pas peiner les autres ténors de ce forums, je dispose d'autres codes qui leur appartiennent et qui sont tout aussi fonctionnels). Je n'ai pas trouvé de points faibles (peut être y a t'il des oublis de ma part dans mes essais :cool: ). Seul petit bémol, s'il en est mais ne soyons pas tatillon, la restitution dans la TextBox de la saisie au clavier (La TextBox ne restitue pas les "0" => 01012022 => 1/1/2022), ce n'est qu'un détail car si on transfère la valeur dans une cellule, la date redevient date .
Concernant la "saisie au kilomètre" (question qui revient fréquemment), Dudu2 en a fait une brillante adaptation dans son post #3 (sauf si on saisi "12132022") mais encore une fois l'utilisateur doit se prendre en main.
Bravo les artistes.
Bonne après-midi
@+ Eric c
 

mapomme

XLDnaute Barbatruc
Supporter XLD
la restitution dans la TextBox de la saisie au clavier (La TextBox ne restitue pas les "0" => 01012022
Bonjour @Eric C :),

Tu as tout à fait le droit de tatillonner. 😄
C'est voulu. Je trouve qu'au niveau date c'est plus "parlant' (enfin pour ma pomme).
Et comme une fois que la date est transférée sur une feuille de calcul, c'est le format de la cellule qui fixe l'affichage...
 

Discussions similaires

Réponses
46
Affichages
886
Réponses
2
Affichages
186

Statistiques des forums

Discussions
312 361
Messages
2 087 627
Membres
103 608
dernier inscrit
rawane