Inserer un Date Picker dans barre d'outils

Guiv

XLDnaute Occasionnel
Bonjour Forum,
J'ai créé une barre d'outils dans mon fichier, et je voudrais insérer dans cette barre d'outils un controle DatePicker. est-ce possible?
Merci d'avance de vos conseils,
Cordialement,
Guiv
 

myDearFriend!

XLDnaute Barbatruc
Re : Inserer un Date Picker dans barre d'outils

Bonsoir le fil,

... le calendrier s'affiche à chaque fois qu'on selectionne une cellule au format date, ce qui est un poil énervant (quand on n'en n'a pas besoin)

Effectivement Guiv, je suis bien d'accord avec toi... C'est pourquoi, en complément de la réponse de l'ami JCGL, je confirme que c'est une option activable et désactivable à volonté directement depuis l'interface du calendrier :

xlcalfrauto.png


Pour info, cette option n'est d'ailleurs pas activée par défaut.

Guiv à dit:
... le bouton "calendrier" se place dans la barre d'outils standard, et je le voudrais dans ma barre perso...
Il est possible d'afficher ou masquer le bouton calendrier dans la barre d'outils standard, par contre, il n'est effectivement pas prévu de pouvoir le déplacer dans les barres d'outils.

Par contre, tu devrais consulter la FAQ dédiée au mDF Calendrier 3.0 et notamment cette question-réponse :
Peut-on piloter l'affichage du mDF Calendrier par macro VBA ?

Cordialement,
 

Guiv

XLDnaute Occasionnel
Re : Inserer un Date Picker dans barre d'outils

Merci mDF et le fil,
Je crois quand même que je vais garder ma solution initiale, mais SCREUGNEUGNEU, ça me contrarie qu'on puisse mettre une combo dans une barre perso (merci Staple1600) et pas un autre controle!
Bonne soirée à tous, et à vous lire si vous avez d'autres idées...
Cordialement,
Guiv
 

MichelXld

XLDnaute Barbatruc
Re : Inserer un Date Picker dans barre d'outils

bonjour à tous


Je sais que j'arrive après la bataille, mais voici une version perso juste pour le fun, facilement intégrable à un évènement de la feuille de calcul ou à une barre d'outils personnelle:
La date est insérée dans la cellule active.
Cet exemple utilise le contrôle Monthview, mais peut aisément être modifié pour les contrôle Calendar et DataPicker.

Enlevez le commentaire sur cette ligne
'.insertlines j + 3, " Unload Me"
pour que la fenêtre se referme automatiquement après l'insertion de la date.


Code:
Option Explicit
Dim Usf As Object

Sub LancementProcedure()
    Dim X As Object
    Dim NomMonthView As String
    
    NomMonthView = "MonthView1"
    'Lance la procédure de création du userform et du contrôle MonthView
    Set X = UserForm_Et_MonthView_Dynamique(NomMonthView)
    
    'Affichage userform
    X.Show
    
    'Suppression du userform après la fermeture
    ThisWorkbook.VBProject.VBComponents.Remove Usf
    Set Usf = Nothing
End Sub


Code:
Function UserForm_Et_MonthView_Dynamique(NomObjet As String) As Object
    Dim Obj As Object
    Dim j As Integer
    'Création UserForm
    Set Usf = ThisWorkbook.VBProject.VBComponents.Add(3)
    With Usf
        .Properties("Caption") = "Mon calendrier"
        .Properties("Width") = 135
        .Properties("Height") = 140
    End With
    
    'Création du contrôle MonthView
    Set Obj = Usf.Designer.Controls.Add("MSComCtl2.MonthView.2")
          
    With Obj
        .Left = 0: .Top = 0: .Width = 150: .Height = 140
        .Name = NomObjet
        .ForeColor = &HC000C0
        .TitleBackColor = &HC000C0
    End With
    
    
    'Ajout de la procédure évènementielle DateClick du contrôle MonthView
    With Usf.CodeModule
        j = .CountOfLines
        .insertlines j + 1, "Sub " & NomObjet & "_DateClick(ByVal DateClicked As Date)"
        'Insère la date dans la cellule active
        .insertlines j + 2, "   ActiveCell = DateClicked"
        'Option pour refermer l'userform après l'insertion de la date.
        '.insertlines j + 3, "   Unload Me"
        .insertlines j + 4, "End Sub"
    End With
    
    VBA.UserForms.Add (Usf.Name)
    Set UserForm_Et_MonthView_Dynamique = UserForms(UserForms.Count - 1)
  
End Function



Bonne journée
MichelXld
 

MichelXld

XLDnaute Barbatruc
Re : Inserer un Date Picker dans barre d'outils

