XL 2016 Test si TextBox rempli par date correcte

Lorenzini

XLDnaute Occasionnel
Bonjour à tous :),

J'ai un formulaire dans lequel j'ai 2 textbox.
Ces 2 TextBox sont censés accueillir des dates au format prédéfini "jour/mois/année" (JJ/MM/AAAA).
Comme je ne suis pas expert, je me suis aidé de bout de codes trouvé par-ci par-là sur le web.
Ainsi p.ex, j'apprécie que lorsque l'utilisateur tape 32 comme jour : impossible d'avancer plus loin avant d'avoir corrigé.
Même logique pour les mois : lorsque l'utilisateur tape 13, impossible d'avancer plus loin avant d'avoir corrigé.
Dans la suite de mes idées, je voulais programmer ceci (çà à l'air peut-être simple mais je vous assure que pour mon niveau, j'en attrape des cheveux blancs !) :
Lorsque le 1er TextBox est complet, qu'il passe au second et lorsque le second est complet, qu'il vérifie si le premier l'était (hisoire de vérifier si l'utilisateur n'a rempli que le deuxième ?) et si c'est le cas (que les 2 textbox sont COMPLET), alors : que le commandbutton1 du formulaire soit sur enabled = true, j'envoie la commande sendkeys ; le formulaire voit sa taille augmetée, les résultats affichés... tout beau tout propre... sauf que galère !
Je voulais bloquer la touche [ENTER] si le textbox n'est pas complètement rempli.
Je n'y parviens tout simplement pas. :s
Autre curiosité que je ne parviens pas à résoudre : lorsqu'on clique sur retour arrière ; çà fonctionne dans le textbox1 et pas le textbox2 !?
Par exemple, je tape (dans le textbox1) : 23/04/202... j'efface, je me suis trompé, je voulais taper : "22/04/2023" --> pas de problème lorsqu'ensuite je valide par la touche [ENTER].
Si je fais strictement la même chose dans le textbox2...p.ex. je tape 23/04/202... j'efface, je me suis trompé, je voulais taper : "22/04/2023" --> lorsqu'à ce stade je valide par la touche [ENTER], rien ne se passe (alors même que les 2 textbox sont complet, valide... !?).
Est-ce que quelqu'un pourrait m'aider ? Je peux reformuler si vous trouvez que je n'ai pas été assez clair.
Je vous remercie pour votre attention.
 

Pièces jointes

  • Imprimerie Economat V4.xlsm
    456.1 KB · Affichages: 4

Dranreb

XLDnaute Barbatruc
J'emploie assez souvent Int(Expression + 0.5) pour arrondir l'expression à l'entier le plus proche.
Ici l'expression c'est Fin + -(Condition) - Début, avec Condition: Int(Fin) = Fin, c'est à dire s'il n'y a pas de partie fractionnaire, donc si aucune heure n'est spécifiée, alors on ajoute un jour notamment pour que la même date de début et de fin compte pour un jour. Alors pourquoi -(Condition): parce que True est représenté par un nombre ayant tous ses bits à 1, ce qui, considéré comme un entier revient à -1. On ajoute un signe moins devant pour que ça vaille 1.
 

Lorenzini

XLDnaute Occasionnel
J'emploie assez souvent Int(Expression + 0.5) pour arrondir l'expression à l'entier le plus proche.
Ici l'expression c'est Fin + -(Condition) - Début, avec Condition: Int(Fin) = Fin, c'est à dire s'il n'y a pas de partie fractionnaire, donc si aucune heure n'est spécifiée, alors on ajoute un jour notamment pour que la même date de début et de fin compte pour un jour. Alors pourquoi -(Condition): parce que True est représenté par un nombre ayant tous ses bits à 1, ce qui, considéré comme un entier revient à -1. On ajoute un signe moins devant pour que ça vaille 1.
ah d'accord, je comprends mieux à présent.
Merci pour ces explications 🙂
J'ai collé dans le fichier joint les ajustements que j'aurais du vous signaler avant...
Merci encore !
 

