XL 2013 le calendrier de Patrick Toulon

JPaul78

XLDnaute Nouveau
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
ton principe de gestion d'erreur est superflu il y a un moyen plus simple de gérer l'erreur 0 de la combo année
on ajoute juste cette ligne dans le change
VB:
Private Sub Cbyear_Change()
     If Val(Cbyear.Value) = 0 Then Cbyear.Value = Year(Date)': Exit Sub
  If sortieEsc Then Calendar.valeur = oldvalue: Me.Hide: Exit Sub
     SpinButton2.Value = Cbyear.Value: Calendar.ReloadClavier
End Sub
là je remet a l'année en cours mais tu peux mettre a ceux que tu veux voir meme faire un exit sub tout court
et le problème est réglé tout simplement
demo3.gif
 

JPaul78

XLDnaute Nouveau
re
ton principe de gestion d'erreur est superflu il y a un moyen plus simple de gérer l'erreur 0 de la combo année
on ajoute juste cette ligne dans le change
VB:
Private Sub Cbyear_Change()
     If Val(Cbyear.Value) = 0 Then Cbyear.Value = Year(Date)': Exit Sub
  If sortieEsc Then Calendar.valeur = oldvalue: Me.Hide: Exit Sub
     SpinButton2.Value = Cbyear.Value: Calendar.ReloadClavier
End Sub
là je remet a l'année en cours mais tu peux mettre a ceux que tu veux voir meme faire un exit sub tout court
et le problème est réglé tout simplement
Regarde la pièce jointe 1133800
re
ton principe de gestion d'erreur est superflu il y a un moyen plus simple de gérer l'erreur 0 de la combo année
on ajoute juste cette ligne dans le change
VB:
Private Sub Cbyear_Change()
     If Val(Cbyear.Value) = 0 Then Cbyear.Value = Year(Date)': Exit Sub
  If sortieEsc Then Calendar.valeur = oldvalue: Me.Hide: Exit Sub
     SpinButton2.Value = Cbyear.Value: Calendar.ReloadClavier
End Sub
là je remet a l'année en cours mais tu peux mettre a ceux que tu veux voir meme faire un exit sub tout court
et le problème est réglé tout simplement
Regarde la pièce jointe 1133800
Oui mais non pour la raison suivante: La personne veux rentrer par ex 1976 et l'année est à 2022. il va faire 4 backspace pour effacer 2022 et le remplacer par 1976. Donc si tu lui remet 2022 ou un exit, alors il n'est pas plus avancé. Ma proposition permet de le faire et si jamais tu fais une sortie à zéro, le calendrier réagit bien. et ne met rien dans la textbox d'appel. C'est bien a ce type de manipulation que je souhaite parvenir sans erreur.
 

patricktoulon

XLDnaute Barbatruc
re
perso un appuie intempestif sur backspace me sort du calendar je Pete un plomb
c'est pas ergonomique du tout
retire moi cette idée de ton post car elle ne suit pas ma stratégie garde la pour toi si tu veux si tu préfère comme ça

une gestion d'erreur pour un change de combo alors qu'il n'y a aucune raisons et qu'il y a tant d'autres façons de gérer ça est impensable pour moi

mais je ne veux en aucun recevoir une demande un jour sur une correction qui n'est pas de mon fait et qui ne respecte pas ma stratégie et ma conception

il est impensable pour moi qu'une touche malencontreusement tapée me sorte d'un applicatif
ça n'est absolument pas productif

j’espère que tu comprends
tu a dit
"Merci de vos avis éclairés"

et bien tu a mon avis et je pense être le mieux placé pour y répondre

aujourd'hui c'est la touche backspace
le precedent c’était la touche esc (bien plus cohérent)

bientôt toute les touches du clavier te sortiront de l'applicatif

non je ne suis vraiment pas d'accords et ca me mine de voir des patchs bidons se balader comme ca

excuse mon franc parler
donc je le redis garde le pour toi si tu préfère comme ca mais ne fait pas de proposition de code dans le post si tu pouvais retirer ces quelques lignes de codes en post 1 ca serait sympa
merci de ta compréhension

sérieux
tu veux quitter tu tape sur backspace 😂😂😂😂ou sur esc
et si on appuie par erreur sur + ou - ou meme 0 ou une lettre etc..etc....
j’espère que tu te rend compte toi meme du ridicule et que ce n'est absolument pas comme cela que l'on développe un applicatif

pour te donner une idée de l'erreur monumentale que tu fait
imagine
tu click sur une cellule (ca ouvre le calendar )
tu sélectionne la combo tu tape par exemple 1988 HO!!! mince c’était 1989 que je voulais taper
je tape backspace pour revenir en arriere de 1 caractères HOh !!!! mince le calendrier c'est fermé
ho!!!!! mince je suis obligé de sélectionner une autre cellule pour revenir a la cellule ou je veux mettre la date pour déclencher l'event

bref ça fait beaucoup de de "Ho!! Mince" pour moi

WRONG WAY !!!!!
;)
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Juste pour un signalement d'incohérence d'ordre d'esthétique.
(j'ai l'œil fragile surtout le gauche ;))
Attendu que dans Excel, le format ddd affiche le nom des jours sur 3 lettres
Attendu que l'usage en pays Franc-Comtois mais aussi ailleurs dans l'Hexagone, veut qu'on "raccourcisse" le nom des jours sur 3 lettres
Pourquoi diable peut-on lire sur les jolies copies d'écran de ce fil : Vend pour Ven ?
Oui que diantre, pourquoi ? ;)
 

JPaul78

XLDnaute Nouveau
re
perso un appuie intempestif sur backspace me sort du calendar je Pete un plomb
c'est pas ergonomique du tout
retire moi cette idée de ton post car elle ne suit pas ma stratégie garde la pour toi si tu veux si tu préfère comme ça

une gestion d'erreur pour un change de combo alors qu'il n'y a aucune raisons et qu'il y a tant d'autres façons de gérer ça est impensable pour moi

mais je ne veux en aucun recevoir une demande un jour sur une correction qui n'est pas de mon fait et qui ne respecte pas ma stratégie et ma conception

il est impensable pour moi qu'une touche malencontreusement tapée me sorte d'un applicatif
ça n'est absolument pas productif

j’espère que tu comprends
tu a dit
"Merci de vos avis éclairés"

et bien tu a mon avis et je pense être le mieux placé pour y répondre

aujourd'hui c'est la touche backspace
le precedent c’était la touche esc (bien plus cohérent)

bientôt toute les touches du clavier te sortiront de l'applicatif

non je ne suis vraiment pas d'accords et ca me mine de voir des patchs bidons se balader comme ca

excuse mon franc parler
donc je le redis garde le pour toi si tu préfère comme ca mais ne fait pas de proposition de code dans le post si tu pouvais retirer ces quelques lignes de codes en post 1 ca serait sympa
merci de ta compréhension

sérieux
tu veux quitter tu tape sur backspace 😂😂😂😂ou sur esc
et si on appuie par erreur sur + ou - ou meme 0 ou une lettre etc..etc....
j’espère que tu te rend compte toi meme du ridicule et que ce n'est absolument pas comme cela que l'on développe un applicatif

pour te donner une idée de l'erreur monumentale que tu fait
imagine
tu click sur une cellule (ca ouvre le calendar )
tu sélectionne la combo tu tape par exemple 1988 HO!!! mince c’était 1989 que je voulais taper
je tape backspace pour revenir en arriere de 1 caractères HOh !!!! mince le calendrier c'est fermé
ho!!!!! mince je suis obligé de sélectionner une autre cellule pour revenir a la cellule ou je veux mettre la date pour déclencher l'event

bref ça fait beaucoup de de "Ho!! Mince" pour moi

