Rapport de message :*
 

Re: Adapter le mDF_Calendar

Titre du sujet : Re: Adapter le mDF_Calendar
par myDearFriend! le 13/05/2008 22:17:39

Bonsoir Hadidman et bienvenu sur mDF XLpages.com !

Tout d'abord, merci du compliment.

Je commence par une petite précision pour éviter toute confusion : il s'agit là du mDF Calendrier v2.2 (à ne pas confondre avec le mDF XLcalendar qui correspond à la toute dernière version de cet utilitaire et dont le projet VBA n'a pas été mis à disposition).

Même si je n'ai pas compris la globalité de ce que tu cherches à faire avec ce calendrier, je puis quand même te proposer les modifications suivantes à faire sur les deux fichiers pour répondre à ta demande :

Dans le projet VBA de ton fichier nommé "fichier.xls", j'applique le code suivant :

DANS LE MODULE DE CODE DE L'OBJET THISWORKBOOK :
Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal Sh As ObjectByVal Target As Range)
    
'Fermer le mDF Calendrier si il est déjà ouvert
    Application.Run ("mDFcalHide")
    '
Vérifier si la cellule sélectionnée contient une date
    
If IsDate(Target(1).ValueThen
        
'Ouvrir le mDF Calendrier (v2.2) sur la date correspondante
        Workbooks("mDF_Calendrier22.xla").Sheets("Prefs").Range("B1").Value = Target(1).Value
        Application.Run ("mDFcalShow")
    End If
End Sub

Que fais ce code ?
A chaque changement de sélection de cellule, j'analyse le contenu de la cellule en cours.
Si cette cellule contient une date, alors je copie cette date dans la cellule "B1" de l'onglet "Prefs" du classeur mDF Calendrier22.xla (la macro complémentaire).
Je déclenche ensuite l'ouverture du calendrier (procédure mDFcalShow du fichier .xla).


J'apporte ensuite les modifications suivantes au projet VBA du mDF Calendrier22.xla :

DANS LE MODULE DE CODE DU USERFORM "mDFcalendrier", procédure UserForm_Initialize(), je commente (ou supprime) les lignes comme ci-dessous (en vert) :
...
    
With ThisWorkbook.Worksheets("Prefs")
        
lblVerrou IIf(.Range("A2"), "Ï""Ñ")
        
chkAffMois.Value = .Range("A1")
        
ChkJF.Value = .Range("A3")
'        If .Range("A1") Then
'            
MAJCalend Date
'        Else
            MAJCalend .Range("B1")
'        
End If
    
End With
    
...

Ceci permet de désactiver l'option : Afficher mois en cours à l'ouverture

Ensuite j'ajoute le code suivant dans la procédure MAJCalend() (voir zone commentée en vert) :
Private Sub MAJCalend(As Date)
Dim JS As Integer
Dim V 
As Integer
Dim JM 
As Byte
Dim N 
As Byte
Dim ND 
As Date
    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
            
'======================================================
            ' 
Code à rajouter...
            If 
Day(DThen
                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


L'ensemble de ces modifications devrait permettre d'obtenir ce que tu sembles vouloir : afficher le calendrier automatiquement et mettre en évidence le jour correspondant à la date sélectionnée dans ton classeur.

J'ajoute que j'ai toujours eu comme un pincement au coeur en voyant une de mes applications détournée de son travail d'origine. Pour être franc, jusqu'à ce jour, j'ai d'ailleurs toujours refusé de participer à un quelconque de ces détournements...
Mais j'ai volontairement laissé le code VBA disponible pour ces versions et donc je n'interdis en rien, chacun de faire ce qu'il en veut (ou presque ! Pas d'application commerciale par exemple et laisser ma signature et les commentaires originaux dans le code VBA).

Ainsi, permets moi de te laisser tester et mettre en oeuvre ce qui précède, en te souhaitant bonne continuation pour la suite de ton projet...

En espérant t'avoir aidé...

Cordialement,