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
re

ouais OK si tu veux
quelques autres méthodes d’accès
VB:
Sub test()

MsgBox Range("Tableau1[[#All],[trucmuche]]")(20).Address
MsgBox Range("Tableau1").ListObject.ListColumns("trucmuche").Range.Cells(20).Address
MsgBox Range("Tableau1").ListObject.ListColumns("trucmuche").Range(20).Address

End Sub
et quelques autres encore
;)
Et après ils disent que c'est simple 🤣🤣🤣
Merci 😊
 

patricktoulon

XLDnaute Barbatruc
re
ben oui c'est simple c'est de l'appris par cœur en fait
je rejoins @vgendron sur ce qu'il te disais, tu aura moins de difficulté a travailler avec des tableau structurés (listobject) mais pour bien plus de raisons que des formules auto inscriptible
l’accès est plus simple
il n'y a pas de ligne vides dans un tableau structuré
tu veux ajouter une ligne tu a la méthode Add (suivi de l'index de ligne si tu veux insérer )ou rien si tu veux seulement ajouter a la suite

les methodes fonction listrows ,listcolumns , range ,item, etc sont assez facile a prendre en main
faire la même chose avec un range normal c'est de la torture
quand on démarre autant prendre les bonnes habitudes tout de suite
 

Clemee61

XLDnaute Junior
Je suis allé faire un petit tour pour comprendre les "frame". Si je comprend ton idée c'est de faire apparaitre au départ juste les cases NOM de chaque enfant. Et si on rentre des caractères, le reste des renseignements à remplir apparait ?
J'ai regardé les recherche et fiche sur la saison précédente... bah ça marche :). J'aimais bien le fait d'avoir le fond grisé comme ça il y avait moins de risque d'erreur. Serait-il possible d'ajouter une condition quelque part pour faire une marque (fond gis ou autre) différente entre la fiche de la saison et la fiche de la saison précédente ?
 

Clemee61

XLDnaute Junior
re
ben oui c'est simple c'est de l'appris par cœur en fait
je rejoins @vgendron sur ce qu'il te disais, tu aura moins de difficulté a travailler avec des tableau structurés (listobject) mais pour bien plus de raisons que des formules auto inscriptible
l’accès est plus simple
il n'y a pas de ligne vides dans un tableau structuré
tu veux ajouter une ligne tu a la méthode Add (suivi de l'index de ligne si tu veux insérer )ou rien si tu veux seulement ajouter a la suite

les methodes fonction listrows ,listcolumns , range ,item, etc sont assez facile a prendre en main
faire la même chose avec un range normal c'est de la torture
quand on démarre autant prendre les bonnes habitudes tout de suite
OK
 

vgendron

XLDnaute Barbatruc
Hello
nouvelle PJ

1) si tu lances le formulaire pour "Inscriptions" OU "Saison précédente"
==> la couleur de fond change (juste la couleur extérieure pour te montrer)
==> le texte en haut au gauche change "Inscriptions -->"Saison Précédente"

2) avec les inscriptions
tu selectionnes un client et "Aller a" pour charger les données
==> si 1 enfant ==> 1 seule frame affichée
==> si 2 enfants ==> 2 frames affichées
....
==> on en revient à la question; Comment gères-tu la modification du nombre d'enfants?

3) j'ai remis le bouton "Case_CB" MAIS il est rendu invisible au lancement
==> l'avantage, c'est que si un jour, tu inverstis dans le terminal, tu auras juste à modifier une ligne de code (False ==> True) dans l'initialize du formulaire)
(c'était plus rapide de faire comme ca plutot que d'aller suppimer les lignes de codes associées au traitement de la case_CB)

4) Calcul de Total_parasol (dans la frame Tarifs et paiement)
il s'agit de la multiplication des deux Textbox de la frame Parasol
Total_Parasol = Durée parasol * Tarif
ces deux éléments sont remplis manuellement directement dans le formulaire

5) fonctionnement/utilisation de la frame "Séjour1"
peux tu confirmer ce que j'en ai compris (pas grand chose en fait..;) )
==> lorsque tu créés une nouvelle fiche, il n'y a aucune donnée dans le fichier (pas meme dans la saison précédente)
donc. tout ce que tu remplis, est utilisé pour constituer le "Séjour 1"==> d'ou le bouton "Recopier Données"

ensuite tu fais les calculs et tu factures

Mais si tu fais une fiche pour quelqu'un qui a déjà fait un séjour 1 (comment le sais tu?? tu vérifies que le client a déjà une fiche dans la saison précédente??)
au clic sur "Aller à" si il y a des données de séjour 1, alors la frame " Séjour 1" est remplie avec des totaux déjà calculés normalement

mais ici. si tu fais "Recopier Données".. et bien les données du séjour 1 sont "ecrasées" par les données saises à gauche..

Du coup.. les calculs de totaux (tout à droite): on doit les faire sur quelles données? celles des frames enfant1 2 3 4 ou sur le séjour 1
==> selon que tu cliques ou pas sur "Recopier Données", les résultats ne sont pas forcément les mêmes

et donc au final, les totaux de la frame "Tarifs et Paiement" sont calculés à partir de quoi?

Finalement, je n'ai pas compris à quoi sert la partie 'Séjour 1"
si c'est au cas ou le client est déjà venu en saison précédente, cette frame "Séjour" ne devrait etre remplie QUE par la feuille "Saison précédente"
 

Pièces jointes

  • Inscriptions 2023 H Ver10.xlsm
    332.7 KB · Affichages: 3

patricktoulon

XLDnaute Barbatruc
re
Bonjour @vgendron
Mais si tu fais une fiche pour quelqu'un qui a déjà fait un séjour 1 (comment le sais tu?? tu vérifies que le client a déjà une fiche dans la saison précédente??)
au clic sur "Aller à" si il y a des données de séjour 1, alors la frame " Séjour 1" est remplie avec des totaux déjà calculés normalement

mais ici. si tu fais "Recopier Données".. et bien les données du séjour 1 sont "ecrasées" par les données saises à gauche..

Du coup.. les calculs de totaux (tout à droite): on doit les faire sur quelles données? celles des frames enfant1 2 3 4 ou sur le séjour 1
==> selon que tu cliques ou pas sur "Recopier Données", les résultats ne sont pas forcément les mêmes

et donc au final, les totaux de la frame "Tarifs et Paiement" sont calculés à partir de quoi?

Finalement, je n'ai pas compris à quoi sert la partie 'Séjour 1"
si c'est au cas ou le client est déjà venu en saison précédente, cette frame "Séjour" ne devrait être remplie QUE par la feuille "Saison précédente"
tu vois c'est pour ça que je dis ce genre de projet se pense avant d’écrire la moindre ligne de code
depuis une 20 aines de post et plus même , tu fait ce que l'on appelle des patchs
et c'est sur un projet dont la version 1.0 n'a jamais vu le jour
et je te dis ça c'est vraiment pas pour critiquer (je salut d'ailleurs ta persévérance)mais c'est bien pour vous faire comprendre ce que je dis depuis un moment
a travailler comme ça c'est un fichier dont la mécanique ne sera jamais pérenne c'est sur a 95%

j'ai mis un like de cœur pour ta persévérance
@Clemee61 ne peut que se féliciter d'etre venu faire sa demande ici et au bon moment et d'être tombé sur toi
 

Clemee61

XLDnaute Junior
Bonjour,

Par rapport à tes points :

1) J'ai vu le changement de couleur de fond et de titre de USF. Ce que je n'ai pas trouvé c'est où était l'instruction qui faisait cela.

2) J'ai vu pour l'affichage des frames selon le nombre d'enfant depuis le bouton "Aller à". La modification du nombre d'enfant doit arriver une voire deux fois par saison. Si ça arrive soit je fais une nouvelle fiche. Soit j'inscrivais dans les notes le cas particulier. Evidemment ça n'est pas satisfaisant pour le programme mais comme c'est à la marge je gérais comme cela.

3) Parfait pour la case CB

4) Non non. J'ai dû mal m'exprimer. Le total parasol de la frame Tarifs et paiement doit continuer à être rentré à la main. La durée de la frame parasol est rentrée à la main pour info (ça peut être marqué "2" pour 2 jours comme "3s" pour 3 semaines). Et la case à côté ne sert à rien puisqu'elle est redondante avec le total parasol... Je l'enlèverai.