WRONG WAY !!!!!
;)
Oh la la! pourquoi tant de haine! je ne voulais pas blesser ton ego mais tout simplement relever des points qui mon humble avis rend ton programme encore plus parfait et qui évite un plantage car que tu le veuille ou pas, le risque est là. je pense qu'il faut que tu prenne un peu de recul dessus. Ma proposition fonctionne très bien et je pense que tu devrais la tester avant de la critiquer car si tu veux ne changer 1988 et 1989, cela fonctionne à merveille (pas de fermeture du calendrier sur une textbox comme tu l'écris) et tout cela se fait très naturellement et sans violence et sans de ho!! mince. au final, c'est l'utilisateur au quotidien qui fait comme il a envie et nom pas comme le programmeur souhaite qu'il bosse. Bref je pense que tu te goures de combat et moi, comme je suis un pacifique, je retire donc ma proposition de mon 1ier post.
Bonne soirée
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour a tous
oui c'est vrai je suis dur
vous le savez bien que pour moi les on error.... sont a utiliser qu'en cas d'extreme nécessité
il n'y a rien de plus moche que de tout faire peter en cas d'erreur

@JPaul78
ce n'est ni de la haine ni quoi que ce soit
c'est que ca respecte pas le conceptuel que je me suis fixé c'est tout
ce genre de patch pour moi serait ne pas tout maîtriser alors qu'il y a des solutions bien plus simple et propres

@Marcel32
En revanche, malgré ta dernière modification chez moi il y a toujours un problème de plantage quand le champ de l'année est vide.
et comment pourrait il donc être vide; par quel sortilège ;puisque justement ca n'est plus possible
avec la ligne en plus il ne peut plus être a zero ni vide

l'erreur se produisait quand on tapait moins que le min de la liste ou zero ou vide et que donc le value du spinbutton ne passait pas forcement

VB:
Private Sub Cbyear_Change()
     If Val(Cbyear.Value) = 0 Then Cbyear.Value = Year(Date) ': Exit Sub
  If sortieEsc Then Calendar.valeur = oldvalue: Me.Hide: Exit Sub
     SpinButton2.Value = Cbyear.Value: Calendar.ReloadClavier
End Sub

j'aurais pu faire aussi (mettre la combo a son min )
Code:
  If Val(Cbyear.Value) = 0 Then Cbyear.listindex=0

bref solution il y a
@Staple1600
oui tu a raison esthétiquement parlant c'est une coquille comme Thur en anglais d'ailleurs

j'aurais pu faire aussi
VB:
Private Sub Cbyear_Change()
'If Val(Cbyear.Value) = 0 Then Cbyear.Value = Year(Date) ': Exit Sub
    If sortieEsc Then Calendar.valeur = oldvalue: Me.Hide: Exit Sub
    If Val(Cbyear) < SpinButton2.Min Then
        MsgBox "veuillez saisir une année valide"
    Else
        SpinButton2.Value = Cbyear.Value: Calendar.ReloadClavier
    End If
End Sub

et si malgré tout après le msgbox l'utilisateur venait a cliquer sur un jour
on l'en averti dans l'event click de substitution des 42 boutons
VB:
'evenement unique pour 42 boutons
Private Sub bout_Click()
    If Cbyear = "" Then MsgBox "l'année n'a pas été selectionnée!!": Exit Sub
    With Calendar: .jour = Bout.Caption: .mois = .Cbmonth.ListIndex + 1: .an = .Cbyear.Value: .Hide: End With    'le unload se fait ailleurs
End Sub

c'est simple et facile a mettre en place
mais on error...bye bye Non!!!c'est inacceptable ( ca me fait dresser les cheveux sur la tête 😅)
;)

les deux versions 4.2.3.1 et 4.2.3.2 avec les gestion précédemment citées ci dessus en pieces jointes
Alors ai je raison ou tord???
 

Pièces jointes

  • 1 new calendar version 2019-2020 V.4.2.3.1.Begique.xlsm
    93.9 KB · Affichages: 12
  • 1 new calendar version 2019-2020 V.4.2.3.2.Begique.xlsm
    107 KB · Affichages: 16
Dernière édition:

JPaul78

XLDnaute Nouveau
re
Bonjour a tous
oui c'est vrai je suis dur
vous le savez bien que pour moi les on error.... sont a utiliser qu'en cas d'extreme nécessité
il n'y a rien de plus moche que de tout faire peter en cas d'erreur