bonjour Staple


J'utilise WinXP et Office2007.
Il faut disposer de l'ocx MSCOMCT2.ocx pour utiliser le contrôle MonthView



Voici une adaptation qui utilise le contrôle DataPicker:

Code:
Option Explicit
Dim Usf As Object

Sub LancementProcedure()
    Dim X As Object
    Dim NomdtPicker As String
    
    NomdtPicker = "DtPicker1"
    Set X = UserForm_Et_DataPicker_Dynamique(NomdtPicker)
    
    X.Show
    
    ThisWorkbook.VBProject.VBComponents.Remove Usf
    Set Usf = Nothing
End Sub

Code:
Function UserForm_Et_DataPicker_Dynamique(NomObjet As String) As Object
    Dim Obj As Object
    Dim j As Integer
    Set Usf = ThisWorkbook.VBProject.VBComponents.Add(3)
    With Usf
        .Properties("Caption") = "Mon calendrier"
        .Properties("Width") = 130
        .Properties("Height") = 40
    End With
  
    Set Obj = Usf.Designer.Controls.Add("MSComCtl2.DTPicker.2")
          
    With Obj
        .Left = 0: .Top = 0: .Width = 130: .Height = 20
        .Name = NomObjet
        .CalendarBackColor = &HFF00FF
    End With
    
    With Usf.CodeModule
        j = .CountOfLines
        .insertlines j + 1, "Sub " & NomObjet & "_Change()"
        .insertlines j + 2, "   ActiveCell.Value = Format(DateSerial(Year(" _
            & NomObjet & "), Month(" & NomObjet & "), Day(" _
            & NomObjet & ")), " & Chr(34) & "dd mmmm yyyy" & Chr(34) & ")"
        'Option pour refermer l'userform après l'insertion de la date.
        '.insertlines j + 3, "   Unload Me"
        .insertlines j + 4, "End Sub"
    End With
    
    VBA.UserForms.Add (Usf.Name)
    Set UserForm_Et_DataPicker_Dynamique = UserForms(UserForms.Count - 1)
  
End Function



Bonne journée
MichelXld
 

Staple1600

XLDnaute Barbatruc
Re : Inserer un Date Picker dans barre d'outils

Bonsoir


--> MichelXLD: merci pour tes liens et ton aide précieuse.

j'ai donc maintenant le Monthview
67542d1193178320-inserer-un-date-picker-dans-barre-doutils-csans-titre.gif


Existe-il avec Aujourdhui à la place de today?
 

Pièces jointes

  • cSans titre.gif
    cSans titre.gif
    2.3 KB · Affichages: 576

Guiv

XLDnaute Occasionnel
Re : Inserer un Date Picker dans barre d'outils

Bonjour Staple, Michel et le fil,

Merci de continuer à vous intéresser à mon problème. J'avais un peu renoncé, et comme je suis un xldien du dimanche, voilà 3 jours que je ne m'étais pas connecté.
La proposition de Michel fonctionne bien chez moi, et me ramène à la question première : comment puis-je insérer cet usf (ou plutôt rien que le datepicker) dans ma bo? J'avoue que je me suis contenté pour l'instant de copier bêtement les codes de Michel dans un classeur vierge pour voir, j'essaierai de comprendre plus tard mais je crois que ça devient un peu compliqué pour moi...
Par ailleurs, mon but était de déclencher une macro à la sélection d'une date dans le calendrier ( sélection de la page correspondant à la date dans un planning annuel avec 1 feuille par semaine). Je pense pouvoir résoudre ça tout seul comme un grand avec un événement "change" sur la cellule qui affiche la date, mais j'ai peur que ce ne soit pas très élégant...
Toujours à l'écoute de vos conseils avisés,
Cordialement,
 

MichelXld

XLDnaute Barbatruc
Re : Inserer un Date Picker dans barre d'outils

bonjour


Ci joint un exemple complet avec la création de la barre d'outils automatique lors de l'ouverture de classeur et sa suppression lors de la fermeture du classeur.
Si j'ai bien compris ta demande:
Le contrôle MonthView permet d'activer la feuille correpondant au numéro de semaine (Cet exemple nécessite donc que le classeur contienne 52 feuilles) en fonction de la date choisie dans le calendrier.


