XL 2013 le calendrier de Patrick Toulon

JPaul78

XLDnaute Junior
Bonjour à tous,
Je créer une discussion car je ne sais pas comment envoyer une note à Patrick Toulon, mais peut-être que d'autres auront une idée pour contourner l'obstacle!
J'utilise depuis plusieurs mois le calendrier de Patrick que je trouve super d'utilisation et de mise en place.
Je rencontre néanmoins un petit soucis sur le choix de l'année. Comme le l'utilise en autre à la saisie de date de naissance, mes utilisateurs peuvent être amener à saisir une date de "vieux": 19 et quelques poussières. Pour cela les liste déroulantes ou spinbouton fonctionnent bien mais peuvent être longues. lorsque l'on doubleclic sur l'année et que l'on saisisse l'année voulue cela fonctionne bien. Par contre, lorsque l'on utilise la touche "retour arrière", dès que l'on arrive sur le 1ier chiffre, alors une erreurs "incompatibilité de type" sur "SpinButton2.Value = Cbyear.Value" dans le module "Cbyear_Change". J'ai tenté quelques approches mais avec succès mitigé.
Voici le meilleur traitement que j'ai trouvé, mais il y peut-être une solution plus élégante...
Private Sub Cbyear_Change()
Censuré a la demande de Patrick Toulon

Merci de vos avis éclairés
 
Dernière édition:
Solution
autant pour moi un petit oubli dans la gestion du bouton(1 à 42) click
en fait dans cet event on est dans une instance de classe calendar donc il faut prefixer cbyear par son parent
car avec certaines versions d'excel(je n'ai pas encore trouvé pourquoi) le "Me" ou rien suffit tandis qu'avec d'autre version il faut préfixer (et pas par me)
donc voila un truc tout bête
'evenement unique pour 42 boutons
Private Sub bout_Click()
If Calendar.Cbyear = "" Then MsgBox "l'année n'a pas été selectionnée!!" & vbCrLf & "veuillez saisir une année valide de 1900 à " & Year(Date) + 100: Exit Sub
With Calendar: .jour = Bout.Caption: .mois = .Cbmonth.ListIndex + 1: .an = .Cbyear.Value: .Hide: End With 'le...

patricktoulon

XLDnaute Barbatruc
re
voilà qui devrait calmer les ardeurs des petits nains
et faire plaisir à @JPaul78 et @Marcel32 on peut vider la combo sans plantage
va y maintenant @ALS35 tape tes touches à l'ouverture
comme je le clame haut et fort un bon développeur va chercher a résoudre le problème et non l’inhiber comme fait @JPaul78 en ferment brutalement le calendrier sans avertissement à l'utilisateur
 

Pièces jointes

  • 1 new calendar version 2019-2020 V.4.2.3.Begique.xlsm
    107.3 KB · Affichages: 10

Usine à gaz

XLDnaute Barbatruc
re
voilà qui devrait calmer les ardeurs des petits nains
et faire plaisir à @JPaul78 et @Marcel32 on peut vider la combo sans plantage
va y maintenant @ALS35 tape tes touches à l'ouverture
comme je le clame haut et fort un bon développeur va chercher a résoudre le problème et non l’inhiber comme fait @JPaul78 en ferment brutalement le calendrier sans avertissement à l'utilisateur
NON MAIS ALORS !!! lol
 

ALS35

XLDnaute Impliqué
Re,

@patricktoulon
Bah non, si tu ouvres le calendrier et sans rien faire d'autre qu'un appui sur une touche numérique (de l'ordinateur), ça plante toujours.
Un bon développeur doit savoir qu'un mauvais utilisateur fera nécessairement toutes les bêtises possibles et imaginables.

Cordialement
 

TooFatBoy

XLDnaute Barbatruc
voilà qui devrait calmer les ardeurs des petits nains
et faire plaisir à @JPaul78 et @Marcel32 on peut vider la combo sans plantage
On pouvait déjà le faire avec ta version précédente.

Il y a toujours des plantages, mais c'est vrai que c'est mieux qu'à l'ouverture de ce fil de discussion.
Comme quoi, quand tu veux bien écouter les testeurs qui rencontrent des problèmes, ça donne quelque chose de plus fonctionnel.

Tu as bien bossé. ;)
 

TooFatBoy

XLDnaute Barbatruc
Bah non, si tu ouvres le calendrier et sans rien faire d'autre qu'un appui sur une touche numérique (de l'ordinateur), ça plante toujours.
Chez moi ça ne plante plus (enfin... ça dépend de la touche appuyée). ;)


Un bon développeur doit savoir qu'un mauvais utilisateur fera nécessairement toutes les bêtises possibles et imaginables.
C'est hélas tellement vrai !
 

patricktoulon

XLDnaute Barbatruc
C'est vrai que tu l'as dit plein de fois ici, mais perso je ne comprends toujours pas ce que tu veux dire par là...
bonjour @Marcel32
ben c'est simple @JPaul78 ferme le calendrier brutalement par la gestion d'erreur
moi je considère que ca n'est pas une solution
on ferme pas un interface parce que l'on c'est trompé mais on gère l'erreur

