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

ChTi160

XLDnaute Barbatruc
Bonjour Clemee61
J'espère que tu vas Bien, je suis ce fil, mais je n'ai pas encore compris comment tout cela Fonctionne !
peux-tu pour ta dernière demande mettre un exemple de ce que tu as et ce que tu veux !
exemple
tu dis :
Dans les listes d'appel, les noms et autres renseignements doivent apparaitre sous deux conditions
C'est où cette Case A2 ?
- La date indiquée en haut de la liste (case A2 pur moi)
pour info
With...End With
cette façon de faire permet de ne pas répéter une partie du Code
Exemple le Nom d'une feuille où .Range("A1")

VB:
With WorkSheet("xxxxxx") 'pour ne pas répéter WorkSheet("xxxxxx")
                  .Activate
         With .Range("A1") 'pour ne pas répéter .Range("A1")
                .Interior.ColorIndex=VbRed
                .BorderAround.Linestyle=xlContinuous
         End With
     End With

Bonne Journée
Jean marie
 
Dernière édition:

Clemee61

XLDnaute Junior
Bonjour Jean-Marie

Merci pour les explications du With

Pour le reste :

Sur le fichier joint, lorsque tu vas sur l'onglet Winnies par exemple, il y a un tableau qui correspond à une feuille d'appel.
Cette feuille est générée quand on clique sur le bouton "Feuille d'appel Winnies"
Elle correspond à une liste de noms et autres qui sont sélectionnées dans l'onglet "Inscriptions". De ce que je crois comprendre du code la totalité des noms sont sélectionnés puis on applique des filtres. Un filtre pour l'âge et un pour la date.
C'est là qu'intervient ma fameuse date dans la case A2.
Toujours sur l'onglet Winnies en "A2" il y a une date qui correspond au jour où est effectué l'appel.

Je crois que le code actuel gère l'âge qui correspond à tel ou tel groupe mais pas la date, c'est à dire que tous ceux qui sont inscrits et on l'âge d'être Winnies apparaissent. Il faudrait un filtre supplémentaire qui ne fasse apparaitre que ceux qui sont inscrit à la date sélectionnée (en "A2").

J'espère que c'est un peu plus clair sinon n'hésite pas à redemander des explications.
 

Pièces jointes

  • Inscriptions 2023 H Ver24.xlsm
    323 KB · Affichages: 3

Clemee61

XLDnaute Junior
Ouahou tu as refais tout le code pour les liste !

Sacré boulot aussi.

Je vais mettre du temps à l'étudier mais déjà ça fonctionne.

Perfectible effectivement parce qu'il faut que la liste se remette à zéro pour éviter que les noms s'ajoutent aux précédents mais c'est déjà très bien.

Merci :)
 

Clemee61

XLDnaute Junior
Bonjour,

Je viens vous livrer la version qui sera opérante pour cette saison estivale. :D

Merci à tous ceux qui y ont participé, en premier vgendron mais aussi ChTit160 et patricktoulon. 🙏🙏🙏

J'ai fait des petites modifications visuels, tout nommé correctement même les labels des frames inaccessibles, ajuster l'ordre des tabulations et éviter quelques bugs.

J'ai opté (pour cette année au moins) pour la première version. Elle présente l'inconvénient de ne pas gérer l'ajout ou la suppression de nom d'enfant comme le fait la dernière version de vgendron. En revanche elle permet d'avoir visuellement toutes les infos sur une seule page (affichée sur un tablette Windows pour ma part).

J'ai encore quelques bugs qui subsistent générés par des erreurs d'utilisation.

Je vous les livre :

- Erreur de date saisie inférieur à 10 caractère. Exemple : je saisis la date 19/12/200 au lieu de 19/12/2001. J'ai essayé d'ajouter la ligne suivante au code de vgendron mais cela ne fonctionne pas :
If Len(T) < 10 Then MsgBox T & vbCrLf & "la date entrée n'est pas valide" & vbCrLf & "veuillez recommencer": T = "": ' on vérifie qu'il y a bien 10 caractères

