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] Converstion auto multiformats de dates


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Par défaut [VBA-E] Converstion auto multiformats de dates
    Bonjour,

    J'ai un classeur Excel avec de nombreuses feuilles, chacune d'entre elles comprenant de très nombreuses données (chiffres, dates, etc.).

    J'aimerais concevoir une petite macro permettant d'harmoniser le format des dates présentes sachant, et c'est là que je coince que j'ai des dates aussi bien en français qu'en anglais et qu'Excel ne reconnait visiblement pas l'anglais.

    Quelques exemples de dates présentes :

    17May07 --> ne reconnaît pas
    11Mar07 --> il reconnaît, normal, Mars commence pareil dans les 2 langues
    11/02/07 --> ok
    11/03/2007 --> ok

    Que puis-je faire ?

    Merci

  2. #2
    Expert éminent


    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
    Par défaut
    et ces dates elles viennent d'ou ..?

  3. #3
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LaDate = CDbl(CDate("11/03/2007"))
    LaDateFormatée = Format(LaDate, "ddmmmmyyyy")
    Quelque soit la langue, VBA traduira
    Maintenant, si tu veux l'avoir en anglais dans une version française, tu dois faire un tableau de correspondance et l'appliquer au N° du mois de ta date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LeMois = array("","Jan", "feb", "mar", "apr", "may","jun","jul"...)
    LaDateFormatée = Format(LaDate, "dd") & LeMois(Month(Ladate)) & Format(LaDate,"yyyy")
    Edit
    Comme ta question est "à l'envers" de ce que je te propose, tu découpes ta date en testant les caractères pour identifier le mois et, d'après le mois en anglais, tu peux retrouver l'index du tableau qui correspond au mois... et donc reconstituer la date

    Tiens, amuse-toi
    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
    Sub DateFormatSelonLaLangue()
    LaDate = CDbl(CDate("11/05/2007"))
    LaDateFormatée = Format(LaDate, "ddmmmmyyyy")
    MsgBox LaDateFormatée
    LeMois = Array("", "Jan", "feb", "mar", "apr", "may", "jun", "jul")
    LaDateFormatée = Format(LaDate, "dd") & LeMois(Month(LaDate)) & Format(LaDate, "yyyy")
    MsgBox LaDateFormatée
    For i = 1 To Len(LaDateFormatée)
        If Asc(Mid(LaDateFormatée, i, 1)) > 57 Then
            m = Mid(LaDateFormatée, i, 2)
            Exit For
        End If
    Next
    For j = 0 To UBound(LeMois)
        If LCase(LeMois(j)) = LCase(Mid(LaDateFormatée, i, 3)) Then Exit For
    Next
    LaDateFormatée = Left(LaDateFormatée, i - 1) & "/" & j & "/" & Mid(LaDateFormatée, i + 3, Len(LaDateFormatée) - i - 2)
    LaDateFormatée = Format(LaDateFormatée, "ddmmmyyyy")
    MsgBox LaDateFormatée
     
    End Sub
    N'oublie pas de déclarer les variables

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Par défaut
    Les dates viennent d'une extraction spéciale sur laquelle je ne peux pas agir, je ne peux donc pas modifier le format à la source.

    boudiou, ça c'est du code

    Je vais essayer de comprendre tout ça

    Merci et...à bientôt je sens vu ce que je vois

  5. #5
    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
    Par défaut
    Il n'y a que le tableau et les dernières lignes de code qui t'intéressent
    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
    Dim LaDateFormatée, i as byte, LeMois()
    LeMois = Array("", "Jan", "feb", "mar", "apr", "may", "jun", "jul") 'etc
    LaDateFormatée = Cells(NoLigne,NoCol) 'je récupère la date en anglais
    For i = 1 To Len(LaDateFormatée )
     
        'je vérifie si c'est un chiffre ou un caractère
        If Asc(Mid(LaDateFormatée, i, 1)) > 57 Then 'C'est un caractère, je sors
            Exit For
        End If
    Next
    For j = 0 To UBound(LeMois)
        If LCase(LeMois(j)) = LCase(Mid(LaDateFormatée, i, 3)) Then Exit For
    Next
    For j = 0 To UBound(LeMois)
        If LCase(LeMois(j)) = LCase(Mid(LaDateFormatée, i, 3)) Then Exit For
    Next
    LaDateFormatée = Left(LaDateFormatée, i - 1) & "/" & j & "/" & Mid(LaDateFormatée, i + 3, Len(LaDateFormatée) - i - 2)
    Cells(NoLigne,NoCol) = Format(LaDateFormatée, "ddmmmyyyy")
    Et tu passes à la date suivante
    Tu pourrais aussi passer la date lue dans la cellule en paramètre à cette sub
    Ou tu pourrais en faire une fonction qui retourne la date re-formatée à substituer à la date lue dans la cellule... etc

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Par défaut
    Bon, autant être franc...je suis largué

    Je sais, je sais mais ça dépasse de nettement ce que j'ai l'habitude de faire.

    1) En essayant ton code, Excel me dit qu'il y a un bug à cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaDateFormatée = Left(LaDateFormatée, i - 1) & "/" & i & "/" & Mid(LaDateFormatée, i + 3, Len(LaDateFormatée) - i - 2)
    2) D'autre part, je ne vois pas comment bien l'exploiter

    Ce que je souhaite effectivement, c'est que toutes les dates "bizarres" des lignes 8 à 11 de chaque feuille de mon classeur soient remplacées, sachant qu'il y en a plusieurs par lignes...je ne sais pas si c'est faisable ?

    Désolé d'être long à la détente, j'apprends

    Au pire

Discussions similaires

  1. Réponses: 8
    Dernier message: 08/06/2006, 11h20
  2. [VBA] Calculer la différence entre deux dates
    Par T'chab dans le forum Access
    Réponses: 13
    Dernier message: 11/05/2006, 15h12
  3. [VBA-E]sauvegarde fichier nom et date
    Par elkhy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2006, 19h20
  4. [VBA] [excel] MàJ auto tab croisé dynamique
    Par Angel79 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2006, 10h05
  5. Réponses: 21
    Dernier message: 31/01/2006, 16h39

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