Pièces jointes

  • CalendHeureLorenziniCORRIGE_V1.xlsm
    711.4 KB · Affichages: 2

Dranreb

XLDnaute Barbatruc
Chez moi les dates s'affichent dans les TextBox avec des "/" pas des "-". Je ne sais pas à quoi ça tient …
Le LabMsg ne s'efface plus parce qu'il était effacé par la Property Set CtrBas, vu quelle restaure la hauteur du UserForm à sa valeur normale qui est le contrôle du bas soit l'ImgAffPlus soit l'ImgAffMoins.

Je vous conseillerais de laisser le dispositif de saisie d'heure même quand on n'en a pas besoin.
Dans cette version j'ai simplement ajouté une propriété AvecHeure As Boolean en écriture seule qui permet ou empêche son utilisation. Pour l'exemple, passé True pour la saisie en cellules et passé False pour l'UFmDémo.

Je me demande pourquoi sur les images l'ImgSem apparait plus petite qu'elle ne devrait, de sorte qu'elle ne couvre pas convenablement les LabSm1 à LabSm6 ? J'espère que ce n'est pas aussi le cas à l'affichage de l'UFmCalend !
 

Pièces jointes

  • SaisieDateHeure.xlsm
    91.1 KB · Affichages: 5
Dernière édition:

Lorenzini

XLDnaute Occasionnel
Chez moi les dates s'affichent dans les TextBox avec des "/" pas des "-". Je ne sais pas à quoi ça tient …
Le LabMsg ne s'efface plus parce qu'il était effacé par la Property Set CtrBas, vu quelle restaure la hauteur du UserForm à sa valeur normale qui est le contrôle du bas soit l'ImgAffPlus soit l'ImgAffMoins.

Je vous conseillerais de laisser le dispositif de saisie d'heure même quand on n'en a pas besoin.
Dans cette version j'ai simplement ajouté une propriété AvecHeure As Boolean en écriture seule qui permet ou empêche son utilisation. Pour l'exemple, passé True pour la saisie en cellules et passé False pour l'UFmDémo.

Je me demande pourquoi sur les images l'ImgSem apparait plus petite qu'elle ne devrait, de sorte qu'elle ne couvre pas convenablement les LabSm1 à LabSm6 ? J'espère que ce n'est pas aussi le cas à l'affichage de l'UFmCalend !
curieux pour les "-" au lieu des "/" ?... j'ai décidément une version ennuyeuse d'Excel...
Est-ce que çà pourrait venir d'une instruction "VBKey"... où serait-ce possible de "forcer" l'affichage des "/" par VBKey ? Je ne m'y connais malheureuseement pas assez.
je vais continuer à chercher pour ce petit désagrément.
Effectivement, avec les CtrBas, j'ai eu qq soucis car du fait que je n'utilisais pas les heures, j'ai du les mettre de côté et du coup, plus de hauteur gérée :(😞
Je peux simplement "masquer" les heures sans pour autant les supprimer mais j'avoue que pour l'utilisation de mon fichier, je n'en aurai tout simplement pas l'usage, même si j'admets volontiers que c'est "sacrilège" de se passer du magnifique travail que vous avez fait au travers des calculs pour les heures et minutes...
Pour ce qui est des images ImgSem qui apparaissent plus petite, je me suis aussi posé la question du pourquoi il y'avait un décalage de votre version à la mienne ?
Je pensais pouvoir faire un copier-coller de votre calendrier et de ses fonctions mais j'ai tout de suite remarqué un "décalage" des images... curieux !? je n'ai pas compris...
Du coup, j'ai du tout reconstruire (couper-coller des modules/codes) autour de votre calendrier !
Merci pour vos efforts !
Cordialement,
 

Dranreb

XLDnaute Barbatruc
Normalement ça devrait s'afficher comme ça :
1683407092748.png
 

