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 :

[VBA-E] Gestion des dates selon format de départ


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Points : 403
    Points
    403
    Par défaut [VBA-E] Gestion des dates selon format de départ
    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
    '
    '
    '  Developpe par Gamal le Celte avril 2006
    '
    '    Fonction qui contourne le bug du Pack Office 97 et suivant
    '    qui transforme une date de la norme française à la norme
    '    US utilisée dans un source VBA.
    '
    '    Cette fonction reçoit une variable au format As Date et
    '    retourne le numéro de série de cette date.
    '
    '    Cette fonction peut être optimisée, elle est faite ainsi 
    '    pour que tous puisse comprendre
    '
    '   ----------------------------------------------------------------------
    '
    '    créez un nouveau module et copier y cette fonction pour l'utiliser.
    '
    '    exemple : Cells(16, 11).Value = CorrecDateEcxel(TexDatSai.Value)
    '                                      ici utilisation d'un objet TextBox
    '
    '    où : Cells(16, 11).Value est la cellule à incrémenter
    '         CorrecDateExcel(.....) L'appel de la fonction
    '         TexDatSai.Value le controle contenant la date source,
    '                 peut être remplacée par une variable
    '
    '
    Function CorrecDateExcel(madate)
     
        Dim lemois As Integer
        Dim lejour As Integer
        Dim lannee As Integer
        Dim datetxt As String
        Dim bondate As Date
     
        lannee = Year(madate)
        lemois = Month(madate)
        lejour = Day(madate)
     
        datetxt = Str(lejour) + "/" + Str(lemois) + "/" + Str(lannee)
        bondate = DateValue(datetxt)
     
        CorrecDateEcxel = bondate
     
    End Function

  2. #2
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Arrête-moi si je me trompe mais un bon vieux Format, ça doit le faire non ?
    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format (Date, "dd/mm/yyyy")

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2002
    Messages : 309
    Points : 403
    Points
    403
    Par défaut
    Ben......non, pas toujours, c'est ca qu'est triste.
    J'ai fait quelques essais bien surprenants notamment sur les 12 premiers jours des 10 premiers mois.

    Les 12 premiers jours, je comprends, mais sur les 10 premiers mois....

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 129
    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 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Salut...

    Moi, je suis d'accord avec Thierry, une variable au format DATE est toujours correctement interprétée par VBA, aisni qu'une cellule au format date d'ailleurs, car le format DATE implique en fait que c'est le numéro de série de la date qui est mémorisé dans la cellule ou la variable... Le seul problème qui pourrait se poser entre Excel et VBA viendrait de l'activation du calendrier 1904 dans les options d'Excel.

    Là où je suis d'accord avec Gamal, c'est lorsque l'on veut affecter une valeur à une variable As Date via un inputbox, un textbox ou du code.

    En effet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Dim MaDate As Date
        MaDate = #10/1/2007#
        MsgBox Month(MaDate)
    renvoie 10, alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Dim MaDate As Date
        MaDate = "10/01/2007"
        MsgBox Month(MaDate)
    renvoie 1...

    Moi, personnellement, j'essaie de toujours utiliser, dans le cas d'une saisie de date, la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateSerial(Annee, Mois, Jour)

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Pierre Fauconnier
    ...
    Moi, personnellement, j'essaie de toujours utiliser, dans le cas d'une saisie de date, la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateSerial(Annee, Mois, Jour)
    +1

    Surtout, si en plus l'on "s'amuse" à modifier les options régionales de Windows.. ( en passant format date américain .. par exemple...) les 2 fonctions renvoient alors 10 ... ..
    et si l'on regarde l'aide en ligne VBA-Excel .. on as :

    littéral date
    Toute séquence de caractères de format valide délimitée par des signes dièse (#). Les formats valides comprennent le format de date indiqué par les paramètres régionaux de votre code et le format de date universel.

    Par exemple, #12/31/92# est le littéral date représentant le 31 décembre 1992 si le paramètre régional de votre application est Anglais (États-Unis). L'utilisation de littéraux date vous permet d'accroître la portabilité de votre application dans diverses langues.
    alors qu'as priori quelque soit le paramétrage régional c'est le format "Anglais (Etat-unis) " qui est utilisé lorsqu'on place les # .... sans les # la date prise en compte dépend des paramétres régionaux...



    Pour en revenir à la contribution initiale..("Gamal le Celte") . en considérant que le paramètre "MaDate" est une chaîne ... le fonctionnement dépends des paramètres régionaux....

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Et ça, ça ne fonctionne pas, quelque soit la version ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LaDate = CDbl(Date)
    MsgBox Format(LaDate, "dd/mm/yyyy")
    C'est une question
    Edit
    Essaie ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Lesdates = Array("16/02/2006", "02/16/07", "2008/2/16")
    For i = 0 To UBound(Lesdates)
        LaDate = CDbl(CDate(Lesdates(i)))
        MsgBox Format(LaDate, "dd mmmm yyyy")
    Next
    et tu obtiendras 16 février 2006, 16 février 2007 et 16 février 2008

Discussions similaires

  1. [XL-2007] Gestion des dates en vba
    Par AgriPhilou dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/01/2014, 23h23
  2. Gestion des dates en VBA/Excel ?
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/07/2012, 11h34
  3. Réponses: 11
    Dernier message: 12/09/2007, 16h58
  4. [VBA] Gestion des dates nulles provenant d'un recordset
    Par wperezrobles dans le forum Access
    Réponses: 11
    Dernier message: 28/09/2006, 19h02
  5. [MCD] [MCD] Gestion des dates
    Par brionne dans le forum Schéma
    Réponses: 3
    Dernier message: 30/05/2003, 14h01

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