@JPaul78
ce n'est ni de la haine ni quoi que ce soit
c'est que ca respecte pas le conceptuel que je me suis fixé c'est tout
ce genre de patch pour moi serait ne pas tout maîtriser alors qu'il y a des solutions bien plus simple et propres

@Marcel32

et comment pourrait il donc être vide; par quel sortilège ;puisque justement ca n'est plus possible
avec la ligne en plus il ne peut plus être a zero ni vide

l'erreur se produisait quand on tapait moins que le min de la liste ou zero ou vide et que donc le value du spinbutton ne passait pas forcement

VB:
Private Sub Cbyear_Change()
     If Val(Cbyear.Value) = 0 Then Cbyear.Value = Year(Date) ': Exit Sub
  If sortieEsc Then Calendar.valeur = oldvalue: Me.Hide: Exit Sub
     SpinButton2.Value = Cbyear.Value: Calendar.ReloadClavier
End Sub

j'aurais pu faire aussi (mettre la combo a son min )
Code:
  If Val(Cbyear.Value) = 0 Then Cbyear.listindex=0

bref solution il y a
@Dranreb
oui tu a raison esthétiquement parlant c'est une coquille comme Thur en anglais d'ailleurs

j'aurais pu faire aussi
VB:
Private Sub Cbyear_Change()
'If Val(Cbyear.Value) = 0 Then Cbyear.Value = Year(Date) ': Exit Sub
    If sortieEsc Then Calendar.valeur = oldvalue: Me.Hide: Exit Sub
    If Val(Cbyear) < SpinButton2.Min Then
        MsgBox "veuillez saisir une année valide"
    Else
        SpinButton2.Value = Cbyear.Value: Calendar.ReloadClavier
    End If
End Sub

et si malgré tout après le msgbox l'utilisateur venait a cliquer sur un jour
on l'en averti dans l'event click de substitution des 42 boutons
VB:
'evenement unique pour 42 boutons
Private Sub bout_Click()
    If Cbyear = "" Then MsgBox "l'année n'a pas été selectionnée!!": Exit Sub
    With Calendar: .jour = Bout.Caption: .mois = .Cbmonth.ListIndex + 1: .an = .Cbyear.Value: .Hide: End With    'le unload se fait ailleurs
End Sub

c'est simple et facile a mettre en place
mais on error...bye bye Non!!!c'est inacceptable ( ca me fait dresser les cheveux sur la tête 😅)
;)

les deux versions 4.2.3.1 et 4.2.3.2 avec les gestion précédemment citées ci dessus en pieces jointes
Alors ai je raison ou tord???
re
Tu es sans aucun conteste un excellent programmateur mais pas assez à l'écoute d'un utilisateur final lambda. Les solutions que tu proposes ne sont, pour moi, pas du tout pratique pour lui. Je sais que ma solution n'est pas élégante en terme de programmation (c'était le but de mon post était de transformer cette proposition en un truc élégant), mais fait réagir ton calendrier exactement comme je le souhaite (je ne pense pas être le seul dans ce cas). Fait tourner ma solution, regarde comment cela réagi, elle permet de changer partiellement ou totalement l'année sans être emer..... par une msgbox qui t'impose une date que tu ne veux pas. L'utilisation est très simple et ergonomique. C'est tout ce que demande un utilisateur NON informaticien.
En conclusion tu as raison sur la forme (la méthode de programmation) mais a coté de la plaque sur le fond (l'approche et l'écoute d'un utilisateur final). En effet tu t'es braqué sur une méthodologie de programmation mais tu n'as pas regarder comment ergonomiquement ma solution réagissait. Dommage!
Mon idée de départ était d'apporter ma petite expérience d'utilisateur pour une amélioration continue de ce projet sympathique mais pas d'en faire une source de polémique. je vais donc clore cette discussion, utiliser mon patch et dommage pour la communauté.
 

Dranreb

XLDnaute Barbatruc
Je viens de constater que mon calendrier avait le même problème: on ne pouvait faire de BackSpace jusqu'à ce que le champ année demeure vide. Curieusement ça n'empêche pas de taper une autre année car seuls les 4 derniers chiffres à droite sont considérés au fur et à mesure. Mais c'est néanmoins corrigé dans cette version
 

Pièces jointes

  • MonCalendrier.xlsm
    134.6 KB · Affichages: 13

patricktoulon

XLDnaute Barbatruc
re
si tu avais essayé tu verrais que j'impose pas une date sauf vide
et l'on peut taper chiffre après chiffre
les msgbox n’apparaissent que si tu est hors limite basse ou haute
quand au fait que je ne suis pas suffisamment a l'écoute
tout le monde te dira ici que ce calendrier est le résultat de tout les demandes qui m'ont été faite depuis 3 ans la version 4.1 les versions antérieures n’étant plus suivies

et je persiste a dire que une erreur sur l'année qui fait une fermeture pure et simple du calendrier est une sottise
et qu'en plus tu me parle d'ergonomie ;);)😅😅😅
le calendrier est un menu sous forme de petit interface(userform)
un menu c'est un click et un choix (je dirais presque que dans ce cas les touches ne devraient meme pas faire partie de la discussion )


