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 :

Comment éviter qu'une date Européenne soit intérpretée comme date Américaine [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Par défaut Comment éviter qu'une date Européenne soit intérpretée comme date Américaine
    Bonjour,

    Dans un formulaire, un TextBox reçoit de l'utilisateur une date formulée selon dd-mm-yy (jj-mm-aa). Cette date est assignée à un variant par la macro qui la recopie vers une cellule d'une feuille, cellule qui est elle-mème déjà formattée en dd-mm-yy. Mais malgré cela, la date affichée dans la cellule est formattée mm-dd-yy, à l'américaine. comment éviter cela? Example: 05-01-13 (5 janvier 2013) devient "01-05-13" dans la cellule, malgré son formattage préalable.
    C'est d'autant plus étonnant, que lorsque la date est intransposable selon le formattage américain, elle s'affiche correctement comme texte. Example:
    l'introduction de 13-01-13 donne lieu à 13-01-13 (mais en format texte) du fait que le mois 13 n'existe pas.
    En somme, comment faire pour que les dates soient toujours uniformément évaluées comme dd-mm-yy dans le programme?

    Merci d'avance, je n'arrive pas à résoudre, malgré le formattage repété dans le code: datum = Format(datum,"dd-mm-yy").

    Pour info: Excel 2004 pour Mac, version 11.5.6

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour Qcabel Lehcim

    Citation Envoyé par Qcabel Lehcim Voir le message
    Bonjour,

    Cette date est assignée à un variant par la macro qui la recopie vers une cellule d'une feuille...
    C'est d'autant plus étonnant, que lorsque la date est intransposable selon le formattage américain, elle s'affiche correctement comme texte. Example:
    l'introduction de 13-01-13 donne lieu à 13-01-13 (mais en format texte) du fait que le mois 13 n'existe pas...
    En somme, comment faire pour que les dates soient toujours uniformément évaluées comme dd-mm-yy dans le programme?
    Très bonnes observations.
    Une date de type string envoyée de VBA vers Excel est toujours interprétée comme étant une date au format américain si c'est possible, et si ce n'est pas une date valide de format américain, elle est considérée comme du texte.

    Edit:
    La solution exige 2 conditions : Pour empêcher que la variable provenant de VBA soit mal interprétée
    1) le format de nombre de la cellule doit être un format date ou le format Standard
    2) et convertir la variable en variable de type Date avant de la transférer vers la cellule



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cells(1,1).NumberFormat = "General"
    cells(1,1).value = Cdate(maDate)
    Fichiers attachés Fichiers attachés

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Par défaut Désolé, vous n'avez pas tort d'avoir toujours raison!
    Merci beaucoup à Docmarti pour cette réponse rapide! c'est exactement la réponse dont j'avais besoin. En effet il m'a suffit de dimensionner ma variable (Dim datum as Date) pour règler le problème, la plage de cellules était déjà au format Date.

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Par défaut Merci également à Didier Gonard
    Merci également, l'article en pièce jointe est fort élaboré et bien utile!

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Ce qui se produit en inversion est logique si on se penche sur la façon dont excel et le vba traitent les dates :

    Comprendre et gérer les dates sous Excel et en VBA

    voir cette discussion récente

    http://www.developpez.net/forums/d14...format-date/#5

    Le moyen sur de ne pas avoir de soucis est donc d'injecter dans ton excel feuille des numéros de série qui sont "inchangeables" et de le faire dans une colonne que tu auras préalablement formatée en date
    cordialement,

    Didier

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour Qcabel Lehcim; Didier

    @Qcabel Lehcim : Ce fut un plaisir.

    @Didier : Merci Didier de me rappeler que le fait de convertir une date de type String en valeur numérique, permet d'éviter le problème qui survient quand on demande à VBA d'interpréter une date de type String d'un format de date autre que le format que le format américain.

    Peut-on dans ce cas utiliser sans problème la fonction de conversion CDbl au lieu de CLng ?

    Citation Envoyé par Ormonth Voir le message

    Le moyen sur de ne pas avoir de soucis est donc d'injecter dans ton excel feuille des numéros de série qui sont "inchangeables" et de le faire dans une colonne que tu auras préalablement formatée en date

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Citation Envoyé par Docmarti Voir le message
    @Didier : Merci Didier de me rappeler que le fait de convertir une date de type String en valeur numérique, permet d'éviter le problème qui survient quand on demande à VBA d'interpréter une date de type String d'un format de date autre que le format que le format américain.

    Peut-on dans ce cas utiliser sans problème la fonction de conversion CDbl au lieu de CLng ?

    Oui, tout à fait, c'est ce que j'ai fait dans le lien cité au niveau de Sub gogo2 mais avec CDec car on avait une date-heure donc une partie après la virgule. C'est une question de contexte au final.
    Dans les applis pro où les clients n'ont pas accès aux données directement (pilotées via USF), je ne gère les dates qu'en numéros de séries sur les feuilles, elles ne sont converties en visuel dates que sur les extractions de tables que les clients peuvent initier.

    cordialement,

    Didier

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

Discussions similaires

  1. Comment éviter qu'une image se déplace?
    Par sebac dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/07/2010, 13h54
  2. Comment éviter recharger une animation flash dans un site php ?
    Par ultimate_3d dans le forum Flash/Flex
    Réponses: 6
    Dernier message: 07/04/2010, 21h04
  3. [MySQL] Comment éviter qu'une boucle While répète certains éléments ?
    Par matperino dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 01/06/2007, 10h11

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