Code:
'Cet exemple est placé dans le module objet du classeur et utilise
'l'évènement Workbook_Open.
'De cette manière, la barre est créée automatiquement lors de
'l'ouverture du fichier
Private Sub Workbook_Open()
    Dim CmdBar As CommandBar
    Dim Bouton As CommandBarButton
    
    'Création de la barre d'outils nommée 'MaBarrePerso'
    Set CmdBar = Application.CommandBars _
        .Add(Name:="MaBarrePerso", Position:=msoBarTop, Temporary:=True)
    
    'Ajout d'un bouton dans la barre d'outils
    Set Bouton = CmdBar.Controls.Add(Type:=msoControlButton)
    With Bouton
        'Définit "l'image" qui va s'afficher sur le bouton
        .FaceId = 33
        'Définit quelle macro est associée au bouton.
        'Cette macro sera lancée à chaque fois que vous cliquez sur le bouton.
        .OnAction = "LancementProcedure"
    End With
    
    CmdBar.Visible = True
End Sub



Code:
'Ce deuxième code utilise l'évènement Workbook_BeforeClose et
'supprime la barre personnelle lors de la fermeture du classeur.
'Rappel:
'Dans Excel2007, les menus et barres d'outils personnels sont stockés
'dans l'onglet "Complément".
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Application.CommandBars("MaBarrePerso").Delete
End Sub



Code:
'--- Dans un module Standard ---
Option Explicit
Dim Usf As Object

Sub LancementProcedure()
    Dim X As Object
    Dim NomMonthView As String
    
    NomMonthView = "MonthView1"
    'Lance la procédure de création du userform et du contrôle MonthView
    Set X = UserForm_Et_MonthView_Dynamique(NomMonthView)
    
    'Affichage userform
    X.Show
    
    'Suppression du userform après la fermeture
    ThisWorkbook.VBProject.VBComponents.Remove Usf
    Set Usf = Nothing
End Sub
 
Function UserForm_Et_MonthView_Dynamique(NomObjet As String) As Object
    Dim Obj As Object
    Dim j As Integer
    'Création UserForm
    Set Usf = ThisWorkbook.VBProject.VBComponents.Add(3)
    With Usf
        .Properties("Caption") = "Mon calendrier"
        .Properties("Width") = 135
        .Properties("Height") = 140
    End With
    
    'Création du contrôle MonthView
    Set Obj = Usf.Designer.Controls.Add("MSComCtl2.MonthView.2")
          
    With Obj
        .Left = 0: .Top = 0: .Width = 150: .Height = 140
        .Name = NomObjet
        .ForeColor = &HC000C0
        .TitleBackColor = &HC000C0
        '.MinDate = CDate("01/01/2007")
        '.MaxDate = CDate("31/12/2007")
    End With
    
    
    'Ajout de la procédure évènementielle DateClick du contrôle MonthView
    With Usf.CodeModule
        j = .CountOfLines
        .insertlines j + 1, "Sub " & NomObjet & "_DateClick(ByVal DateClicked As Date)"
        'Sélectionne la feuille correpondant au numéro de semaine
        'Cet exemple nécessite que le classeur contienne 52 feuilles.
        .insertlines j + 2, "   Worksheets( " & NomObjet & ".Week ).Activate"
        'Option pour refermer l'userform après l'insertion de la date.
        .insertlines j + 3, "   Unload Me"
        .insertlines j + 4, "End Sub"
    End With
    
    VBA.UserForms.Add (Usf.Name)
    Set UserForm_Et_MonthView_Dynamique = UserForms(UserForms.Count - 1)
  
End Function



Staple, je n'ai pas trouvé d'option pour remplacer Today pas aujourd'hui ...
Il s'agit peut être d'un problème de version.



Bonne journée
MichelXld
 

Staple1600

XLDnaute Barbatruc
Re : Inserer un Date Picker dans barre d'outils

Bonjour


Pour ceux qui voudraient tester sans se fatiguer
à créer 52 feuilles ;)



-> MichelXLD : voici la version (téléchargée selon ton lien)
meme avec ce lien: toujours en anglais:
Effectivement ca selble logique (lol)
Par hasard saurais-tu ou la télécharger en francais?
67571d1193232632-inserer-un-date-picker-dans-barre-doutils-nbb.gif
 

Pièces jointes

  • nbb.gif
    nbb.gif
    2 KB · Affichages: 521
Dernière édition:

Excel_lent

XLDnaute Impliqué
Re : Inserer un Date Picker dans barre d'outils

Salut à tous et aux autres,

3 exemples à toutes fins utiles.
Si tu testes, Stapple, dis moi si tu as always "Today" (ce n'est pas le cas chez moi).
 

Pièces jointes

  • DTPicker.zip
    31.9 KB · Affichages: 104
  • DTPicker.zip
    31.9 KB · Affichages: 109
  • DTPicker.zip
    31.9 KB · Affichages: 109

Discussions similaires

Statistiques des forums

Discussions
312 438
Messages
2 088 410
Membres
103 845
dernier inscrit
anasabir2024