non sincèrement (et sans vouloir t’offenser)
je crois que de nous deux celui qui est a coté de la plaque comme tu dis c'est toi
si pour toi être ergonomique = ta vision de la chose tu est dans l'erreur
@Dranreb comme moi (meme si nous n'avons pas la meme politique en terme de code )
développons avec le soucis de l'adaptabilité pour le plus grand nombre d'utilisateur
c'est ça l'ergonomie pas développer pour une seule personne (ca c'est de la personnalisation) c'est différent
je pense avoir suffisamment d'expérience et de retours pour te dire que tu a tord
et que si tu fait comme ça avec tout tes formulaires ben mon ami tes utilisateurs doivent te maudire😅😂
mais tu verra j'en suis sur tu y reviendra (et je sais pourquoi);)
franchement j'imagine ton utilisateur et fait son truc et le calendrier se ferme lui ne comprends pas pourquoi (pas d'avertissement rien du tout)🤣🤣

et le pire dans tout ca c'est que souvent j'ai des demandes concernant ce genre de modification absurdes alors que ce n'est pas moi qui ai fait les modifs et des exemple j'en ai a foison il suffit de lire la discussion de la source pour s'en apercevoir 😂🤣🤣

tu m'aurais demandé comment pourrais je faire pour faire ceci ou cela parce que ca me convient mieux j'aurais pris la chose différemment (on est là dans la personnalisation) mais que tu propose un truc qui n'est en aucun cas ergonomique qui va certainement être repris et atterrir dans la discussion de la source avec une question inutile là non pas d'accords

pour info avec le calendrier de MS tu verra que tu ne peux taper en dessous 1900 et qu'une erreur te ramène toujours à 1900 et le calendrier ne se ferme pas et qu'il est impossible d'utiliser la touche suppr non plus donc la combo année ne peut jamais être vide
c'est quand meme pas pour rien ;)
demo calendrier MS
demo3.gif
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
et comment pourrait il donc être vide; par quel sortilège ;puisque justement ca n'est plus possible
avec la ligne en plus il ne peut plus être a zero ni vide
Ah bon ? J'arriverai donc à lancer des sortilèges sans le savoir et sans même le vouloir ???

Si toi tu n'as pas pu avoir un champ vide, je pense qu'il faut que tu modifies tes protocoles de test... 😂


Alors ai je raison ou tord??
Ah ben là y a pas photo : t'as tord ! 🤓😅
 

patricktoulon

XLDnaute Barbatruc
re
@Marcel32 on blague on blague mais quand meme

je te dis qu'avec ça il impossible que tu arrive a garder la combo vide

la ligne en rouge est on ne peut plus explicite
si tu y arrive c'est que tu a modifier quelque chose d'autre

Private Sub Cbyear_Change()
If Val(Cbyear.Value) = 0 Then Cbyear.Value = Year(Date) ': Exit Sub
If sortieEsc Then Calendar.valeur = oldvalue: Me.Hide: Exit Sub
SpinButton2.Value = Cbyear.Value: Calendar.ReloadClavier
End Sub

et là y a pas photo non plus ;Vous! avez tord
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou