Microsoft 365 (Résolu) Aide VBA - UserForm - Ajout d'un calendrier et menu indirect

fredd

XLDnaute Occasionnel
Bonjour à tous.
Je suis en train d'essayer de construire un document pour les formations dans mon sevice.
J'ai récupéré une base déjà assez solide pour référencer les formations et les utilisateurs formé.

Mon probleme:
Dans l'onglet Information personnel, j'ai un bouton pour faire une nouvelle saisie.
A cet endroit s'ouvre un popup dans lequel je renseigne des données.

je bloque sur 2 problemes.
  1. j'ai un combobox "Famille" qui renvois sur la donnée famille pas de probleme. Mais la formation devrais etre en fonction de la famille, de la meme manière que la fonction indirect. Toutes les données sont dans l'onglet paramétrage, la fonction indirect fonctionne mais je n'arrive pas à faire en VBA, je voulais mettre en "RowSource, l'indirect de la données de "ComboBoxfamille"
  2. j'ai récupéré un truc sur l'insertion d'un calendrier, j'ai recopier les données à l'identique sur une source et je pense que j'ai du oublier quelques choses mais je ne trouve pas.
Je vous remercie pour votre aide.

Je vous joint le fichier mais j'aimerais essayer de comprendre ce qui coince, pour que je puisses avancer un peu en VBA.
 

Pièces jointes

  • Suivi de formation DRAFT.xlsm
    200.3 KB · Affichages: 31

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Voici une proposition.

Pour la première question, en passant par vba, RowSource doit être valorisé avec le nom de la feuille, avant le nom de la plage ('Paramétrages'!NomDeLaPlage)
Code:
Private Sub ComboBoxfamille_Change()
If ComboBoxfamille.ListIndex > -1 Then ' si une valeur a étée sélectionnée
    ComboBoxformation.RowSource = "'" & ThisWorkbook.Sheets("Paramétrage").Name & "'!" & ComboBoxfamille.Value
    ComboBoxformation.ListIndex = -1 ' définir à Aucun choix
End If
End Sub
Pour le calendrier :

J'ai déplacer l'objet Target dans le formulaire calen)drier pour en faire une propriété Public du userForm
Dans le module 'Contrôle_Calendrier' j'ai modifié ainsi l'appel au userForm calendrier:
Code:
Sub affichage_calendrier(Target As Object)
    ' Initialisation de la cible du calendrier
    Set Calendrier.Target = Target
    Calendrier.Show
    Unload Calendrier
End Sub

Dans le userForm calendrier, méthode 'remplissage_formulaire(date_sel As Date)) j'ai fait en sorte que la propriété Tag de chaque bouton contienne la date du bouton
Code:
contrôle.Locked = True
contrôle.Caption = Day(date_i)
contrôle.Tag = Format(date_i, "dd/mm/yyyy")

J'ai modifié l'évènement Click de la classe cmdButton
VB:
Private Sub bouton_Click()
    If USF.Target Is Nothing Or Not IsDate(Me.Obj_CommandButton.Tag) Then Exit Sub
    USF.Target.Value = CDate(Me.Obj_CommandButton.Tag)
End Sub

Ainsi chaque bouton connaît sa propre date et le calendrier sa cible. Chaque bouton peut alors valoriser la propriété value de la cible.

Cordialement
 

Pièces jointes

  • Suivi de formation DRAFT.xlsm
    197.6 KB · Affichages: 32

fredd

XLDnaute Occasionnel
Bonjour et tout d'abord merci d'avoir pris le temps pour moi. @Roblochon
Alors pour ce qui est du menu indirect, je crois que j'ai compris.
Je ne comprends par encore le code mais ça va venir.

Pour ce qui est du calendrier, la macro plante au moment de l'affichage du calendrier.

Private Sub UserForm_Activate()

'remplissage du formulaire
remplissage_formulaire (Date)
'focus sur sélection mois
SB_mois.SetFocus

End Sub

Il me surligne (Date). Bon comme j'ai copié collé le code, j'imagine qu'il manque ce fameux "date" mais je ne sais à quoi ça doit correspondre.

@patricktoulon je sais que par le passé j'avais pris un autre calendrier genre DtPicker ou quelques choses comme ça. Ca fonctionnais sur ce meme fichier avant que l'on passe en office365+win10. Avant on pouvais ajouter des addons ou des compléments mais c'est verrouillé par le service informatique.
S'il y a quelques choses de plus simple que ce calendrier, je suis preneurs sans hésitation :)
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Cette partie du code n'est pas de moi, mais sur ma bécane avec le fichier que je vous ai passé, tout fonctionne.

Date = date du jour

Quand vous avez une erreur, donnez le message de l'erreur !



