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 date en Vba


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Mars 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Format date en Vba
    Bonjour chers tous
    Je suis entrain de développer un programme sur vba, la syntaxe ci-dessous marche sur mon ordinateur mais quand j'envoie le fichier sur un autre ordinateur on me parle d'incompatibilité de type. Je veux utiliser la date comme critère de sélection dans le combobox en affichant donc ce format dans l'espace combobox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ComboBox1_Change()
    ComboBox1.Value = CDate(ComboBox1.Text)
    End Sub

  2. #2
    Membre éclairé
    Avatar de bifconsult
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 189
    Points : 877
    Points
    877
    Par défaut
    Bonjour,

    Ceci tourne sur ma version 2010, je pense que ça devrait fonctionner sur 2007.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub ComboBox1_Change()
     
    ComboBox1.Text = CDate(ComboBox1.Value) + 1
     
    End Sub
    En revanche, j'ai dû ajouter un +1 car sinon, 1 me renvoie 31/12/1899, 2 me renvoie 1/1/1900...

    Est-ce que quelqu'un sait pourquoi ???

    bc

  3. #3
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    @tdemsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.Value = CDate(ComboBox1.Text)
    La fonction CDate est utilisée pour convertir une chaîne de caractères en Date.
    Mais au final, le résultat contenu par la ComboBox sera une chaine de caractères.
    Ta formule permet donc d’obtenir une notation texte standardisée de la date.
    01/12 ou 01-déc ou 01-12-12 ou 41244 seront traduits 01/12/2012.
    Par contre, cela sous-entend que l’expression texte initiale peut être interprétée comme une date.
    Dans le cas contraire, tu as une incompatibilité de type.

    @bifconsult
    En revanche, j'ai dû ajouter un +1 car sinon, 1 me renvoie 31/12/1899, 2 me renvoie 1/1/1900...
    Voici une explication tirée du document suivant :
    http://didier-gonard.developpez.com/...l-et-vba/#LIII
    En VBA, le calendrier débute au 31 décembre 1899 (numéro de série 1).
    La date nulle (numéro de série 1) correspond bien au 30 décembre 1899 mais, VBA ne sait pas l'afficher (il retourne 00:00:00).

    Cordialement.

  4. #4
    Membre éclairé
    Avatar de bifconsult
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 189
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par gFZT82 Voir le message
    En VBA, le calendrier débute au 31 décembre 1899 (numéro de série 1).
    La date nulle (numéro de série 1) correspond bien au 30 décembre 1899 mais, VBA ne sait pas l'afficher (il retourne 00:00:00).
    Donc, si je comprends bien:
    -en Excel : 1 = 1/1/1900
    -en VBA pour Excel : 1 = 31/12/1899

    ?? ??

  5. #5
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Eh oui ! très bien expliqué dans le document de Didier Gonard.

    Comme contrairement aux feuilles, VBA refuse l'affectation du 29 février 1900 à une date (car l'année 1900 n'est pas bissextile), il résulte que les dates antérieures au 1er mars 1900 ne possèdent pas, sous Excel et en VBA, le même numéro de série, mais qu'à partir du 1er mars 1900, les numéros de série sont identiques.

    Cordialement.

Discussions similaires

  1. [XL-2010] Conversion de cellules en format date via VBA?
    Par Steppingstone dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/02/2015, 16h15
  2. [XL-2010] Transformer une date du format standard au format date sous vba
    Par Novice_vba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/09/2013, 13h47
  3. [XL-2010] Format date sous VBA
    Par hcfkns dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/04/2013, 05h41
  4. Format date sur VBA
    Par tissam89 dans le forum Access
    Réponses: 2
    Dernier message: 18/07/2011, 11h13
  5. [AC-2007] changement de format date en vba?
    Par EmmanuelleC dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/07/2010, 00h10

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