VB:
'Controls de saisie (longueur, caractères...)
'les contraintes dans les évènements pour chaque type de textbox
Private Sub textDate_Change() 'control de saisie de Date au format "dd/mm/yyyy"
    Dim T$
    T = Mid(textDate.Text, 1, 10) 'on limite à 10 caractères
    If Mid(T, 1, 1) > 3 Then T = "" 'si le premier caractère (=dizaine jour) >3 on le supprime
    If Len(T) = 2 And Val(T) > 31 Then T = Mid(T, 1, 1) 'si les deux chifres du jours forment un nombre >31 ==> on supprime le second
    If Len(T) >= 3 And Mid(T, 3, 1) <> "/" Then T = Mid(T, 1, 2) 's'il y a 3 car et que le 3eme est différent du "/" on garde les 2 premiers (= Jour)
    If Len(T) >= 4 And Val(Mid(T, 4, 1)) > 1 Then T = Mid(T, 1, 3) 's'il y a 4 car, et que le 4eme (dizaine mois) >1 on ne garde que les 3 premiers
    If Len(T) >= 5 And Val(Mid(T, 4, 2)) > 12 Then T = Mid(T, 1, 4) 'si le mois >12, on supprime l'unité du mois
    If Len(T) >= 6 And Mid(T, 6, 1) <> "/" Then T = Mid(T, 1, 5) 's'il y a 6 car et que le 6eme est différent du "/" on garde les 5 premiers (= Jour/Mois)
    If Len(T) = 10 And Not IsDate(T) Then MsgBox T & vbCrLf & "la date entrée n'est pas valide" & vbCrLf & "veuillez recommencer": T = "": 'le nombre de caractères est bon, mais on vérifie s'il s'agit d'une date valide
   [COLOR=rgb(226, 80, 65)] If Len(T) < 10 Then MsgBox T & vbCrLf & "la date entrée n'est pas valide" & vbCrLf & "veuillez recommencer": T = "": ' on vérifie qu'il y a bien 10 caractères[/COLOR]
    textDate = T 'on renvoie T
End Sub


- Erreur de saisie d'un nombre de leçon de natation : si j'entre un chiffre dans une Txt_Natation puis que je me ravise et que j'efface tout. Il y a un bug lors de la création de la fiche, au moment du clic sur le bouton nouveau.

- Après j'ai fait un bout de code pour que la case "Doit" se mette à jour dès qu'on clique dessus. Comme dans ce que j'ai fait le code se répète deux fois je suppose qu'on peut mieux faire 🧐

Code:
'********************************************Calcul du "Doit"*************************************
    Me.Txt_Paiement = IIf(Me.Txt_Paiement = "", 0, Me.Txt_Paiement)
    Me.Txt_Doit = Format(CDbl(Me.Txt_TOTAL) - CDbl(Me.Txt_Paiement), "0 €")
    Me.Txt_Doit.Value = Format(Me.Txt_Doit.Value, "0 €") 'Formatage
    Me.Txt_Doit.BackColor = Array(&HEB, &H80FF&)(Abs(CDbl(Txt_Doit) <= 0)) 'coloration rouge si doit la case doit est positive
    
End Sub

'******Calcul du "Doit" suite : mise à jour de la case doit sans passer par le bouton "calculer" mais juste au clic sur la case ******
Private Sub Txt_Doit_Enter()

Me.Txt_Paiement = IIf(Me.Txt_Paiement = "", 0, Me.Txt_Paiement)
    Me.Txt_Doit = Format(CDbl(Me.Txt_TOTAL) - CDbl(Me.Txt_Paiement), "0 €")
    Me.Txt_Doit.Value = Format(Me.Txt_Doit.Value, "0 €") 'Formatage
    Me.Txt_Doit.BackColor = Array(&HEB, &H80FF&)(Abs(CDbl(Txt_Doit) <= 0)) 'coloration rouge si doit la case doit est positive

End Sub

A bientôt j'espère 😌
 

Clemee61

XLDnaute Junior
En voulant anonymer la feuille j'ai fait du faire des bêtises. Il me semblent que sur ce fichier c'est bon. En tout cas sur mon original je n'ai pas ce souci. J'ai notamment changer l'ordre des colonnes dans la l'onglet "Inscriptions" et je ne l'avais pas fait dans celui "saison précédente".
A ce propos j'ai bien compris à cette occasion l'utilité de travailler à partir du nom des colonnes plutôt que leur numéro. J'ai pu ainsi ajouter sans difficulté une colonne "Remise" et comme je le disais déplacer les colonnes sans souci (Merci @vgendron !).
 

Pièces jointes

  • Inscriptions 2023 anonyme.xlsm
    508 KB · Affichages: 7

Clemee61

XLDnaute Junior
If Len(T) < 10 Then MsgBox T & vbCrLf & "la date entrée n'est pas valide" & vbCrLf & "veuillez recommencer": T = "": ' on vérifie qu'il y a bien 10 caractères textDate = T 'on renvoie T
J'ai compris pourquoi cela ne fonctionne pas : la vérification se fait au "change", du coup dès le premier caractère frappé la proposition est fausse. Rien n'est résolu mais c'est déjà top pour moi d'avoir compris ça :p
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 203
Membres
103 157
dernier inscrit
youma