[RESOLU]Textbox et calendrier autonome

cathodique

XLDnaute Barbatruc
Bonjour,

Avant tout, je remercie très chaleureusement Leakim qui m'a prodigué une gracieuse aide. En effet, je recherchais un calendrier autonome tout simple (ni jours fériés,ni we) juste la date du jour surlignée. J'avais trouvé un fichier de Leakim qui a eu la gentillesse de le modifier.

En l'adaptant, sur mon fichier je suis confronté à une difficulté. Je n'arrive pas à modifier la date dans une textbox via ce calendrier.

Sur mon fichier les textboxs sont nommées T1 à T5, c'est T1 qui reçoit la date. Il y a aussi 2 combos (Cb1 et Cb2) et 2 boutons d'option. Un code et une classe (ne sont pas de moi) vérifient si T1, Cb1,Cb2 et OPt1 ou Opt2 n'existe pas déjà dans BD.

Donc à l'ouverture de l'userform (UserForm_Activate), je récupère la date se trouvant sur la feuille (G2). Mais en sélectionnant une date sur calendrier celle-ci ne se met pas dans la textbox (elle garde la valeur initiale).

J'ai effectué pas mal de manipulation sans succès. Je dois réutilisé ce même calendrier sur d'autres userforms sur le même fichier. Merci de voir dans le code ce qui ne va pas.

En vous remerciant par avance.

Edit: Résolu à ma façon, j'ai remis le fichier corrigé. ça pourrait peu-être intéressé d'autres personnes.
 

Pièces jointes

  • New.xlsm
    335.6 KB · Affichages: 53
  • New.xlsm
    335.6 KB · Affichages: 66
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : [RESOLU]Textbox et calendrier autonome

bonjour,

ton erreur viens d'ici !
Private Sub UserForm_Activate()
'SWL GAW, -16, &H94C00080: 'Inhiber petite croix rouge
If Sheets("PV").Cells(2, 7) <> "" Then Me.T1 = Sheets("PV").Cells(2, 7).Value
End Sub

chaque fois que tu appelles le calendrier et que tu reviens sur ton Userf
UserForm_Activate() réagit et donc écrase la date que tu as sélectionnée !
il faut mettre cette ligne dans Userf Initialize
If Sheets("PV").Cells(2, 7) <> "" Then Me.T1 = Sheets("PV").Cells(2, 7).Value


sinon il te faut mettre une variable déclarée public exp
Public UserfOff as boolean
avant d'appeler ton calendrier tu mets UserfOff = False
au retour tu remets UserfOff = True

Private Sub T1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
UserfOff = False
Calendar.Affiche Me, Me.T1.Name, ActiveControl.Name
UserfOff = True
Cancel = True
End Sub

et dans Private Sub UserForm_Activate() en 1'ligne tu mets
if Userf = False then exit sub


EDIT: tu n'oublies pas de mettre dans Userf Initialize
UserfOff = True !
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : [RESOLU]Textbox et calendrier autonome

Bonjour Roland_M,

Je te remercie beaucoup. En effet, j'ai finalement repéré mon erreur. Comme tu me le signales dans ta réponse.
J'ai enlevé la ligne de code de Private Sub UserForm_Activate() pour la mettre UserForm_Initialize(), ainsi ça fonctionne. Enfin, pour le moment.

J'avais pris tes fichiers qui sont très bien réalisés mais je ne suis pas parvenu à les adapter pour mes besoins. Un calendrier tout simple, pas trop de couleurs, ni jours fériés, ni samedi/dimanche, juste la date du jour surlignée. Tes calendriers m'ont plus parce qu'ils ne font pas appel à des module de classe. Hélàs, je me suis embrouillé et j'ai repris mes recherches jusqu'à ce que je tombe sur un fichier de Leakim. Il a eu la gentillesse de me le refaçonner suivant mes besoins.
sinon il te faut mettre une variable déclarée public exp
Public UserfOff as boolean
avant d'appeler ton calendrier tu mets UserfOff = False
au retour tu mets avant d'appeler ton calendrier tu mets UserfOff = True
et dans Private Sub UserForm_Activate()
if Userf = False then exit sub
ta proposition ci-dessus m’intéresse, pourrais-tu être plus explicite. J'appelle le calendrier en faisant un double-clic sur textbox (T1) de l'userform Saisie_new. je n'ai pas vraiment bien compris comment mettre en œuvre ton idée. Qui j'en suis certain est très bonne, vu tout ce que tu peux accomplir en vba.

En te remerciant beaucoup.
 

cathodique

XLDnaute Barbatruc
Re : [RESOLU]Textbox et calendrier autonome

Oups! On vient de se croiser. Après coup, j'ai suivi les conseils que tu me préconises dans ton message modifié.
Où dois-je déclarer la variable Public UserfOff as boolean. je l'ai fais dans le module de l'userform, j'ai un message "variable non définie" puis s'arrête sur userform_activate et dans le module "verif_doublon_OK" même erreur.

Merci beaucoup pour ton aide.
 

cathodique

XLDnaute Barbatruc
Re : [RESOLU]Textbox et calendrier autonome

Oups! On vient de se croiser. Après coup, j'ai suivi les conseils que tu me préconises dans ton message modifié.

Et ça fonctionne parfaitement bien et ce malgré ma petite erreur orthographique de la variable. je m'en suis aperçu et je l'ai corrigé. Merci beaucoup pour ton aide.
 

Roland_M

XLDnaute Barbatruc
Re : [RESOLU]Textbox et calendrier autonome

re

une déclaration public doit se situer dans un module uniquement afin d'y avoir accès dans tout le classeur !
pas dans le module de l'userf ou autre ...

EDIT: cette variable tu peux la nommer comme tu veux
elle peux servir aussi pour éviter des déclenchement d'événements
exemple si tu as un TextBox_Change et que tu init cette Texbox alors TextBox_Change va réagir
et peut être que ce n'est pas souhaitable !? alors avant de modifier tu fais
UserfOff = False
dans le Sub TexBox_Change en 1'ligne tu mets
if Not UserfOff then exit sub

et bien après ta modif tu remets UserfOff = True
sans oublier de mettre cette var dans userf initialise
et voilà !


mais petit correctif tout de même, je viens de t'expliquer avec la méthode que je t'ai donné tout à l'heure vite fais
mais en principe on utilise une var plus judicieusement et dans l'autre sens si je puis dire, exemple
Public ExitSub as boolean

c'est plus facile et plus fiable de le faire dans ce sens
on mets à true avant appel et false après, ainsi dans les Sub ou Function ...
if ExtSub then Exit Sub (ou Exit Function)
ce qui fais que si tu l'oublies dans l'userf initialise il ne sera pas true !
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : [RESOLU]Textbox et calendrier autonome

Bonsoir Roland_M,

Un grand merci pour tes explications. Je savais bien qu'une variable Public se mettait dans un module standard. Mais n'étant pas très connaisseur en vba, j'ai douté et je l'ai mise dans le module de l'userform. En fait, je l'avais mal écrite et à près pas mal d'essais je m'en suis aperçu.

En effet, j'ai des évènements TexBox_Change, mais pas dans textbox qui reçoit la date. C'est toujours bon à connaitre, plutôt à retenir.

Merci beaucoup, très reconnaissant.

Bonne soirée.
 

Discussions similaires