Lorenzini

XLDnaute Occasionnel
Non. C'est effectivement une solution. Mais alors retouchez la couleur de fond (ou de police d'ailleurs) du LabSem et des LabSm1 à LabSm6. Ces dernier sont utilisés dans le code.
Bonjour,

Je n'ai qu'une contrainte à l'utilisation du magnifique calendrier que vous m'avez proposé : c'est la saisie de la date au format "##/##/####".
Pour faire simple, nous avons pléthore de dossiers au bureau (accessible par boutons dans différents formulaires) dont la nomenclature est en "##-##-####" ; et du coup, pour éviter tout désagrément de confusion, distraction, ... nous avons créé tout nos formulaires contenant des dates au format "##/##/####" ; car et oui, c'est arrivé ! des employés se sont plantés à cause de cette bêtise de format qui était identique à la base.
Du coup, nous avons rendu (par procédure) obligatoire d'entrer les dates (dans les formulaires, les emails et tout le reste) dans ce format.
D'autant que j'avais espoir qu'en copiant le fichier sur le PC de mon collègue, il m'afficherait comme sur le votre le bon format et ben zut, c'est raté : nous avons vu des "-" au lieu des "/".
Bon, après, nous avons sensiblement les même PC (à part le processeur ; le mien = intel et mon collègue = AMD) sinon, Excel 2016 tous les 2.
J'avoue qu'après les qq jours passés dessus pour tenter de résoudre ce souci (sans succès), je me demande si je dois créer un post qui y serait expressément dédié ou abandonner purement et simplement...?
Pourtant, je le sens, çà doit être possible car, j'ai réussi à lui faire afficher les "/" mais alors, j'obtiens un résultat exotique !?
Je vous ai mis en exemple lorsque je clique sur le 11 du calendrier, il m'affiche 11-04-2023 (image 1).
J'ai bidouillé un truc (image 3) et voilà ce qu'il m'affiche en résultat !? (image 2)
Cela aurait été trop beau !
Je suis perdu... 😢
Pardon pour les désagréments causés, mais étant à court d'idée, auriez-vous une solution ?

Je vous remercie vivement pour toute l'aide que vous pourriez m'apporter. 🙂
 

Pièces jointes

  • Format_TextBox_001.jpg
    Format_TextBox_001.jpg
    24.8 KB · Affichages: 12
  • Format_TextBox_002.jpg
    Format_TextBox_002.jpg
    65.3 KB · Affichages: 12
  • Format_TextBox_003.jpg
    Format_TextBox_003.jpg
    142.1 KB · Affichages: 13

Dranreb

XLDnaute Barbatruc
Vous pouvez essayez dans la Public Sub Coupler :
If OK Then Obj = Format(LaDate, "dd/mm/yyyy") mais il vaudrait mieux trouver pourquoi ce ne sont pas les slash qui sont appliqués par défaut.

Edition. Mais je viens de voir que dans votre dernier classeur joint il y avait bien une utilisation de Format. Serait-ce parce que la propriété à renseignées n'est pas précisée ? Bizarre quand même.
Est-ce que ceci changerait quelque chose ? :
VB:
   If Not OK Then Exit Sub
   If TypeOf Obj Is MSForms.TextBox Then
      Obj.Text = Format(LHeure, "dd/mm/yyyy")
   ElseIf TypeOf Obj Is MSForms.Label Then
      Obj.Caption = Format(LHeure, "dd/mm/yyyy")
      End If
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Si vous faites une simple Sub Test avec MsgBox Format(Date, "dd/mm/yyyy") il vous affiche bien la date du jour avec des shash au moins ? Sinon il faudra MsgBox Replace(Format(Date, "dd/mm/yyyy"), "-", "/")
Avez vous regardé vos paramètres régionaux de windows concernant les séparateurs ?
 

Discussions similaires

Réponses
16
Affichages
728

Membres actuellement en ligne

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki