XL 2019 Macro pour une format date et heure

pelerin65

XLDnaute Occasionnel
bonjour les experts du forum

j'ai un problème.

dans une feuille nommé "demande"
dans la cellule "K18" c est la date du jour de la demande
dans la cellule "I18" c est l'heure du rendez-vous

je voudrais pouvoir taper la date sans les antislashs et en validant mettre le date avec les antislashs
je voudrais pouvoir taper l'heure sans taper les ":" entre les chiffres;

je vous remercie de votre aide
 

pelerin65

XLDnaute Occasionnel
Bonjour le forum
Bonjour pelerin65

Format personnalisé :

VB:
Pour les dates
## "/" ## "/" ####
Pour les heures
##":"##

Bonne fin de journée à toutes & à tous
@+ Eric c
bonjour Eric,, c'est une macro VBA que j'aimerais avoir ex: je tape 121222 en validant ca mets 12/12/22 et idem pour l'heure.
pas été assez clair dans ma demande
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonsoir le Fil ,
Juste pour participer !
Une première approche (Simple) vba
VB:
Private Sub TextBox1_Change()
  Select Case Len(TextBox1.Text)
    Case 2, 5
      TextBox1.Text = TextBox1.Text & "/"
    Case 10
      If Not (IsDate(TextBox1.Value)) Then
        MsgBox "Entrée la date sous la forme jj/mm/aaaa": TextBox1.Value = ""
      End If
  End Select
End Sub
il y a plein de procédure pour justement formater la saisie de Dates
Bonne fin de Soirée
Jean marie
 

pelerin65

XLDnaute Occasionnel
Bonsoir le Fil ,
Juste pour participer !
Une première approche (Simple) vba
VB:
Private Sub TextBox1_Change()
  Select Case Len(TextBox1.Text)
    Case 2, 5
      TextBox1.Text = TextBox1.Text & "/"
    Case 10
      If Not (IsDate(TextBox1.Value)) Then
        MsgBox "Entrée la date sous la forme jj/mm/aaaa": TextBox1.Value = ""
      End If
  End Select
End Sub
il y a plein de procédure pour justement formater la saisie de Dates
Bonne fin de Soirée
Jean marie
Bonsoir,
encore sur ton code j ai fait plein d'essai je vois pas ou je dois le mettre ton code
je dois idiot parfois je comprends et parfois je suis idiot
désolé de t embêter merci
 

ChTi160

XLDnaute Barbatruc
Bonjour ,
Tu aurais du joindre ton fichier !
Je m'aperçois ce matin que j'ai du me tromper dans l'interprétation.
C'est sur une feuille du classeur (demande) que tu voudrais .
pouvoir taper la date sans les antislashs
Tu as aussi, pour faciliter et forcer la saisie d'une date dans une cellule ,sur le forum des calendriers divers .
Bonne nne journée
Jean marie
 

patricktoulon

XLDnaute Barbatruc
Bonsoir le Fil ,
Juste pour participer !
Une première approche (Simple) vba
VB:
Private Sub TextBox1_Change()
  Select Case Len(TextBox1.Text)
    Case 2, 5
      TextBox1.Text = TextBox1.Text & "/"
    Case 10
      If Not (IsDate(TextBox1.Value)) Then
        MsgBox "Entrée la date sous la forme jj/mm/aaaa": TextBox1.Value = ""
      End If
  End Select
End Sub
il y a plein de procédure pour justement formater la saisie de Dates
Bonne fin de Soirée
Jean marie
Bonjour @ChTi160
de toute façon la (methode (len 2 ou 5)à elle seule) n'est pas bonne car elle bloque l'utilisateur a 1seule possibilité en cas d'erreur de touche c'est de tout supprimer pour recommencer
imagine tu tape
0 puis 1 et hop!! le slach automatique
puis
1 puis 3 et hop!! le slach automatique

Ah!! mince il n'y a pas de 13 eme mois dans l'année

allez on reviens en arrière
a ben mince on peut pas
puis que j'ai dans mon textbox 01/13/
ce qui nous fait 6 caracteres et si je reviens en arriere ben il va me remettre le slach tout simplement puisque je retombe a 5 caractères
et je suis coincé ici oblige de sélectionner les deux derniers caractères avec la souris ou tout effacer pour recommencer

petite piqure de rappel
 

pelerin65

XLDnaute Occasionnel
Bonjour les experts
Je viens de mettre le fichier,
et il m est difficile de vous solliciter mais hélas j'ai jamais eu de formation Excel
Je sais seulement qui faut savoir demander parfois de l'aide
mais j'essaies de comprends les réponses afin de compléter mes connaissances
Merci de votre aide à tous
 

Pièces jointes

  • TAXI6.xlsb
    278.3 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
re
Bonjour @pelerin65
dans une cellule tu ne peut pas faire ce que tu veux sans faire une usine a gaz pour gérer tout les possibilités
je parle même pas des gestion enablevents a GOGO qu'il faudrait engager
la solution la plus simple est de passer par une/des colonnes supplémentaire avec des formule simples
sinon c'est le passage par un imputbox(donc vba) ou un userform avec textbox pour saisir et envoyer dans la cellule

pour @ChTi160 pour les autres aussi
si je devais me contenter de controler uniquement des separateurs automatiques dans un textbox
le control du len(2 et 5) ne suffit pas
d'ailleurs l'event change n'est pas approprié non plus

dans l' exemple qui suit
je me contente juste des séparateur automatique avec la possibilité de revenir en arrière avec la touche back(retour en arrière )
mais c'est loin d'etre suffisant pour en faire un date box digne de ce nom
VB:
'Exemple 1
'
'ATTENTION !!!!!! CET EXEMPLE  NE CONTROLE PAS LA VALIDITE DE LA DATE SAISIE!!!!
'ici c'est juste pour montrer l'assistance a la saisie lineaire(à la suite)
'ATTENTION AUSSI!!! il n'y a pas de controle de << Sur-saisie >>
'on utilise l'event keydown pour pouvoir maitriser les autres touches dans le meme events
'!!!il nous faut donc convertir le << KEYCODE EN KEYASCII >> que normalement donne << l'event keypress >>!!!

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim V$, K&
    With TextBox1
        V = .Value    'on prend la valeur actuelle du textbox

        'et selon le keycode de la touche
        Select Case KeyCode

            '(pour les pcs portables sans pavé numerique)on peut utiliser les chiffres du haut du clavier ou le pavé numerique
        Case 96 To 105, 48 To 57    'les touches du pavé et du haut du clavier

            K = KeyCode    'on mémorise le keycode dans la variable k

            KeyCode = 0    'et on annule aussitôt la touche

            If K >= 96 Then K = K - 48:    'on ramène le code asc pour les touche du pavé

            'control slachs (before  avant )

            If Len(V) = 2 Or Len(V) = 5 Then V = V & "/"    'Contrôle avant ajout du chiffre

            V = V & Chr(K)    'on peut maintenant ajouter le caractère tapé

            'control slachs (after après )
            If Len(V) = 2 Or Len(V) = 5 Then V = V & "/"    'Contrôle  après ajout du chiffre

            ' si vous vous demandez pourquoi je fait ces deux controls  avant et apres ajout du chiffre
            ' j'aurais tres bien pu me contenter de faire le 1er controle << avant  >>
            ' c'est purrement de l'ergonomie visuelle et gerer l'erreur du len(2) ou len(5)en resaisie apres etre revenu en arriere
            ' quand je tape  si j'ai 2 ou 5 caracteres il met le slash avant de mettre le chiffre tapé
            ' visuellement c'est pas tres confortable

            ' imaginez si je ne met  que le control After
            ' et que si je tape << 01/02 >> j'aurais donc pareil << 01/02/ >>
            ' et que je revient en arriere par ce que je veut changer le mois
            ' et que je n'efface que le slachs par erreur et que je tape mon nouveau chiffre  << 3 >> par exemple
            ' et bien  comme on est en len(4) le controls ne voit pas l'erreur et je me retrouve avec << 01/023 >>

            ' j'ai donc le confort visuel de voir les slach des que je tape 2 ou 5 aractere
            ' et je n'ai pas la l'abscence du callback du slach  en re saisie

        Case 8:
            ' la touche (retour en arriere)
            ' ca c'est marrant
            ' on met le case de cette touche MAIS!!! on y fait rien
            ' mais  ça sert a rien alors ??!!???
            ' et si ça sert
            ' si je ne met pas ce case 8 la touche va passer dans le case else et donc etre annulée

        Case Else: KeyCode = 0    'toutes les autres touches sont automatiquement annulées

        End Select

        ' et on fini par mettre la variable v dans le .Value du textbox
        ' en la bloquant  à 10 caractères Max
        .Value = Mid(V, 1, 10)

        ' terminé le  controle de saisie avec separateur est opérant
    End With



End Sub
 

pelerin65

XLDnaute Occasionnel
Re
Patricktoulon,
Merci de ta réponse rapide,
Je vais rester sur le principe de base taper les "/".
Maintenant, je vais me concentrer sur mon classeur afin qu'il y est des bugs lors de l'enregistrement du deuxième classeur. et trouver la solution aussi de pouvoir supprimer les feuilles crées dans le premier classeur quand l'enregistrement se crée.
une quinzaine de personnes devront ce servir de ce classeur.
C'est un challenge pour moi
Il me reste encore du travail
J'essaie d adapter cette idée de liste réduite (voir fichier) sur ma feuille demande.
J'essaie avec la fonction indirect.
J'aimerai tant avoir la connaissances d'Excel,
Je tâtonne à chaque fois avec des heures de recherches pour comprendre aussi la construction du vba
 

Pièces jointes

  • Liste réduite(1).xlsx
    26.5 KB · Affichages: 1
  • TAXI6.xlsm
    285.2 KB · Affichages: 0

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 294
Membres
103 171
dernier inscrit
clemm