Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

richert90

XLDnaute Occasionnel
Bonjour,

J'ai insérer dans un userform un calendrier avec DTPicker. le problème c'est que je viens de voir que sur Excel 2007 ou 2013, on ne voit plus les calendriers....
Je voudrais savoir si vous aviez un code pour avoir un calendrier qui fonctionne quelle que soit la version d'Excel et sans avoir besoin de téléchargez des modules complémentaires.

Merci d'avance,
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Bonjour,

Je n'ai pas Excel Anglais. La fonction langue() permet de détecter la langue (1036 pour Français)

Code:
Function Langue()
  Langue = Application.LanguageSettings.LanguageID(msoLanguageIDUI)
End Function

Peut être?

Code:
Private Sub Bfiltre_Click()
    If Not IsDate(Me.date_début) Or Not IsDate(Me.date_fin) Then Exit Sub
    If Langue = 1036 Then
      [A1].AutoFilter Field:=3, Criteria1:=">=" & Format(CDate(Me.date_début), "mm/dd/yy"), _
         Operator:=xlAnd, Criteria2:="<=" & Format(CDate(Me.date_fin), "mm/dd/yy")
    Else
       [A1].AutoFilter Field:=3, Criteria1:=">=" & Format(CDate(Me.date_début), "dd/mm/yy"), _
         Operator:=xlAnd, Criteria2:="<=" & Format(CDate(Me.date_fin), "dd/mm/yy")
    
    End If
End Sub

Function Langue()
  Langue = Application.LanguageSettings.LanguageID(msoLanguageIDUI)
End Function

JB
 

Pièces jointes

  • FormCalendrierInclus2Datesx-1.xls
    98 KB · Affichages: 92
Dernière édition:

Docmarti

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Bonjour richert90;

Le problème c'est qu'en utilisant Excel en Anglais, quand je choisis des dates, si je veux prendre le 06/05/2013, il affiche 05/06/2013 et des fois quand je clique sur une date, rien ne s'affiche dans la case (car peut-être vu que les jours et les mois sont inversé , le 14/02/2014 est interprété comme étant le 02/14/2014...)

Pour que la date tienne compte des paramètres régionaux, remplace

Code:
 Me.date_début = DateSerial(Year(mois_courant), Month(mois_courant), Début - décal)
par
Code:
Dim dt As Date
        dt = DateSerial(Year(mois_courant), Month(mois_courant), Début - décal)
        Me.date_début = dt

Avec la même technique, remplace aussi
Code:
Me.date_fin = DateSerial(Year(mois_courant), Month(mois_courant), Fin - décal)
 

richert90

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Bonjour BOISGONTIER,

Merci pour la réponse,

Je n'ai pas Excel en Anglais à ma disposition maintenant, j'essayerai ton code dès que je pourrai et je te retiendrai au courant.

Mais à ce que je vois il n'y aurai rien à changer dans le code concernant le calendrier? c'est à dire que la date serait en version Anglaise ou Française selon la langue d'Excel mais lors du filtre elle serait "remise" correctement en version francaise?
 

richert90

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Bonjour Docmarti
Comme dit avant, j'essayerai ton code également dès que je peux le refaire sur une version Anglaise.
Ta modification permettra donc d'afficher (sur un Excel en Anglais) dans les TextBox les dates au format associé à la langue du système? C'est à dire JJ/MM/AAAA pour un Excel en Français et MM/DD/AAAA pour un Excel en Anglais?
 

Docmarti

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

A mon avis elle fonctionnera sur la plupart des versions d'Excel, russe, chinoise, polonaise, etc.

Tu peux le tester en changeant tes paramètres linguistiques et régionaux.
 

richert90

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Re,

En effet, j'ai essayé de changer mes paramètres linguistiques dans "option" --> "Langue" et j'ai mis Anglais comme langue d'édition mais en redémarrant Excel , c'est toujours en Français.

Roland, je vais regarder ton calendrier également :) merci. Concernant les formats de dates selon la langue ce sera bon tu penses?
 

Docmarti

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Re,

En effet, j'ai essayé de changer mes paramètres linguistiques dans "option" --> "Langue" et j'ai mis Anglais comme langue d'édition mais en redémarrant Excel , c'est toujours en Français.

Je ne parlais pas de la langue d'édition sélectionnée dans Exel par Options/Standard/Paramètres linguistiques.

Je parlais des Paramètres régionaux et linguistiques dans le Panneau de Configuration de Windows. Si tu choisis Anglais ou Suisse, tu verras les dates changées instantanément sur les feulles Excel sans avoir besoin de redémarrer Excel.
 

richert90

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Bonjour,
En effet en changeant les les paramètres régionaux, les dates ont bien été changés sur les feuilles Excel,

Mais les dates je les récupère d'un fichier, elles sont donc en Français à chaque fois, Excel lui est en Anglais mais les dates en Français.C'est donc juste la langue d'Excel qui est modifié et pas de Windows. Je veux juste que dans le calendrier d'Excel, les champs dates apparaissent bien sous la forme JJ/MM/AAAA pour ensuite pouvoir correctement filtrer.
 

Staple1600

XLDnaute Barbatruc
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Bonjour à tous

richert90:
Lances ce code VBA d'illustration de mes propos précédents dans un classeur vierge.
Copies le code dans un module standard et exécutes la macro a
L’avantage (à mon sens) c'est que de cette façon tu ne soucis pas de savoir si tes dates sont au format
dd/mm/yyyy ou mm/dd/yyyy.
Ne pas oublier ce que nous dit l'aide d'Excel à propos des dates
Remarque
Excel enregistre les dates sous forme de numéros de série séquentiels afin de pouvoir les utiliser dans des calculs. Le 1er janvier 1900 est le numéro de série 1 et le 1er janvier 2008 est le numéro de série 39448 car 39 447 jours se sont écoulés depuis le 1er janvier 1900
Code:
Private Sub crea_sample()
[A1] = "DATES": [A2:A30].FormulaLocal = "=AUJOURDHUI()+MOD(LIGNE();5)"
End Sub
Sub a()
critD = CDate(InputBox("Date de début", "Critères de filtre", Date))
critF = CDate(InputBox("Date de fin", "Critère de filtre", Date + 2))
crea_sample
MsgBox "Application d'un filtre automatique avec des dates converties en Long", vbInformation
[A1].CurrentRegion.AutoFilter 1, ">=" & CLng(critD), xlAnd, "<=" & CLng(critF)
End Sub
 

richert90

XLDnaute Occasionnel
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

Bonjour à tous,

Alors j'ai essayer la solution de Docmarti mais malheuresement ça ne marche pas: dans le userForm calendrier avec une version Anglaise si je choisis le 20/04/2012 j'ai, dans le textbox "date_début" : 04/20/2012....

Je me suis penché vers le calendrier de Roland_M :mais en lisant el code j'ai une question: la date récupérée est toujours au format JJ/MM/AAAA?

Merci d'avance, ces formats de dates me posent soucis depuis bien longtemps..........
 

Roland_M

XLDnaute Barbatruc
Re : Calendrier Excel VBA (qui marche sur toutes les versions d'Excel)

bonjour à tous,

les formats sont au format date ! donc système !
mais si tu essais mon classeur tu dois bien voir le résultat ?

perso je n'ai jamais eu l'occasion de voir l'autre format !?
 

Discussions similaires

Statistiques des forums

Discussions
312 193
Messages
2 086 061
Membres
103 110
dernier inscrit
Privé