5) Je vais essayer d'être clair pour expliquer l'utilité de la case recopier séjour 1 :

Un client arrive une deuxième fois dans la même saison.
Par exemple il est venu du 6 au 11 juillet 2023 et a pris une semaine de club pour son enfant et il revient le 15 août 2023 pour reprendre une nouvelle semaine.
Le 15 août nous rappelons sa fiche (bouton "Aller à").
Pour ne pas perdre les données du premier séjour nous cliquons sur "recopier données". Et les données se recopient simplement sur la partie droite de la fiche (frame séjour 1). Quand la fiche est modifiée, les données du premier séjour sont tout de même conservées.
Donc pour cette partie pas besoin de calculs automatiques, c'est juste une copie.
Comme on est super sympa, dans l'exemple donné, on compte le tarif pour 2 semaines enchainées (et pas deux fois une semaine ce qui reviendrait plus cher au client). D'où la nécessité de conserver la case TOTAL à remplir à la main car dans ce cas les calculs automatiques sont faux, idem s'il décide de changer de formule (le matin puis la journée par exemple).

Je te vois venir. oui mais si ils reviennent une troisième fois ? Bah là on les refuse tout simplement 😂

Pour résumer :
+ pas de calcul automatique sur la frame "séjour 1". Juste la possibilité de copier toutes les données concernées en cliquant sur le bouton "recopier données"
+ Cette partie n'est utilisée que peu de fois dans la saison mais quand c'est le cas cela nous rend bien service.

Merci
 

Clemee61

XLDnaute Junior
re
Bonjour @vgendron

tu vois c'est pour ça que je dis ce genre de projet se pense avant d’écrire la moindre ligne de code
depuis une 20 aines de post et plus même , tu fait ce que l'on appelle des patchs
et c'est sur un projet dont la version 1.0 n'a jamais vu le jour
et je te dis ça c'est vraiment pas pour critiquer (je salut d'ailleurs ta persévérance)mais c'est bien pour vous faire comprendre ce que je dis depuis un moment
a travailler comme ça c'est un fichier dont la mécanique ne sera jamais pérenne c'est sur a 95%

j'ai mis un like de cœur pour ta persévérance
@Clemee61 ne peut que se féliciter d'etre venu faire sa demande ici et au bon moment et d'être tombé sur toi
C'est sûrement vrai.
La Textbox "Notes" nous permet cependant de gérer les quelques cas particuliers qui se présentent dans la saison et qui ne sont pas prévus par le programme. C'est sûr que d'un point de vue informatique ça n'est pas satisfaisant. Je suis passé d'un format papier à un format informatique en me disant que ce qu'il y avait sur le papier suffirait. Et j'ai fait mon premier formulaire. J'en étais d'ailleurs super fier.😌
En fait l'informatique ouvrant la voie à plus de possibilités, j'en ai rajouté régulièrement. Je conçois bien que ça n'aurait pas dû être la méthode mais...
Très honnêtement je serais incapable de réaliser ce que vous faites dans un temps raisonnable. vgendron fait un travail remarquable. J'ai les yeux qui pétillent à chaque nouvelle version et je me surprend à attendre avec impatience le post suivant.
Alors à bientôt au prochain post 😃
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello

1) le changement de couleur est effectué dans le "_initialize"
la couleur dépend du nom de la feuille "WsSource"

2) - 3) : OK pas de changement

4) j'ai supprimé la case inutile et supprimé le calcul auto
même si je ne vois pas bien pourquoi tu t'amuses à calculer à la main.. alors que je suppose que la location de parasol se fait selon un tarif à la journée et/ou dégréssif
==> ca pourrait se calculer de la meme manière que le total club en fontion du nombre d'enfant, et de jour

5)pour le séjour1
il s'agit donc juste d'afficher les données du premier séjour (quand il y en a un...)
la frame devrait donc etre disable: pas de modif possible, ni calcul possible
Et cette frame devrait donc etre alimentée par les données de la feuille directement.
le bouton recopier est ambigu... s'il est utilisé pendant un SECOND séjour.. et bien. il écrase le premier séjour...

imaginons
un nouveau client arrive avec 3 enfants
tu créés sa fiche avec le bouton NOUVEAU
1) comme il s'agit d'un nouveau séjour, les données correspondent au 1er séjour
MAIS j'imagine que quand tu cliques sur Nouveau.. les paiements n'ont pas eu lieu.. et donc, les infos de séjour 1 n'intègreront pas les totaux, paiements....
Comment gères tu le paiement?
==> SI tu rappelles la fiche... du coup.. le premier séjour est celui qui est chargé... comment distingues tu un paiement d'un second séjour?? en vérifiant que les dates n'ont pas changé?

2) les calculs des tbx tout à droite (fonction nb jour hors dimanche * tarif)
Ne devraient-ils pas etre faits sur les données (frame 1 2 3 4) plutot que sur séjour 1.?
puisque la remise (fonction nb enfant) est applicable uniquement sur le second séjour..


Le meme client revient (avec le meme nombre ou pas d'enfant)
le séjour 1 doit etre récupéré de la table
la modif du nombre d'enfants, de formules etc etc.. tout est "géré" dans les notes??

les calculs sont faits à la main
en fait. tu n'as aucun calcul auto..?
 

Clemee61

XLDnaute Junior
Bonjour

1) C'est vu :)

2) - 3)

4) Je n'avais pas imaginé avoir autant d'aide. Comme je galérais déjà à faire les calculs automatiques pour le club je n'envisageais pas de les faire ailleurs. Mais évidemment maintenant la donne a changé :D;)
Du coup j'ai ajouté tous les tarifs dans l'onglet "Données_ref". J'ai aussi modifié la frame Parasol qui est devenu "Parasol & siège"). Le Txt_Total_Par de la frame "Tarifs et paiement" devient l'addition de Txt_Parasol et Txt_siège. C'est deux cases étant le résultat d'une recherche de tarif dans les "Données_ref".
P.S. : je n'ai pas changé le nom des Txt déjà existante pour ne pas faire de bêtise et du coup ça manque de cohérence.

5) a ) Je t'avoue que c'est galère à chaque fois qu'un client vient sur des périodes différentes. Effectivement il faudrait éviter les modifications possibles dans la frame "Séjour 1"
Je n'arrive pas à comprendre ton cas de figure avec 3 enfants :
La famille vient un premier séjour, on rempli la fiche, calcule le tarif et les clients payent.
S'ils reviennent une deuxième fois. Alors on ressort leur fiche avec "Aller à". On copie les données dans "séjours 1" pour qu'elles soient enregistrées. Ensuite on rempli la fiche comme si c'était un nouveau client et à la fin on clique sur "Modifier" plutôt que sur "Nouveau".

b) Tu as tout a fait raison. J'ai fait cette partie à droite pour décomposer mon raisonnement et demander de l'aide. Cette partie n'a pas vocation à être visible. ou pourquoi pas mettre dans les frame qui correspond à chaque enfant mais c'est déjà bien serré.

La remise n'est pas applicable que au deuxième séjour. Dès le premier séjour le tarif est dégressif dans la durée et selon le nombre d'enfant (- 5% par enfant). Ce qu'il y a au deuxième séjour c'est qu'on ne repars pas de zéro. Les calculs automatiques ne fonctionneraient pas sauf si je triche sur les dates.
Par exemple :
La famille de trois enfant est venue 1 semaine de club formule "journée" : ils ont payé 278 €
Ils reviennent une semaine. On ne leur refais pas payé 278 €. On leur fait payé 206 € (484 € comme s'ils étaient venus 2 semaines moins 278 € déjà payé au premier séjour).

Par rapport à ta dernière question oui les calculs sont pour l'instant mis à la main suite à lecture d'une grille tarifaire. Mais c'est en passe d'être changé grâce à toi 🙏🙂
 

Pièces jointes

  • Inscriptions 2023 H Ver10.xlsm
    293.2 KB · Affichages: 2

vgendron

XLDnaute Barbatruc
Bon.. voici une version dans laquelle j'ai procédé à quelques modifs....
1) j'ai modifié la syntaxe utilisée pour charger ou enregistrer les controls
j''utilise désormais le nom des colonnes.. beaucoup plus pratique et compréhensible que des numéros de colonnes (1 2 32 ....)

2) j'ai donc pu "rassembler" les colonnes par frame dans la table (comme indiqué dans un précédent post, la syntaxe que j'utilise permet de déplacer les colonnes comme on veut

==> j'ai donc identifié que la colonne "Tot_Nat" est aliméntée par le control "Tarifs"
j'ai donc modifié le nom de la colonne=> ca évite d'avoir du Total_Nat / Tot_Nat..

3) les controls du séjour ont été renommés pour avoir "NomControl_S1"
ca évite du Sous-Total...

sur le fonctionnement en lui meme:
la frame Séjour 1 est disable: tu ne peux rien y faire: elle ne sert que à afficher des données déjà existantes
dans le cas ou tu fais une nouvelle fiche (nouveau client jamais venu), le séjour 1 est rempli seulement quand tu valides la saisie avec le bouton "Nouveau"
dans le cas ou tu fais une Modification (client déja venu), le séjour 1 est rempli avec les données de la table

le bouton "Modifier" n'est disponible QUE après avoir chargé une fiche==> ca évite d'écraser la mauvaise fiche..
donc 1: tu sélectionnes une fiche - 2 tu la charges - 3 tu saisis les modifs - 3 tu valides

pour les calculs: comme je n'ai pas encore tout compris
tout à droite: nb de jours et tarif sont calculés à partir des données des frames enfant
tu as le total SANS remise
et le total Avec remise (quand second séjour)
en attendant mieux, un option bouton permet d'envoyer l'un ou l'autre total dans la case "Total_Club" en bas à droite
et donc. ce Total_Club, j'ai supprimé le code qui le mettait à jour je ne sais pas comment en entrant dedans

pour le Total Nat==> si j'ai bien compris, tu as ajouté une grille tarifaire qui servirait pour le calculer

Pour le Total_Parasol==> si j'ai bien compris tu as ajouté aussi une case "siège"

la case TOTAL devrait etre juste la somme des trois précédentes


à mon avis la case à gauche de Total devrait disparaitre.
case DOIT: juste une différence entre TOtal et Paiement

ces différentes opérations devraient se faire sans avoir besoin d'aller cliquer dedans..sinon.. on a du mal à suivre qui calcule quoi

le toggle button "etoile"... j'ai appelé sa colonne correspondante "Etoile" au lieu de "Doit S2"
si l'idée était d'atirer l'attention sur une facture non réglée. tu as déjà la coloration en rouge de la case "Doit"
 

Pièces jointes

  • Inscriptions 2023 H Ver11.xlsm
    301.7 KB · Affichages: 3
Dernière édition:

Clemee61

XLDnaute Junior
Bonsoir,

1) j'avais bien compris que ça vous démangeais depuis le début cette histoire de nom de colonne 🤨... J'ai vu le changement et si je comprend l'idée, je ne suis pas sûr de tout comprendre. Je vais aller voir de plus prêt. 🤯

2) compris

3) compris pour le fonctionnement par étape

Pour les calculs :
Tout à droite --> Le total SANS remise ne sert à rien. Seul le total AVEC remise doit être conservé et doit apparaitre dans le total du club de la frame "tarifs et paiment" (Txt_Total_Club)

En cas de 2ème séjour ( quelques cas dans la saison) je me débrouille.

Pour le Total_Nat effectivement j'ai ajouté la grille tarifaire

Pour le Total_Par il faut reprendre la version 10 où j'ai modifié l'USF. Effectivement j'ai ajouté les sièges. J'ai donc une frame avec parasol et siège et la frame Total_Par qui fait l'addition de tout ça.
J'ai mis les grilles tarifaires aussi.

La case TOTAL correspond bien du coup à la somme des trois cases précédentes. Mais il faut que je puisse la modifier. C'est pour ça que j'avais fait une case (Text_addition_TOTAL ) qui faisait l'addition et je me laissais la case TOTAL à remplir moi-même.

Case DOIT: juste une différence entre TOTAL et Paiement --> OUI

Le toggle button "etoile" c'est un pense bête pour moi. Dès fois je demande aux gens s'ils peuvent mettre une appréciation sur Google... et donc des étoiles. Pour évter de demander plusieurs fois à la même personne je coche avec le bouton étoile. Ca compense ma piètre mémoire 😉

Bonne soirée 🙂
 

Statistiques des forums

Discussions
311 720
Messages
2 081 904
Membres
101 834
dernier inscrit
Jeremy06510