Rapport de message :*
 

Re: Adapter le mDF_Calendar

Titre du sujet : Re: Adapter le mDF_Calendar
par myDearFriend! le 14/05/2008 22:35:04

Bonsoir Hadidman, le Forum,

Citation :

Hadidman a écrit:
Je viens de réessayer et ça fonctionne )
J'ai du supprimer une ligne en fait et c'est pour cela que ça ne marchait pas

Humm... j'avais bien compris ça oui... tu me rassures lol !

Citation :

Hadidman a écrit:
Le problème, c'est que lorsque je passe ma souris sur ce calendrier, la surbrillance disparait automatiquement, et donc lorsqu'à partir du calendrier, je clique sur un chiffre (il est en surbrillance) mais je bouge la souris d'un millimètre et la surbrillance disparait
En fait, je pense qu'il faudrait désactiver la surbrillance au passage de la souris (je vais chercher un petit peu dans votre code, pour voir comment désactiver cela )

Eh bien, finalement, tu ne veux plus garder grand chose de ce calendrier... :mind:

Désactiver la surbrillance au passage de la souris, c'est facile, il te suffit de commenter ou supprimer la procédure ci-dessous dans le module de classe mDFcalClass :
'Private Sub lblJGroup_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'    
TranspJour
'    lblJGroup.BackStyle = fmBackStyleOpaque
'    
lblJGroup.ForeColor = &HFFFFFF
'End Sub
... et de faire la même chose pour l'évènement suivant du Userform mDFcalendrier :
'Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'    
TranspJour
'End Sub

Mais comme je te vois venir... tu vas t'apercevoir que la surbrillance du jour J n'est plus géré correctement si tu navigues ensuite entre les mois du calendrier (par les 2 boutons latéraux en forme de triangle)... j'ai donc également modifié la procédure MAJCalend() comme suit :
'Ajout d'un argument optionnel "Surligne" à la procédure MAJCalend
Private Sub MAJCalend(As DateOptional Surligne As Boolean)
Dim JS As Integer
Dim V 
As Integer
Dim JM 
As Byte
Dim N 
As Byte
Dim ND 
As Date

'Ajout de ce code ==============================
Static DatEnCours As Date
    TranspJour
    If Surligne Then DatEnCours = D
'
===============================================

    
txtAn.Visible False
    lblMois 
Format(D"mmmm")
    
lblAn Format(D"yyyy")
    
DetermJFériés lblAn
    JS 
Weekday(DateSerial(Year(D), Month(D), 1), vbMonday)
    
JM Day(DateSerial(Year(D), Month(D) + 11) - 1)
    For 
1 To 37
        V 
JS 1
        
If And <= JM Then
            ND 
DateSerial(Year(D), Month(D), V)
            
J(N).lblJGroup.BorderStyle fmBorderStyleNone
            J
(N).lblJGroup.ControlTipText ""
            
If ThisWorkbook.Worksheets("Prefs").Range("A3"Then
                
If JFerie(ND) > 0 Then
                    J
(N).lblJGroup.BorderStyle fmBorderStyleSingle
                    J
(N).lblJGroup.ControlTipText JF(JFerie(ND), 2)
                
End If
            
End If
            
J(N).lblJGroup.Caption V
            J
(N).lblJGroup.Font.Bold ND Date
            J
(N).lblJGroup.Font.Underline ND Date
            J
(N).lblJGroup.Visible True
            
            
'================================================================
            ' 
Nouvelle modification de cette partie de code... je teste non plus la date d'affichage du calendrier
            ' 
mais la date qui était précédemment sélectionnée dans la feuille de calcul (DatEnCours)
            If 
DateSerial(Year(D), Month(D), V) = DatEnCours Then
                J
(N).lblJGroup.BackStyle fmBackStyleOpaque
                J
(N).lblJGroup.ForeColor = &HFFFFFF
            End 
If
            
'================================================================
            
        Else
            J(N).lblJGroup.Visible = False
        End If
    Next N
    Me.Repaint
End Sub
... et j'ajoute un argument Surligne=True lors de l'appel de MAJCalend depuis l'évènement Initialize() du Userform :
MAJCalend .Range("B1"), True

Et donc, maintenant, ton calendrier fonctionne correctement dans les deux sens :
[list]
[*]un clic sur une date dans la feuille de calcul affiche le calendrier et met le jour en surbrillance.
[*]et à l'inverse, un clic dans le calendrier et c'est la sélection sur feuille de calcul qui se déplace au bon endroit.
[/list]


Citation :

Hadidman a écrit:
Sinon un autre problème, lorsque je clique sur une date (sur le classeur Excel), le calendrier apparait, mais il apparait au milieu de la feuille, alors que j'aimerais qu'il reste tout le temps dans le coin en haut à droite de la feuille. Est-ce possible de modifier cela ?

Toujours dans l'évènement Initialize() du Userform, je modifie le code comme suit :
' Placer le calendrier en haut et à droite =========================
    '
Me.Width 126.75
    Me
.StartUpPosition 0
    Me
.Move Application.Left Application.Width 136.7510126.75
    
'====================================================================

Et pour que tout ça te paraisse plus clair, tu trouveras ci-joint la .xla intégrant l'ensemble de ces modifications et le fichier.xls qui va avec.

Si tu penses que la question d'origine de ce fil de discussions est résolue, merci de solder le présent sujet.

Je pense que je vais te laisser continuer la suite de ton projet seul maintenant. En cherchant un peu, tu devrais pouvoir te débrouiller je pense... (Je te l'ai dit plus haut : dépecer cette application comme ça, pour moi, c'est une torture... )

Bonne continuation,

Cordialement,