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 :

Date au format américain


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut Date au format américain
    Bonjour,

    Je cherche à enregistrer un classeur au moyen d'une date (contenue dans une variable) au format américain.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public date_cal As Date
    date_cal = Sheets("extract°_calendrier").Range("B1")
    'me renvoie la (bonne) date : 08/10/2020

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MakeUSDate = Year(date_cal) & "." & Month(date_cal) & "." & Day(date_cal)
    'me renvoie : "2020.10.8"

    Je souhaite que les mois et jours s'affichent avec 2 chiffres, alors j'ai modifié comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MakeUSDate = Year(date_cal) & "." & Format(Month(date_cal), "mm") & "." & Format(Day(date_cal), "dd")
    Le résultat est : "2020.01.07" !! D'où viennent ce "01" et ce "07" ?

    Comment convertir ma date initiale (08/10/2020) en 2020.10.08 (sans guillemets dans ma variable) ?

    En vous remerciant par avance pour votre aide,

    Cordialement,

    PS : j'ai consulté ce lien, sans doute une référence incontournable en la matière (bravo au rédacteur !) sans avoir pu y trouver la réponse à ma question :
    https://didier-gonard.developpez.com...-excel-et-vba/

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    PS : j'avais aussi tenté ceci qui me paraissait plus simple mais qui me renvoyait une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    date_cal = Sheets("extract°_calendrier").Format(Range("B1"), "yyy mm dd")
    Cordialement,
    jpma75

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Utilise ce qui suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    format(VariableDate,"yyyy.mm.dd")


    Citation Envoyé par jpma75 Voir le message
    [...]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MakeUSDate = Year(date_cal) & "." & Format(Month(date_cal), "mm") & "." & Format(Day(date_cal), "dd")
    Le résultat est : "2020.01.07" !! D'où viennent ce "01" et ce "07" ?[...]
    Il faut savoir que les dates sont des nombres. Donc, lorsque tu manipules une date, tu manipules des nombres.

    Lorsque tu utilises ton code, par exemple Format(Month(date_cal), "mm"), tu récupères d'abord le mois de ta date (qui va donc varier de 1 à 12) puis tu le transforme avec Format, qui reçoit donc une valeur comprise entre 1 et 12, et tu demandes de récupérer les chiffres du mois ( => "mm") de cette valeur. Donc, Format considère que tu lui as passé une date, comprise entre le 31/12/1899 et le 11/01/1900 => Si le mois de ta date initiale est 1, ton code renverra 12 (car tu testeras le 31/12/1899) et s'il ce mois est >1, le mois renvoyé par ton code est donc forcément janvier => 01.

    Nom : 2020-10-18_104544.png
Affichages : 576
Taille : 4,7 Ko

    Idem pour le jour.

    CQFD


    PS 1: Si tu voulais utiliser ton code, tu devrais avoir Format(Month(date_cal), "00")...

    PS 2: Pour VBA, la date 1 est le 31/12/1899... il y a donc un décalage entre VBA et Excel pour les dates comprises entre le 01/01/1900 et le 28/02/1900 (Excel considère que 1900 est bissextile et "invente" un 29/02/1900...^^). Tout rentre dans l'ordre à partir du 01/03/1900
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Bonjour Pierre,

    Merci pour cette réponse détaillée.

    Bon dimanche,
    jp

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Oups,

    Dans ma formule initiale (qui ne me semble pas très éloignée de ta proposition), qu'est-ce qui clochait ? L'emplacement de Format ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_cal = Sheets("extract°_calendrier").Format(Range("B1"), "yyyy.mm.dd")
    cdt

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    La fonction Format n'est pas mise au bon endroit.

    Voici comment il faut écrire la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_cal = Format(Sheets("extract_calendrier").Range("B1"), "yyyy.mm.dd")
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Re,

    J'avais déjà fait cette modif mais ça me renvoie (toujours)
    "Erreur d'exécution '9': L'indice n'appartient pas à la sélection"
    Quelque chose m'échappe.

    jp

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    A mon avis, c'est le nom de ta feuille qui n'est pas bon. Dans le code que tu as donné au message #5, il y a un peut-être un ° qui traîne. Car l'erreur que tu mentionnes ne peut provenir à mon avis que du fait qu'il ne trouve pas ta feuille.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_cal = Sheets("extract°_calendrier").Range("B1")
    Et cela génère une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date_cal = Format(Sheets("extract°_calendrier").Range("B1"), "yyyy.mm.dd")

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Chez moi, ton code fonctionne avec une feuille nommée Extract°_Calendrier. Le message d'erreur que tu cites m'intrigue car "L'indice n'appartient pas à la sélection" ne peut provenir, dans le cas de ton code et sauf erreur, que du fait que la feuille n'est pas trouvée dans la collection des feuilles.

    As-tu plusieurs classeurs ouverts? utilises-tu les lignes dans le même contexte? Pour t'en assurer, crée une procédure et places-y les deux lignes de code à la suite puis exécute pour voir ce qui se passe.

    Peux-tu donner le code "autour" des lignes qui posent problème, et notamment la ligne de déclaration de ta variable date_cal?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Stop
        date_cal = Sheets("extract°_calendrier").Range("B1") 'ok
        date_cal = Format(Sheets("extract°_calendrier").Range("B1"), "yyyy.mm.dd")  'pierre mais erreur !
    La première ligne affiche la date
    La seconde l'erreur type 13

    Un seul classeur ouvert

    Ma variable est définie dans un module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public date_cal As Date

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Ok. L'erreur 13, c'est normal (je croyais que c'était toujours l'erreur 9).

    Ta variable Date_Cal est une date => tu ne peux pas lui passer du texte qui ne pourra pas être interprété en date! Or, la transformation par Format, notamment ici avec des . comme séparateurs, ne permet pas la reconversion en date. Du reste, tu perdrais le bénéfice de Format, évidemment.

    Déclare Date_Cal comme ceci: Public date_cal As String
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour le fil,

    Pourquoi une variable publique ?????
    Dans ce cas, une variable locale (niveau procédure) me semble bien plus appropriée ....
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Merci ! C'est parfait !

    J'avais déjà fait ce changement de string (oups, pour cette association ) qui avait échoué sachant qu'à ce moment-là, le problème était encore dans la formule...

    Merci encore,
    Bon dimanche,
    jp

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

Discussions similaires

  1. [XL-2003] Date au format américaine dans un csv
    Par qltmi dans le forum Excel
    Réponses: 1
    Dernier message: 05/02/2010, 19h50
  2. [RegEx] Date au format américain
    Par thierry.kunzi dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2009, 08h40
  3. Afficher une date au format américain
    Par Gregory.M dans le forum ASP.NET
    Réponses: 4
    Dernier message: 25/11/2008, 17h04
  4. Problème Date au format Américain
    Par nocrash dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/06/2007, 14h58
  5. Exporter dates au format américain
    Par RKU01 dans le forum Access
    Réponses: 5
    Dernier message: 01/12/2006, 21h28

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