IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Format de dates dans VBA [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    No
    Inscrit en
    Février 2018
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : No

    Informations forums :
    Inscription : Février 2018
    Messages : 47
    Par défaut Format de dates dans VBA
    Bonjour,

    Les dates jouent souvent des tours dans VBA. Une date saisie comme 01/11/2018 peut etre interprétée dans une macro comme 11/01/2018.
    Je m'en sors habituellement, un peu au petit bonheur la chance a coup de Dateserial, Cstr, Cdate...
    Mais existe-t-il un paramétrage, ou un reformatage qui marche à tous les coups ?
    Ou un brillant exposé qui l'expliciterait ?

    Merci d'avance

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour

    Il suffit généralement d'utiliser une variable typée Date
    Voir :
    http://didier-gonard.developpez.com/...-excel-et-vba/

  3. #3
    Membre averti
    Homme Profil pro
    No
    Inscrit en
    Février 2018
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : No

    Informations forums :
    Inscription : Février 2018
    Messages : 47
    Par défaut
    Merci Patrice pout ta réponse qui ne résout cependant pas totalement mon problème.

    J'utilise la formule suivante pour filtrer dans un tableau les lignes dont la date est comprise ente D_Deb et Date_Fin.
    Dans le tableau le champ date est en colonne 6
    Les valeurs D_Deb et D_fin sont saisies dans une Userform (ou une Inputbox)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveSheet.Range("$A$2:$F$1000).AutoFilter Field:=6, Criteria1:= _
            ">=" & D_deb, Operator:=xlAnd, Criteria2:="<=" & D_Fin
    Que je déclare D_Deb et D_Fin ou pas, n'a pas d'incidence : 1/11/2018 est interprétée comme 11/1/2018

    Merci encore. Peut être d'autres idées ??

    Cordialement

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Re,
    Citation Envoyé par mikhaelN Voir le message
    Les valeurs D_Deb et D_fin sont saisies dans une Userform ...
    Que je déclare D_Deb et D_Fin ou pas, n'a pas d'incidence : 1/11/2018 est interprétée comme 11/1/2018
    Je ne répèterais jamais assez :
    A force d'utiliser des propriétés implicites, on oublie les fondamentaux !

    Un textbox (ou combobox ou listbox) contient du texte, pas une date.
    Pour transformer du texte en date : CDate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton1_Click()
    Dim D As Date
      D = CDate(Me.tbxDate_deb.Value)
      MsgBox D
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    No
    Inscrit en
    Février 2018
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : No

    Informations forums :
    Inscription : Février 2018
    Messages : 47
    Par défaut
    merci encore Patrice, mais je cherchais si il existait une méthode générale qui m'aurait éviter de tester tous les reformatages possibles chaque fois que je dois traiter des dates dans un programme VBA.
    Dans le cas qui m'intéresse aujourd'hui le CDate ne fonctionne pas

    J'utilise finalement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    D_DEb = Format(InputBox("DEB ?"), "0")
    D_Fin = Format(InputBox("FIN ?"), "0")
        ActiveSheet.Range("$A$2:$U$1000").AutoFilter Field:=6, Criteria1:= _
            ">=" & D_DEb, Operator:=xlAnd, Criteria2:="<=" & D_Fin
    End Sub
    Pour sélectionner dans un tableau A2:A1000, les lignes dont le champ date (colonne F) est compris entre D_Deb et D_Fin, valeurs saisies dans des Inputbox(es)

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Jean Philippe André (JPCheck) a rédigé un tutoriel au sujet du formatage des dates

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par mikhaelN Voir le message
    Mais existe-t-il un paramétrage, ou un reformatage qui marche à tous les coups ?
    A ma connaissance, non.
    Je pense qu'il faut s'adapter au cas par cas.

  8. #8
    Membre averti
    Homme Profil pro
    No
    Inscrit en
    Février 2018
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : No

    Informations forums :
    Inscription : Février 2018
    Messages : 47
    Par défaut
    Merci à tous pour vos réponses. Je crois que je vais continuer a traiter les problèmes de dates au cas par cas.
    Au pire on m'a suggéré de décomposer les dates en 3 colonnes Day, Month, Year puis de faire des filtres composés sur les 3 colonnes! Comme ultime recours...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. format de date dans vba
    Par Invité dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/07/2008, 20h26
  2. comment imposer un format de date dans DB2?
    Par Mittou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/10/2005, 08h16
  3. [SQL 9i ] format de date dans un where
    Par booth dans le forum Oracle
    Réponses: 5
    Dernier message: 14/10/2005, 10h23
  4. [oracle][delphi] Problème format de date dans une requete
    Par le_parrain dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/07/2005, 10h12
  5. [VBA] Pb de format des dates dans un état
    Par linda15975 dans le forum IHM
    Réponses: 45
    Dernier message: 21/06/2005, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo