Excel : pb de format date lors d'extraction

Résolu
Bonjour à tous,

J'ai récupéré un tableau excel extrait d'un logiciel particulier (dont je ne connais ni le nom ni la nature) et je rencontre un problème étrange avec le format des dates : certaine sont au format français (jj/mm/aa) et d'autres sont au format anglais (genre 5-août-2006) mais le jour et le mois ont été inversés(devrait être 8-mai-2006 pour continuer sur le même exemple).

Conséquence : impossible d'uniformiser le format des dates, que j'ai manipulé en long en large et en travers.
J'ai juste réussi, en imposant un format anglais, à remettre les jours et mois dans le bon ordre pour les dates anglaises sans modifier les formats français. Reste que les dates anglaises sont au format jj/mm/aaaa et qu'il me les faudrait en jj/mm/aa et que je n'y arrive pas sans retomber sur le problème d'inversion jour/mois.
(le tableau fait plusieurs milliers de lignes et j'ai beaucoup de manipulation à effectuer dessus, donc impossible tant que je n'ai pas le bon format de date).

Bref, c'est vraiment un problème à la noix mais qui m'empêche de bosser.
J'espère avoir été suffisamment précis dans mes explications.

Voici un extrait du tableau : https://www.cjoint.com/?gzlEdaRN4R
(1ère colone : format d'origine ; 2ème colonne : modifié par mes soins, avec le jour et le mois dans le bon ordre).

Merci d'avance de votre aide.

Cordialement.

7 réponses

  1. Contributeur
    j'avais complètement plané tout à l'heure... vivement les vraies vacances!

    Sub dater_fr()
    Dim derlig As Long
    
    derlig = Range("B65536").End(xlUp).Row
    For cptr = 3 To derlig
        If Application.IsNonText(Cells(cptr, 2)) Then
            Cells(cptr, 2) = CDate(Month(Cells(cptr, 2)) & "/" & Day(Cells(cptr, 2)) & "/" & Year(Cells(cptr, 2)))
       Else
            Cells(cptr, 2) = CDate(Cells(cptr, 2))
        End If
    Next
    Range("B3:B" & derlig).NumberFormat = "dd/mm/yy;@"
    End Sub
    2
    1. Contributeur
      Bonjour
      pour transformer cellule B6: 3-aout-2009 en 08/03/2009
      =DATE(ANNEE(B6);JOUR(B6);MOIS(B6))

      maintenant pour détecter le format fr ou uk, peut-^tre vba mais...
      0
      1. Contributeur
        Bonjour
        pour transformer cellule B6: 3-aout-2009 en 08/03/2009
        =DATE(ANNEE(B6);JOUR(B6);MOIS(B6))

        maintenant pour détecter le format fr ou uk, peut-^tre vba mais...
        0
        1. Bonjour Michel et merci,

          J'avais pensé à cette solution, mais ça fait faire un bon paquet de copier-coller de la formule (même en étirant la formule avec le petit carré en bas à droite de la cellule).

          Par contre je me rends compte que dans mon tableau, les formats UK sont systématiquement alignés à droite (les formats fr sont alignés à gauche). Peut-être une fonction excel de base ou une petite formule vba peut détecter ça ?

          Merci d'avance.
          0
      2. Contributeur
        Oui,J'y avais pensé en buvant mon jus et puis...

        sur le classeur que tu as joint
        les dates fr sont du texte (=estexte(la cellule)) et les uk sont des nombres (=estnum(lacellule))
        si c'est pareil sur ton original, une petite macro règlera l'affaire
        donc, j'attends ta confirmation
        0
        1. Le bout de tableau est un copier-coller d''un morceau de l'original donc c'est exactement la même chose dans l'original.
          Bref, je confirme.

          J'attends avec impatience ta réponse.

          Cordialement.
          0
      3. Contributeur
        Bon D..., mais c'est bien sûr!
        C'était tout c... simple
        dans une cellule vide dans ta page tu saisis 1
        copier
        tu sélectionnes ta colonnes de dates
        edition -collage spécial- multiplier
        dans déselectionner, tu mets au format date que tu veux (format-cellule-nombre)
        0
        1. Je pense avoir fait la manipulation correctement, mais après avoir mis en forme je me retrouve encore avec cette inversion jour/mois. Idem si je prends la colonne où j'ai déjà rectifié ça.
          Qu'entends-tu quand tu dis "désélectionner" ?

          J'ai essayé une formule du genre =si(estnum(cellule);date(annee(cellule);jour(cellule);mois(cellule));cellule)
          Mais ça me change toutes mes dates (quand je me mets sur une date au format uk, elle s'affiche en numérique uniquement dans la barre de fonction).
          Idem avec la fonction ESTTEXTE.

          encore une fois, je coince...
          0
        2. @LarsonBon je dois partir du bureau et je suis en déplacement demain.

          Si je trouve qu'une solution à été postée à mon retour lundi, le posteur aura droit à une statue à son effigie.

          Merci d'avance de vos efforts.

          Cordialement.
          0
      4. Alléluia !

        Ca fonctionne impec. Merci Michel.
        Tu m'enverras ta photo pour la statue ; )

        Bonne journée.
        1
        1. COOOOOL !!!!!

          Merci pour cette macro, elle me sauve la vie, cela fait des semaines que je bataille à temps perdu pour trouver une solution à ces maudits formats de date.

          Bravo Michel !
          0