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 format date [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut Problème format date
    Bonjour,

    J'ai un petit soucis avec les dates sous excel.

    J'ai developer un petit userform qui est utiliser par plusieurs personnes. Je precise que les excel sont en anglais pour la plupart:

    voice le formatage des cellules au demarrage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Mise_En_Forme()
    .Range("E:E,F:F,CH:CH").NumberFormat = "[$-809]dd mmm yyyy;@"
    End Sub
    voice le code de mon userform:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
    Dim i&
    Application.ScreenUpdating = False
    TextBox1.Value = Format(Date, "dd mmm yyyy", 2, 2)
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    .Cells(DL, C.Column + 1).Value = Format(CDate(TextBox1.Value), "dd mmm yyyy", 2, 2)
    End Sub
    alors cela fonctionne correctement pour la plupart mais il y a 2-3 personnes où la date ne s'affiche pas comme telle:

    imaginons que nous sommes le 05 février 2019, l'affichage demandé est 05 Feb 2019 (dd mmm yyyy en anglais du coup) or pour ces quelques personnes cela affiche 05 Févr 2019. et biensur de ce fait cette date n'est pas reconnue comme telle dans les cellules mais comme texte. Du coup mes autres macros pour calcul par rapport à la date plantent car date non reconnue...
    Avant que je me lance dans un traitement archaique de ces dates au mauvais format, auriez vous une solution pour éviter ce type de probleme ?? A savoir aussi que pour ces meme personnes, des fois le formatage fonctionne correctement et des fois non...

    Merci d'avance de votre aide
    Bonne journée

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Bboy, bonjour le forum,


    Si tu remplaces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    .Cells(DL, C.Column + 1).Value = Format(CDate(textbox1.Value), "dd mmm yyyy", 2, 2)
    End Sub
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    .Cells(DL, C.Column + 1).Value = CLng(DateSerial(Year(textbox1.Value), Month(textbox1.Value), Day(textbox1.Value)))
    End Sub
    La cellule prendra le format défini au préalable.

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour

    ben l'erreur elle est simple en fait
    d'abord tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Value = Format(Date, "dd mmm yyyy", 2, 2)
    la c'est ok tu formate ta date dans le textbox

    maintenant apres quand tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(DL, C.Column + 1).Value = Format(CDate(TextBox1.Value), "dd mmm yyyy", 2, 2)
    ca ne peut fonctionner car cdate reconnais n'importe quoi car c'est un string etant donnée qu'il y a des lettres autres que le separator de date

    maintenant exemple
    si tu fait dans un userform vierge avec deux textbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub UserForm_Click()
     
    TextBox1.Value = Format(Date, "dd mmm yyyy")
    ladate = DateValue(TextBox1.Value)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    TextBox2 = DateValue(TextBox1.Value)
    MsgBox Month(ladate)
    ' sans formatage il y aura donc les separator en fonction de votre system( / ou - ou autre)
    Cells(1, 1).Value = DateSerial(Year(ladate), Month(ladate), Day(ladate)) ' ici tu aura la date en format de ta region  paramétrée dans ton systeme
    Cells(2, 1).NumberFormat = "mm dd yyyy" 'format US sans separator
    Cells(2, 1).Value = DateSerial(Year(ladate), Month(ladate), Day(ladate))
    Cells(3, 1).NumberFormat = "yyyy mm dd" 'format canadien sans separator
    Cells(3, 1).Value = DateSerial(Year(ladate), Month(ladate), Day(ladate)) 
     
    End Sub
    si tu dois prendre une date avec les mois en lettre c'est datevalue!!!!! et non Cdate
    je precise que malgré l'affichage différent dans les 3 cellules la date est la meme en terme de "VALUE"
    je pars du principe d'injecter toujours une date par date serial ca n'inverse pas les (mois /jours)
    quand au formatage c'est avec numberformat dans les cellule jamais format(une date,"le format")
    sinon tu n'est pas sorti de l'auberge
    datevalue... datevalue... datevalue !!!!!

    edit
    pour t'en convaincre tu peut faire le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "mois cellule1= " & Month(CDate(Cells(1, 1))) & vbCrLf & "mois cellule2= " & Month(CDate(Cells(2, 1))) & vbCrLf & "mois cellule3= " & Month(CDate(Cells(3, 1))) & vbCrLf
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Bonjour,

    Merci pour vos réponses et vos explications ainsi que demonstrations . c'est bien plus clair à présent.

    Tout est parfait.

    Très bonne journée

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

Discussions similaires

  1. Problème format date
    Par benjisan dans le forum Modélisation
    Réponses: 3
    Dernier message: 17/07/2008, 09h24
  2. Problème Format date
    Par Jiyuu dans le forum VB.NET
    Réponses: 5
    Dernier message: 21/08/2007, 16h52
  3. problème format date dans un datagrid
    Par bebert119 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 14/08/2007, 15h38
  4. Problème format Date avec VS2003
    Par vaohdan dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/05/2007, 12h06
  5. Problème format date - SimpleDateFormat inversion mois/jour
    Par juanqui dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 07/02/2007, 14h37

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