XL 2019 Remplir plusieurs labels d'un Useform avec les dates d'un calendrier automatique

Clemee61

XLDnaute Junior
Bonjour,
J'ai un fichier Excel dans lequel j'ai crée une fiche d'inscription. Lorsqu'une personne se présente elle donne ses coordonnées que je rempli dans des texteBox et j'ai besoin de mettre une date d'arrivée et de départ. J'ai mis un calendrier automatique qui fonctionne car j'ai repris le travail d'un internaute mais sans le maitriser. J'essai de faire appel à ce même calendrier pour remplir d'autre case (en jaune dans ma fiche). Je ne m'en sors pas.
J'ai essayé de repartir d'autres exemples trouvés sur le forum mais rien y fait. Je suis bloqué depuis une semaine.
Quelqu'un peut-il m'aider ?
Je joins mon fichier avec tout le code (c'est un peu une usine à gaz mais j'ai mis en jaune "pétant" les cases incriminées !)
Cordialement,
Cédric
 

Pièces jointes

  • Inscriptions 2023 H.xlsm
    442.9 KB · Affichages: 31

Clemee61

XLDnaute Junior
Ah mince j'ai posté un nouveau message sans voir ton message suivant... je regarde
Pour situer le contexte :
C'est une fiche d'inscription pour un club de plage qui propose des activités encadrées pour les enfants, de l'apprentissage de la natation et de la location de parasol.
Les enfants peuvent s'inscrire au club (pas forcément sur la même durée ni la même formule même s'ils sont de la même fratrie). Ils peuvent prendre ou non des cours de natation.
Une personne peut louer un parasol sans avoir d'enfant.
Certaines famille reparte puis reviennent à une autre date ultérieur pour un deuxième séjour : d'où la partie grisée intitulée "1er séjour".

Donc par rapport à tes questions :
- Le numéro de client est identique pour les enfants d'une même fiche.
- Ne peut on pas remplacer ces 4 lignes par BoutonRecopierS1_click ?? : Si sûrement mais je ne maitrise pas bien les boucles et DataBodyRange c'est de l'Hébreu pour moi... Désolé
- Les boutons Nouveau et Modifier font effectivement presque la même chose. Les différences constatées sont effectivement des oublis.
- Je ne sais plus pourquoi j'avais mis "inconnue" dans la textbox de date de paiement !
- S'il y a 0 enfant (que de la location de parasol par exemple), j'avais une erreur car j'oblige le remplissage de la date de naissance. Pour palier à ce problème j'avais mis une balise (si il y a 0 enfant, alors on va à la balise et on évite ainsi le message d'erreur).

Voila j'espère ne pas avoir oublier de questions

Merci,

Cédric
 

Clemee61

XLDnaute Junior
utiliser le mouseup pour le calendrier
le mouse up est un events de sortie
dans la version que j'ai donné il ne se répète pas l'affichage ;)mais pour être honnête il faudrait repartir de zero car il y a beaucoup de control qui font la même chose
on pourrait réduire le code de moitié et le rendre plus intelligible pour le lecteur
si vous vous sentez on repart de zero

en post #8 je vous montre aussi comment je restreint les textbox en numérique(date) avec control de validité de date dans l'events keydown dans un select case
bien évidement les keypress disparaissent ils ne sont plus nécessaires

bien que avec le calendar normalement il serait judicieux de supprimer la saisie manuelle
ce qui allègerait encore plus le code
En fait un double clic fait l'affaire :D et non on ne se sent pas de repartir à zéro :eek::eek::eek:
Pas besoin d'entrée manuelle, le calendrier fait parfaitement le job :)
 

vgendron

XLDnaute Barbatruc
Quelques remarques qui me sont venues en cours

en cas de création d'une nouvelle fiche
1) rien n'empeche de remplir les enfants "pas dans l'ordre"
cad: mettre un enfant en 1, puis un autre en 3 mais en laissant le 2 vide
==>Sauf qu'a l'enregistrement, seul le 1 sera sauvegardé (voir mon commentaire sur le "exit sub")
2) il faudrait donc forcer à remplir 1 puis 2 puis 3 puis 4
3) les familles nombreuses ou groupe (plus de 4) ne peuvent donc pas etre prises en compte ?

en cas de modification d'une fiche
pas de gestion du modification du nombre d'enfants
1) si tu supprimes un enfant==> sa ligne ne sera pas supprimée de la table
2) si tu ajoutes un enfant==> ca va mettre un beau b...l dans ton tableau avec écrasement des clients suivants
 

patricktoulon

XLDnaute Barbatruc
attends vgendron
voici le fichier avec tout les controls date classe intra userform
tout les autres event pour date ont été supprimés
ca se resume a ceci pour tout les controls date dans le userform ficheinscription
a oui j'ai fait les togglebutton aussi ;)
VB:
Public WithEvents tbxdate As MSForms.TextBox
Public WithEvents Togle As MSForms.ToggleButton
Public WithEvents Label_Date As MSForms.Label

Dim cl(5) As New FicheInscription
Dim cl2(5) As New FicheInscription
Dim cl3(13) As New FicheInscription


'Gestion des textboxs date  un seul event DBLCLICK pour tout les textbox(ici on appelle le calendar)
Private Sub tbxdate_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    tbxdate = Calendar.ShowX(tbxdate, 2, 0, 1)
End Sub

'Gestion des textboxs date  un seul event pour tout les textbox(ici on bloque toute les touche  et appelle le calendar
Private Sub tbxdate_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    KeyCode = 0: tbxdate = Calendar.ShowX(tbxdate, 2, 0, 1)
End Sub
Private Sub Label_Date_Click()    'date début et fin
    Label_Date.Caption = Calendar.ShowX(Label_Date, 2, 0, 1)
End Sub

' Gestion des bouton crepe  un seul event pour tout les togglebutton
Private Sub Togle_Click()
    Togle.BackColor = IIf(Togle, RGB(0, 255, 0), RGB(255, 216, 177))    'au clic : passe du vert au orange
    If Togle.Name = "ToggleButtonEtoile" Then Togle.ForeColor = IIf(toglr, RGB(255, 131, 0), RGB(0, 0, 0))  'au clic : passe du orange au noir
End Sub

Private Sub UserForm_Activate()
    Dim A&, C&
    For Each ctrl In Me.Controls
        If ctrl.ControlTipText = "date" Then A = A + 1: Set cl(A).tbxdate = ctrl 'classe textbox
        If ctrl.Tag = "togle" Then B = B + 1: Set cl2(B).Togle = ctrl 'classe togglrbutton
        If ctrl.Tag = "date" Then C = C + 1: Set cl3(C).Label_Date = ctrl 'classe labeldate

    Next
End Sub
'---------------------------------------------------------------------------------------------------
c'est beau la vie non ?
imagine tout les events supprimés ;)
maintenant faut faire pareil pour l'autre userform
 

Pièces jointes

  • Inscriptions 2023 H.xlsm
    436.4 KB · Affichages: 3

patricktoulon

XLDnaute Barbatruc
re
c'est parce que il y a des event qui y sont encore c'est tout

oserais-dire que ceci pourrait etre ramener à 3 lignes en taguant intelligemment les controls
et c'est pareil pour toute les autres series du même genre
VB:
    Txt_N°_Client.Value = Cells(no_ligne, 1).Value
    Txt_Nom.Value = Cells(no_ligne, 2).Value
    Txt_Prénom.Value = Cells(no_ligne, 3).Value
    Txt_Age.Value = Cells(no_ligne, 6).Value
    Txt_Nom_Adulte.Value = Cells(no_ligne, 7).Value
    Txt_Tel_1.Value = Cells(no_ligne, 8).Value
    Txt_Tel_2.Value = Cells(no_ligne, 9).Value
    Txt_Mail.Value = Cells(no_ligne, 10).Value
    LabelDatDeb = Cells(no_ligne, 11).Value
    LabelDatFin = Cells(no_ligne, 12).Value
    ComboBox_Formule_Club.Value = Cells(no_ligne, 13).Value
    Txt_Sous_Total_1.Value = Cells(no_ligne, 14).Value
    Txt_Natation.Value = Cells(no_ligne, 15).Value
    Txt_Total_Nat.Value = Cells(no_ligne, 33).Value
    Txt_Sous_Total_2.Value = Cells(no_ligne, 16).Value
    Txt_Parasol.Value = Cells(no_ligne, 17).Value
    Txt_Sous_Total_3.Value = Cells(no_ligne, 18).Value
    Txt_TOTAL.Value = Cells(no_ligne, 19).Value
    Txt_Paiement.Value = Cells(no_ligne, 20).Value
    Txt_Date_Paiement.Value = Cells(no_ligne, 22).Value
    Txt_Doit.Value = Cells(no_ligne, 21).Value
    Txt_Notes.Value = Cells(no_ligne, 31).Value
    Txt_Ruban_Jaune.Value = Cells(no_ligne, 30).Value
    Case_chèque.Value = Cells(no_ligne, 23).Value
    Case_Chèque_vacances.Value = Cells(no_ligne, 24).Value
    Case_Espèce.Value = Cells(no_ligne, 25).Value
    Case_Ch_Vac_Connect.Value = Cells(no_ligne, 26).Value
    Case_Virement.Value = Cells(no_ligne, 27).Value
    Case_Appli_Tel.Value = Cells(no_ligne, 28).Value
    ComboBox_Pre_reservation.Value = Cells(no_ligne, 32).Value
    Txt_Diplomes.Value = Cells(no_ligne, 34).Value
    Txt_Sous_Total_11.Value = Cells(no_ligne, 40).Value
    Txt_Total_Nat1.Value = Cells(no_ligne, 41).Value
    Txt_TOTAL1.Value = Cells(no_ligne, 42).Value
    Txt_PaiementS1.Value = Cells(no_ligne, 43).Value
    Txt_Date_PaiementS1.Value = Cells(no_ligne, 44).Value
    TextBoxDebEnf1.Value = Cells(no_ligne, 36)
    TextBoxFinEnf1.Value = Cells(no_ligne, 37)
    ComboBox_Formule_ClubS11.Value = Cells(no_ligne, 38)
    Txt_NatationEnf1.Value = Cells(no_ligne, 39)
    Txt_Date_PaiementS1.Value = Cells(no_ligne, 44)
    Txt_DOIT_S1.Value = Cells(no_ligne, 45)
    ToggleButtonEtoile.Value = Cells(no_ligne, 46)
    ToggleButtonCrepe1.Value = Cells(no_ligne, 35)
tu sais faire tu t'en charge ;)si on travaille bien on ramène ça a moins de 100 lignes pour tout le userform
et ce sera compréhensible même pour un débutant
 

patricktoulon

XLDnaute Barbatruc
re
l'event doubleclick selon les pc est réglé différemment (plus ou moins rapide)
ce qui fait que selon la durée c'est le doubleclick (et/ou )le mousedown qui est déclenché
ce qui fait que les deux event se déclenchent

c'est pour ça (encore une fois je le redis) j'utilise un event de sortie en occurrence ici le mouseUP
un event de sortie ne peut s’exécuter qu'une fois

les event de sortie
exit
afterupdate
mouseUP
 

patricktoulon

XLDnaute Barbatruc
par exemple sur mon pc actuel W10 il se déclenche deux fois
je viens de tester sur le portable W7 il ne se déclenche qu'une fois
ca n'a rien a voir avec le systeme mais le réglage de la vitesse du doucble click qui est paramétrable sur W7 , 8, 10
et les events classe y sont plus sensibles que les events d'origine
pourquoi:
par ce que les events(de substitution(de classe)) consomme déjà du temps pour recevoir le signal
et ils sont annalyser par le code vba tandis que les events originaux eux sont en callback

ce qui fait que des fois le signal de bouton de souris est percu 2 fois dans un event de classe

voilà maintenant tu sais tout ;)
 

Clemee61

XLDnaute Junior
La fiche de la version Inscriptions 2023 H Ver4 fonctionne plutôt très bien.

Par rapport aux questions dans le code :
- 'Ne peut on pas remplacer ces 4 lignes par BoutonRecopierS1_click ?? ==> ca voudrait dire que les colonnes 11 12 13 15 sont identiques aux colonnes 36 37 38 39 ?
Ce ne sont les mêmes informations. J'avais fait ceci pour qu'en cas de deuxième séjour, je reprenne les infos grâce au bouton "aller à" puis je les copie dans la partie grisée pour mémoire. Du coup j'ai les infos du premier séjour (à droite) et les nouvelles infos du séjour suivant en modifiant ma fiche (je ne suis pas sûr d'être très clair :rolleyes: !)
- ' Eviter la date de naissance pour une modification parasol 'POURQUOI? : j'ai eu pas mal de souci avec les dates de naissance. Il n'y a pas de raison particulière à éviter la date de naissance pour une modification parasol.
- Dans la case date de paiement, elle devrait pouvoir rester vide
- 'Supprimer le contenu de la cellule Age si aucune date de naissance n'est entrée 'POURQUOI?? Quand je remplissait une fiche sans enfant j'avais des problèmes dans la case âge. J'avais résolue le problème en mettant une case vide si aucune date de naissance n'était renseignée.

Patricktoulon pense que
si on travaille bien on ramène ça a moins de 100 lignes pour tout le userform et ce sera compréhensible même pour un débutant... Ben alors ça ça m'étonnerait fortement😜
 

vgendron

XLDnaute Barbatruc
si si, c'est possible
déjà. regarde la PJ version 5:
le code des boutons Modifier et Nouveau

je suis en train de regarder les calculs.. il me semble qu'il en manque et que c'est bien compliqué..
regarde le code, avec mes questions
 

Pièces jointes

  • Inscriptions 2023 H Ver5.xlsm
    319.4 KB · Affichages: 1

Statistiques des forums

Discussions
312 165
Messages
2 085 880
Membres
103 009
dernier inscrit
dede972