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 :

Problème de date


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Par défaut Problème de date
    Bonjour,après des recherches intensives sur le sujet, je ne comprend toujours pas le problème qui est bien trop technique pour mes connaissances.

    Voila mon code d'origine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(Fichier).Sheets(1).Cells(56, 11).Value = Format(Date, "dd/mm/yyyy")
    Malheureusement, dès que le jour ne dépasse pas le 12, je me retrouve avec une date au format américain.

    Comment faire pour qu'à tous les coups cette date soit au format francais jj/mm/yyyy?

    Merci d'avance pour vos réponses car la je perds pied

    Vincent

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 674
    Par défaut
    Salut,

    il ne faut pas confondre valeur de cellule et valeur affichee dans Excel.

    A noter que la fonction Format retourne une chaine de caracteres.

    Aussi je te recommande de faire simplement en deux etapes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Workbooks(Fichier).Sheets(1).Cells(56, 11)
    .Value = Date
    .NumberFormat = "dd/mm/yyyy"
    End With
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub tt()
     
    d = "10/02/2017"
     
    valeur = CDate(d) 'Valeur est de type Date
     
    Set c = Cells(1, 1)
    If TypeName(valeur) = "Date" Then
     c.NumberFormat = "dd/mm/yyyy"
    ElseIf TypeName(valeur) = "String" Then
     c.NumberFormat = "@"
    Else
     c.NumberFormat = "General"
    End If
    c.Value = valeur
     
    valeur =d''Valeur est de type String
     
    Set c = Cells(2, 1)
    If TypeName(valeur) = "Date" Then
     c.NumberFormat = "dd/mm/yyyy"
    ElseIf TypeName(valeur) = "String" Then
     c.NumberFormat = "@"
    Else
     c.NumberFormat = "General"
    End If
    c.Value = valeur
     
    End Sub

  4. #4
    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.

    Demo 2 - Dates - Comment ne pas inverser Jour/mois
    Lors de l'ecriture par VBA d'une valeur vers une cellule :
    Si la valeur est de type String et que la propriete Numberformat est differente de String, VBA utilise une fonction de conversion qui ne reconnait que les dates aux formats americains. C'est ce qui explique que le jour et le mois sont inverses.
    Si la valeur est de type String et que la propriete Numberformat est String, la conversion n'est pas requise et il n'y a donc pas d'inversion.
    Si on ne veut pas d'inversion, il faut absolument eviter que cette fonction de conversion soit appelee.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Sub Demo_Dates_Inversion_Jour_Mois()
    Cells.Clear
    Cells(1, 1) = "Valeur"
     
    d = "10/02/2017"
    d = Format("10/02/2017", "dd/mm/yyyy")
    Cells(2, 1) = "'" & d
     
    ligne = 4
    valeur = d ''Valeur est de type String
     Call Inverser(valeur, ligne)
     Call Ne_pas_Inverser(valeur, ligne)
     
     
    ligne = 6
    valeur = CDate(d) 'Valeur est de type Date
    Call Inverser(valeur, ligne)
    Call Ne_pas_Inverser(valeur, ligne)
     
    End Sub
     
    Function Inverser(valeur, ligne)
    Cells(1, 2) = "Inverser"
    Cells(ligne, 1) = TypeName(valeur)
     
    Set c = Cells(ligne, 2)
     
    If TypeName(valeur) = "String" Then
     
      c.NumberFormat = "General"
    Else
      c.NumberFormat = "@"
    End If
     
    c.Value = valeur
     
    End Function
     
    Function Ne_pas_Inverser(valeur, ligne)
    Cells(1, 4) = "Ne pas inverser"
    Cells(ligne, 1) = TypeName(valeur)
     
    Set c = Cells(ligne, 4)
    If TypeName(valeur) = "String" Then
     
      c.NumberFormat = "@"
    Else
      c.NumberFormat = "General"
    End If
     
    c.Value = valeur
     
    End Function

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(Fichier).Sheets(1).Cells(56, 11).Value = Format(Date, "yyyy-mm-dd")

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

Discussions similaires

  1. Problème de date dans requête de màj imbriquée
    Par VirginieGE dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/07/2004, 16h34
  2. problème de date
    Par baboune dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 10/06/2004, 11h52
  3. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 12h21
  4. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 16h05
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 19h22

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