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 :

jj.mm.année en mm/jj/année [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 28
    Par défaut jj.mm.année en mm/jj/année
    Bonjour amis internautes je suis (encore) coincé sur une broutille technique.

    voilà depuis un fichié extrait de SAP, j'ai des dates dans une colonne sous le format dd.mm.aaaa. Je travaille sur une macro qui s'appuie sur les dates pour traiter le fichier (ex: if (cell(1,2)=date+2).
    Malheureusement il semble que le format avec les point ne soit pas reconnu comme une date (bien que la colonne soit au format date.
    Je fait donc remplacer dans la macro tous les "." par des "/" et alors la macro reconnait les dates.
    MAIS, pour une raison obscure, les dates comme 05.09.2013 deviennent 09/05/2013... Autrement il inverse les mois et les jours.

    J'utilise la ligne suivante pour remplacer les "." par des "/" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Columns("C:C").Select    
    Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    J'ai également essayé de mettre la colonne en question sous format texte mais le résultat est le même après remplacement des points.

    Merci d'avance de votre aide!

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La lecture de ce didacticiel de Didier Gonard t'en dira plus Comprendre et gérer les dates sous Excel et en VBA
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 28
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    La lecture de ce didacticiel de Didier Gonard t'en dira plus Comprendre et gérer les dates sous Excel et en VBA
    Bonjour et merci Philippe, je suis bien allé sur le lien que tu m'as proposé et y ai appris plein de choses!
    Cependant je n'y ai pas trouvé une solution pour mon problême. Même si je voulais jouer sur l'interprétation d'excel (comme c'est proposé dans la partie II-E-5) ce la ne fonctionne pas car il semble qu'excel ne sache pas interpréter le format dd.mm.aaaa (renvoi une valeur erreur).

    Mon soucis vient du fait que la date se modifie lorsqu'elle passe sous un format interpretable par excel.

    Détail peut-être important, lorsque je fais le remplacement avec ctrl+f, cela fonctionne normalement et la date passe bien du format dd.mm.yyyy à dd/mm/yyyy.
    Le problème n'apparait que lorsqu'on lance le remplacement depuis la macro VBA (à savoir que le code de remplacement des "." par "/" a été récupérée à l'aide d'enregistrement macro).

    Merci de votre aide!

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avant de remplacer les séparateurs, il serait intéressant de savoir au préalable si ce sont de véritables dates au sens où excel l'interprète.
    Si ce sont des chaînes de caractères il faudrait les traiter sans doute d'une autre manière pour éviter le problème des dates dont les jours peuvent être interprétés comme des mois.
    Si c'est une véritable date, seul le format doit être modifié.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function datetodatebien(stringue As String) As Date
    jour = Left(stringue, 2)
    mois = Right(Left(stringue, 5), 2)
    an = Right(stringue, 4)
    datetodatebien = jour & "/" & mois & "/" & an
    End Function
    Ou alors tu fais joujou avec les formats

  6. #6
    Invité
    Invité(e)

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 28
    Par défaut
    Citation Envoyé par EngueEngue Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function datetodatebien(stringue As String) As Date
    jour = Left(stringue, 2)
    mois = Right(Left(stringue, 5), 2)
    an = Right(stringue, 4)
    datetodatebien = jour & "/" & mois & "/" & an
    End Function
    Ou alors tu fais joujou avec les formats
    Merci pour ta proposition Engue ça a l'air d'une idée intéressante, cependant j'ai essayé de l'insérer au dessus de mon programme mais je ne suis pas sur de l'utiliser correctement. quand je fait le pas à pas je ne sais pas s'il le prends en compte.

    A quel moment cette fonction est prise en compte?

    Citation Envoyé par rdurupt Voir le message
    J'ai jeté un oeil rapidement, il se semble que tu te sois déja bien penché sur le sujet, je lirai plus en détail cet après-midi merci beaucoup!

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 28
    Par défaut
    Je dois mal écrire quelquechose,

    J'ai essayé les deux codes suivants:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function datetodatebien(stringue As String) As Date
    jour = Left(stringue, 2)
    mois = Right(Left(stringue, 5), 2)
    an = Right(stringue, 4)
    datetodatebien = jour & "/" & mois & "/" & an
    End Function
    Sub lui()
     
        I = 2
        While Cells(I, 1) <> ""
        Cells(I, 7) = datetodatebien(Cells(I, 3))
        I = I + 1
        Wend
    End Sub
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub sm()
     
    Columns("C") = CDate(Replace(Columns("C"), ".", "/"))
     
    End Sub
    A chaque fois l'erreur "incompatibilité de type" apparait.
    Dans le premier cas il s'arrête sur la ligne
    datetodatebien = jour & "/" & mois & "/" & an

  9. #9
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim L As Long
    Dim Myrange As Range
    Set Myrange = Range("c:c")
    For L = 2 To Myrange.Rows.Count
        If Trim("" & Myrange(L, 1)) = "" Then Exit Sub
        Myrange(L, 1) = CDate(Replace(Myrange(L, 1), ".", "/"))
    Next
    End Sub

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 28
    Par défaut
    J'ai essayé le code que tu proposes,

    Cela me renvoi la même erreur (incompatibilité de type), je mets en pj une image du test, peut-être qu'il manque des détails dans mon explition du problème
    Images attachées Images attachées  

  11. #11
    Invité
    Invité(e)
    Par défaut
    ta colonne C correspond bien à tes date?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim L As Long
    Dim Myrange As Range
    Set Myrange = Range("c:c") 'ta colonne C correspond bien à tes date?
    For L = 2 To Myrange.Rows.Count
        If Trim("" & Myrange(L, 1)) = "" Then Exit Sub
        If IsDate(Replace(Trim("" & Myrange(L, 1)), ".", "/")) = True Then
            Myrange(L, 1) = CDate(Replace(Trim("" & Myrange(L, 1)), ".", "/"))
        End If
    Next
    End Sub

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 28
    Par défaut
    Bonjour et merci pour tous ces efforts,

    J'ai essayé avec ton nouveau code, cette fois pas d'érreur mais il ne se passe rien.

    Par contre j'ai trouvé un code en fouinant dans les autres fichiers excel avec macro existants avec lequel cela fonctionne, pour ceux que ca intéresse le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Columns("c:c").Select
     
        Selection.TextToColumns Destination:=Range("c:c"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, OtherChar _
        :=".", FieldInfo:=Array(1, 4), TrailingMinusNumbers:=True
    Merci encore à tous pour votre aide!

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

Discussions similaires

  1. [XL-2007] Affichage année en cours et année N-1
    Par dimferte dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/01/2013, 18h05
  2. [AC-2007] Liste déroulante année en cours plus années précédentes.
    Par vincent1746 dans le forum IHM
    Réponses: 2
    Dernier message: 20/05/2010, 12h52
  3. [AC-2003] Changement d'année en cours d'année
    Par edonis dans le forum IHM
    Réponses: 1
    Dernier message: 28/11/2009, 13h32
  4. Année bisextille pour l'année précédente
    Par Prekestolen dans le forum Formules
    Réponses: 1
    Dernier message: 26/03/2009, 18h13
  5. Année bisextille pour l'année précédente
    Par Prekestolen dans le forum Excel
    Réponses: 2
    Dernier message: 25/03/2009, 21h09

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