@ALS35 il faudra me dire comment tu fait
le code de l'event parle de lui meme
VB:
Private Sub Cbyear_Change()
    If sortieEsc Then Calendar.valeur = oldvalue: Me.Hide: Exit Sub
    If Cbyear <> "" Then If Not IsNumeric(Cbyear.Value) Then Cbyear = "": Exit Sub
    If Val(Cbyear) < SpinButton2.Min And Cbyear.Value <> "" Then
        MsgBox "veuillez saisir une année valide de 1900 à " & Year(Date) + 100
    Else
        If Cbyear <> "" Then SpinButton2.Value = Cbyear.Value: Calendar.ReloadClavier
    End If
End Sub
alors si toi malgré ça tu arrive a taper autre chose que de 1900 à 2122 il faut m'expliquer comment
il n'y a aucune raison que ca fonctionne différemment chez vous
 

TooFatBoy

XLDnaute Barbatruc
ben c'est simple @JPaul78 ferme le calendrier brutalement par la gestion d'erreur
moi je considère que ca n'est pas une solution
on ferme pas un interface parce que l'on c'est trompé mais on gère l'erreur
Oui, me suis mal exprimé : je t'avais bien compris, mais ce que je ne comprends pas c'est pourquoi tu dis qu'il ferme le calendrier brutalement.
Chez moi il n'y a aucune fermeture du calendrier (ni douce, ni brutale ;)).

Je ne sais pas ce que fait exactement sa modification, mais du point de vu de l'utilisateur il n'y a aucun problème de fermeture non demandée du calendrier.
 

JPaul78

XLDnaute Junior
Tout d'abord merci @patricktoulon pour sa proposition.
Par contre, je dois avoir le mauvais œil car chez moi cela ne fonctionne plus quoique je fasse j'obtiens un message d'erreur me demande de choisir une date entre 1900 et 2122... voir la PJ
 

Pièces jointes

  • Capture d’écran 2022-03-18 180508.jpg
    Capture d’écran 2022-03-18 180508.jpg
    36.2 KB · Affichages: 23

JPaul78

XLDnaute Junior
Oui, me suis mal exprimé : je t'avais bien compris, mais ce que je ne comprends pas c'est pourquoi tu dis qu'il ferme le calendrier brutalement.
Chez moi il n'y a aucune fermeture du calendrier (ni douce, ni brutale ;)).

Je ne sais pas ce que fait exactement sa modification, mais du point de vu de l'utilisateur il n'y a aucun problème de fermeture non demandée du calendrier.
je confirme que cela se fait tout en douceur le calendrier ne se ferme pas sauf si tu clique sur la croix ou sur la touche escape. Mais je reconnais volontiers que ce n'est certainement pas la manière la plus élégante d'où ce post.
 

TooFatBoy

XLDnaute Barbatruc
on ferme pas un interface parce que l'on c'est trompé mais on gère l'erreur
Si l'interface se fermait (ce qui n'est pas le cas chez moi ;)), ce serait toujours mieux qu'un plantage, comme par exemple quand il y a 2022 dans le champ de l'année et qu'on saisie un chiffre supplémentaire.
N'est-ce pas... ;)

Je sais je me répète mais il faut revoir tes protocoles de test camarade, car comme l'a dit un grand sage : "Un bon développeur doit savoir qu'un mauvais utilisateur fera nécessairement toutes les bêtises possibles et imaginables.". 😁
 

patricktoulon

XLDnaute Barbatruc
Si l'interface se fermait (ce qui n'est pas le cas chez moi ;)), ce serait toujours mieux qu'un plantage, comme par exemple quand il y a 2022 dans le champ de l'année et qu'on saisie un chiffre supplémentaire.
N'est-ce pas... ;)

Je sais je me répète mais il faut revoir tes protocoles de test camarade, car comme l'a dit un grand sage : "Un bon développeur doit savoir qu'un mauvais utilisateur fera nécessairement toutes les bêtises possibles et imaginables.". 😁
bon allez
VB:
Private Sub Cbyear_Change()
    If sortieEsc Then Calendar.valeur = oldvalue: Me.Hide: Exit Sub
    If Cbyear <> "" Then If Not IsNumeric(Cbyear.Value) Then Cbyear = "": Exit Sub
    If Val(Cbyear) > SpinButton2.Max Then Cbyear = SpinButton2.Max
    If Val(Cbyear) < SpinButton2.Min And Cbyear.Value <> "" Then
        MsgBox "veuillez saisir une année valide de 1900 à " & Year(Date) + 100
    Else
        If Cbyear <> "" Then SpinButton2.Value = Cbyear.Value: Calendar.ReloadClavier
    End If
End Sub

comme ça tout le monde est content
 

Pièces jointes

  • 1 new calendar version 2019-2020 V.4.2.3.3.Begique.xlsm
    107.5 KB · Affichages: 17

Discussions similaires

Statistiques des forums

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