Cordialement
 

fredd

XLDnaute Occasionnel
Pardon, j'ai crus avoir mis l'image du code d'erreur.
Des lors ou je clique sur le calendrier
1615043896778.png


Je me retrouve là!

1615043816072.png


Je vais tester avec un autre poste.
 

fredd

XLDnaute Occasionnel
Sinon, j'ai testé le calendrier de patrickToulon, il fonctionne sur mon poste. je pensais tester à l'intégrer à la place car effectivement il est plus complet que celui-çi.
Mais je ne sais pas trop comment démonter le calendrier et réinstaller le suivant sans prendre de risque d'avoir des bugs
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Re,

Contrôlez que dans outils/référence, la bibliothèque : 'Visual basic for application' soit bien cochée. La semaine dernière, un autre demandeur avait le même problème.

Si elle est cochée alors remplacez Date par Vba.Date.

Cordialement
 

fredd

XLDnaute Occasionnel
Ok, effectivement. Sur mon poste c'est coché et sur le poste de travail également mais ça fonctionne.
Par contre en comparant les 2, j'avais un truc qui a disparut qui commancais par Manquant :
Donc c'est bon pour moi.

Dernier point, est ce que l'on peux imaginer, apres avoir sélecionner une date, que le calendrier ce ferme genre Calendrier.Hide mais je ne sais pas ou le placer
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Allez vous allez vous mouiller un peu :

Dans le module de classe cmdButton replacer la procédure bouton_Click() par celle-ci ou ajouter USF.Hide après la ligne USF.Target.Value .....

VB:
Private Sub bouton_Click()
    If USF.Target Is Nothing Or Not IsDate(Me.Obj_CommandButton.Tag) Then Exit Sub
    USF.Target.Value = CDate(Me.Obj_CommandButton.Tag)
    USF.Hide
End Sub

Si vous ne vous sentez pas à l'aise avec vba et que vous ne voulez pas vous plonger dedans, alors apprenez à vous en passer.

cordialement
 

fredd

XLDnaute Occasionnel
mille merci. Roblochon. Effectivement j'ai testé à pas mal d'endroit en pensant ajouter la commande de fermeture du calendrier mais je ne sais pas du tout ce qu'est le module de classe et j'avoir rien compris à ce formulaire.
Je pense que c'est un gros point noir pour moi. Je vais essayer d'en apprendre davantage sur le role de module de classe et les formulaires.
Je bosses sur SAP au boulot est c'est marrant comme les termes semble identique :)
Bref sa fonctionne et je suis refais
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

On se sert souvent (mais pas uniquement ) des modules de classe pour gérer un ensemble de contrôle pour ne pas avoir à écrire une quarantaine de procédure CommandButton1_Click() identiques, dans votre cas les commandbutton du calendrier.

Cordialement
 

fredd

XLDnaute Occasionnel
Merci Patrick. Oui ça semble facile mais comme j'ai construite mon document casi que comme ça, je ne suis pas à l'aise sur le fait d'ajouter et d'empiler des données :)
Je regarde, le résultat, et c'est super chouette effectivement, il y a beaucoup de code et là je suis carément perdu 😄
 

fredd

XLDnaute Occasionnel
Re,

On se sert souvent (mais pas uniquement ) des modules de classe pour gérer un ensemble de contrôle pour ne pas avoir à écrire une quarantaine de procédure CommandButton1_Click() identiques, dans votre cas les commandbutton du calendrier.

Cordialement
Ok, je comprend mieux pourquoi au pas à pas, il fait un tas de controle en boucle, j'imagine autant de fois que de case.
Yes, j'ai fais un pas en avant.
 

fredd

XLDnaute Occasionnel
re
ca m'a pris 30 secondes
j'ai ouvert ton fichier et mon fichier calendar
jai ouvert vbe j'ai fait glisser calendar dans ton projet
et dans ton bouton j'ai mis ...
J'ai un probleme avec la date. Dans le popup, je choisis une date comme aujourd'hui, le 06/03/2021
A l'insertion il me la transforme en date américaine et si je bascule en date longue, je me retrouve avec la mauvaise date. le 06 mars deviens le 03 juin.
1615047090343.png
 

patricktoulon

XLDnaute Barbatruc
c'est parce que tes cellule sont formatées deja
mon calendrier renvoie une date pas le string d'une date donc c'est qu'elles sont formaté ou alors tu a un office pipé

et en plus c'est pas mon calendrier qui envoie la date dans la cellules c'est ailleurs que tu fait ca
le calendrier renvoie la date au textbox dans userform1
 

Discussions similaires

Statistiques des forums

Discussions
314 656
Messages
2 111 612
Membres
111 225
dernier inscrit
arnaud3110