Combobox-Calendrier

Résolu
Bonjour,

Existerait-il une formule pour qu'une combobox ait comme rowsource le calendrier ?
Configuration: Windows XP Internet Explorer 6.0

31 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Des échanges portent sur la possibilité de faire lire à une combobox un calendrier comme source de lignes, dans une configuration Windows XP et IE 6. Plusieurs réponses préconisent d'utiliser le contrôle Date and Time Picker 6.0 (DT Picker) pour afficher un petit calendrier déroulant, navigation mensuelle et sélection de date. D'autres approches proposent des macros ou du code VBA pour alimenter une cellule à partir d'un texte saisi, ou soulignent les limites pratiques d'une liste déroulante lorsque l'intervalle est vaste. En dernier lieu, DtPicker est présenté comme une option plus pratique, et certaines réponses évoquent OpenOffice comme alternative, avec des variations selon l'outil et la configuration.

Bobot (l’IA à votre service)
  1. quand tu as ta boîte à outils, clique droit et clic sur "contrôles supplémentaires"

    coche la case "microsoft Date and Time Picker control 6.0"
    et valide avec ok

    L'outil DTPicker apparaît alors dans ta boîte à outils

    C'est un calendrier complet. En cliquant dessus tu accèdes au mois en cours mais tu peux naviguer d'un mois sur l'autre. Vraiment pratique
    1. Bon grâce à pijaku j'ai réussi à te faire ta macro (et par la même occasion je l'utilise aussi sur un autre outil)

      Voilà ton code

      Private Sub CommandButton1_Click()

      If TextBox1.TextLength = 6 Then
      Dim jour As String, annee As String
      Dim datedujour As String, mois As String
      jour = Left(TextBox1, 2)
      mois = Mid(TextBox1, 3, 2)
      annee = Right(TextBox1, 2)
      datedujour = jour & "/" & mois & "/" & annee
      [a1] = CDate(datedujour)
      Unload UserForm1

      Else: MsgBox ("Veuillez rentrer la date au format jjmmaa")
      End If

      End Sub
      1. Merci a toi et à Pijaku !!!

        Juste une petite question, sachant que la donnée en question sera copié via la textbox vers la cellule (Feuil2.Range("F" & i).Value), je remplace a1 par ce qui est entre parenthèse ?

        J'ai tenté : Private Sub CommandButton1_Click()

        If TextBox43.TextLength = 6 Then
        Dim jour As String, annee As String
        Dim datedujour As String, mois As String
        jour = Left(TextBox43, 2)
        mois = Mid(TextBox43, 2)
        annee = Right(TextBox43, 2)
        datedujour = jour & "/" & mois & "/" & annee

        Else: MsgBox ("Veuillez rentrer la date au format jjmmaa")
        Exit Sub
        End If
        If TextBox4.TextLength = 6 Then
        jour = Left(TextBox4, 2)
        mois = Mid(TextBox4, 3, 2)
        annee = Right(TextBox4, 2)
        datedujour = jour & "/" & mois & "/" & annee

        Else: MsgBox ("Veuillez rentrer la date au format jjmmaa")
        Exit Sub
        End If
        Dim i As Integer
        i = 1
        While Feuil2.Range("A" & i) <> ""
        i = i + 1
        Wend

        Feuil2.Range("A" & i).Value = UserForm2.TextBox1
        Feuil2.Range("B" & i).Value = CDate(datedujour)
        Feuil2.Range("B" & i).Value = UserForm2.TextBox4
        Feuil2.Range("C" & i).Value = UserForm2.TextBox69
        Feuil2.Range("D" & i).Value = UserForm2.TextBox70
        Feuil2.Range("F" & i).Value = CDate(datedujour)
        Feuil2.Range("F" & i).Value = UserForm2.TextBox43

        Echec... si vous avez une idée ...
    2. Modérateur
      Pas de chance...
      Retentons :
      Dites moi d'abord... Dans votre classeur vous avez bien une feuille nommé Feuil2?
      Dim i As Integer
      If TextBox43.TextLength <> 6 Then
      MsgBox ("Veuillez rentrer la date au format jjmmaa") 
      Exit Sub 
      End If 
      If TextBox4.TextLength <> 6 Then 
      MsgBox ("Veuillez rentrer la date au format jjmmaa") 
      Exit Sub 
      End If 
      With Sheets("Feuil2")
      i = .Range("A65536").End(xlUp).Offset(1, 0).Row
      .Range("A" & i).Value = UserForm2.TextBox1 
      .Range("B" & i).Value = CDate(Format(UserForm2.TextBox4 , "@@/@@/@@"))
      .Range("C" & i).Value = UserForm2.TextBox69 
      .Range("D" & i).Value = UserForm2.TextBox70 
      .Range("F" & i).Value = CDate(Format(UserForm2.TextBox43 , "@@/@@/@@"))
      End With
      1. Tu peux mettre un DtPicker. C'est beaucoup plus pratique (petit calendrier qui s'affiche sous forme de combobox et qui affiche le mois en cours quand on clique dessus)
        1. Comment programme ton ce Dt picker ? Permet-il seulement de séléectionenr une date du mois en cours ?
          1. Merci, malheureusement au travail, mon excel est trop vieux, je pense. Il n'est pas dans les autres programmes.
            1. ça n'est pas sur excel mais sur visual basic.

              Quand tu as ta boîte à outil où tu sélectionnes tes combobox, fais la manip que je t'ai dite.

              Perso je suis sur 2003
              1. Ou alors sur excel,

                affichage, barre d'outils, boites à outils contrôle, autres contrôles , microsoft date and time picker (a dessiner où tu désires
                1. J'avais bien compris dans ton premier message où le chercher mais malheureusement il n'apparait pas dans la liste des "contrôles supplémentaires". Ni sur Vba ni sur Excel (97 je pense)...
                  1. Non plus... bon c'est pas grave je vais essayer de me débrouiller autrement ! Merci tout de même de l'astuce dont je me servirai quand je serai sur un logiciel plus récent. Merci !
                    1. Le souci avec une combobox, c'est qu'elle te déroule une liste. Et dans le cas d'un calendrier avec un début et une fin non définis, ta liste va être immense
                      1. Penses-tu par exemple, qu'il serait possible de préformater une textbox afin de ne faire saisir que les chiffres entre les "/". L'utilisiteur ne peut rentrer que 6 chiffres avant et après les slash qui séparent, les jours des mois et les mois des années du type JJ/mm/aa
                        1. tu veux dire que l'utilisateur tape par exemple 280110 dans sa textbox
                          et cela affiche 28/01/10 dans la case de ton choix?
                          1. En fait j'imaginais avoir les "/" déjà dans la textbox mais ta proposition me conviendrais très bien.
                            1. Bon je n'arrive pas à sélectionner un endroit du texte pour y insérer les "/". J'ai déjà réussi à faire en sorte que l'utilisateur soit obligé de taper au moins 6 caractères (280110).

                              Private Sub CommandButton1_Click()
                              If TextBox1.TextLength > 6 Then MsgBox ("Veuillez rentrer une date au format jjmmaa")
                              If TextBox1.TextLength < 6 Then MsgBox ("Veuillez rentrer une date au format jjmmaa")

                              End Sub

                              J'essaie d'insérer mes / mais je ne sais pas si jy arriverai
                              1. Ne t'inquiètes pas Farfadet, je pense que cela suffira si tu sais comment le faire copier dans une cellule avec les "/"., je n'aurais pas besoin de les avoir dans la textbox mais je ne sais pas si c'est faisable.
                                1. essaie ceci

                                  If TextBox43.TextLength = 6 Then
                                  Dim jour As String, annee As String
                                  Dim datedujour As String, mois As String
                                  jour = Left(TextBox43, 2)
                                  mois = Mid(TextBox43, 2)
                                  annee = Right(TextBox43, 2)
                                  datedujour = jour & "/" & mois & "/" & annee

                                  Else: MsgBox ("Veuillez rentrer la date au format jjmmaa")
                                  Exit Sub
                                  End If

                                  If TextBox4.TextLength = 6 Then
                                  Dim jour As String, annee As String
                                  Dim aujourdhui As String, mois As String
                                  jour = Left(TextBox4, 2)
                                  mois = Mid(TextBox4, 3, 2)
                                  annee = Right(TextBox4, 2)
                                  aujourdhui= jour & "/" & mois & "/" & annee

                                  Else: MsgBox ("Veuillez rentrer la date au format jjmmaa")
                                  Exit Sub
                                  End If
                                  Dim i As Integer
                                  i = 1
                                  While Feuil2.Range("A" & i) <> ""
                                  i = i + 1
                                  Wend

                                  Feuil2.Range("A" & i).Value = UserForm2.TextBox1
                                  Feuil2.Range("B" & i).Value = CDate(datedujour)
                                  Feuil2.Range("B" & i).Value = UserForm2.TextBox4
                                  Feuil2.Range("C" & i).Value = UserForm2.TextBox69
                                  Feuil2.Range("D" & i).Value = UserForm2.TextBox70
                                  Feuil2.Range("F" & i).Value = CDate(aujourdhui)
                                  Feuil2.Range("F" & i).Value = UserForm2.TextBox43
                                  • 1
                                  • 2