Pb avec les Dates stockées au format Texte et les macros VB

Résolu
Bonjour,

J'utilise une macro VB pour copier-coller des données d'un classeur vers un autre, et je rencontre un problème dans l'inerprétation d'un champ qui contient un texte dont j'extrait une date.
Le contenu de la cellule de départ est le suivant : =T(" (04/01/2013 15:17:34)")
La macro Excel commence par supprimer tout les caractères qui ne font pas partie de la date :
Selection.Replace What:="=T(""", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=""")", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=" ()", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="( ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=" (", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=")", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=True
Selection.Replace What:=" ", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

C'est à ce moment là que j'ai un problème avec les date du type 04/01/2013 15:17:34 qui sont systématiquement interprétée comme étant au format : mm/dd/yyyy hh:mm:ss
Je me retrouve avec une date au 1er Avril, au lieu du 4 janvier !

comment faire?
Merci.

5 réponses

  1. Bonjour,

    Quel EXCEL avez-vous
    0
    1. Bonjour F894009,

      Je travaille sous Excel 2007. Le fichier dont j'extrais les données et en Excel 2003.

      Merci.
      0
      1. Re,

        par macro, copier les donnees d'un fichier vers l'autre, ensuite utiliser la conversion de donnees pour enlever les caracteres "parasites" et enfin formater vos cellules.

        Avec l'enregistreur (sans la copie) cela donne ceci (j'ai pris toutes la colonne mais vous pouvez selectionner seulement une plage de cellules):

        Sub Macro1()
        '
        ' Macro1 Macro
        '

        '
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(Array(0, 9), Array(6, 1), Array(25, 9)), TrailingMinusNumbers:= _
        True
        Selection.NumberFormat = "dd/mm/yyyy hh:mm:ss"
        End Sub

        Ce code peut-etre ameliore par des modif manuelles

        A+
        0
        1. Contributeur
          Bonjour,

          ou bien :
          [A1] = CDate(Replace(Replace([A1], "(", ""), ")", ""))
          ou :
          [A1] = CDate(Mid([A1], 3, 19))

          eric

          Jamais tu ne répondras à un mp non sollicité...
          Bon, ça c'est fait.
          0
          1. Bonjour et bonne annee eriiic

            Je passe par la conversion de donnee du menu donnee parce que beaucoup de gens ne savent pas ou oublient que cela existe et pour des choses simple cela peut depanner.
            Le format c'est pour afficher les secondes.

            Bye
            0
          2. Contributeur
            Salut f894009,

            Mes meilleurs voeux à toi aussi.

            Oui, c'est une bonne méthode.
            Mais je voulais lui montrer quand même CDate() qui avec DateValue permettent de convertir une date texte en date numérique sans être embêté par l'interprétation en format américain mm/dd.

            eric
            0
          3. Re,
            Tout a fait d'accord avec toi, pour moi j'utilie CDate() (evite beaucoup de galeres), mais j'ai souvent remarque que peu de gens regarde les menus, utilise tres peu voir pas l'aide excel et idem pour l'enregistreur de macro (il ne fait pas tout, mais quand meme!!).

            Bye
            0
        2. Bonjour,
          Et merci de votre aide, ça fonctionne bien : j'ai opté pour la solution CDate().

          Problème résolu
          0