Format Date fonctionne/fonctionne pas

Bonjour à tous,

Je sais qu'il y a eu beaucoup de post sur ce sujet mais je ne saisis toujours pas pourquoi il y a toujours un problème avec le format date.

Après un export d'une base de données internet, les dates sont sous forme : 2 août 2017, 13 sept. 2017 etc.

Afin d'éviter à l'utilisateur de faire un rechercher/remplacer manuel, j'ai automatisé cette tâche (+ d'autres de mise à jour de notre bdd) via une macro avec chaque mois.

Mais là ... Je ne sais pas pourquoi, certaines dates se mettent au format "dd/mm/yyyy" et d'autres "mm/dd/yyyy".

Pourtant, j'ai essayé avec NumerFormat, CDate, Format... et toujours le même résultat.

Même lorsqu'il n'y a qu'un seul mois de présent !!

13 févr. 2018 --> 13/02/2018 ok

8 févr. 2018 --> 02/08/2018 nok

Peut être est-ce parce que le jour se confond avec un mois ?!

Enfin bref, si vous avez une explication + une solution miracle, j'en serai heureuse :')

Merci!

Bonjour,

il serait plus judicieux d'envoyer une partie (20-30) lignes de ton fichier pour y voir clair

P.

Dim ref As Range
Set ref = Application.InputBox(prompt:="Sélectionner les cellules sur la feuille d'export Aconex (WF)", Type:=8)

tExportAconex = ActiveWorkbook.Name

ref.Replace What:=" août ", Replacement:="/08/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
ref.Replace What:=" avr. ", Replacement:="/04/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
ref.Replace What:=" déc. ", Replacement:="/12/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
ref.Replace What:=" févr. ", Replacement:="/02/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
ref.Replace What:=" janv. ", Replacement:="/01/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
ref.Replace What:=" juil. ", Replacement:="/07/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
ref.Replace What:=" juin ", Replacement:="/06/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
ref.Replace What:=" mai ", Replacement:="/05/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
ref.Replace What:=" mars ", Replacement:="/03/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
ref.Replace What:=" nov. ", Replacement:="/11/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
ref.Replace What:=" oct. ", Replacement:="/10/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
ref.Replace What:=" sept. ", Replacement:="/09/", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True

(Merci l'enregistreur de macro lol)

+ un fichier joint exemple de l'export que j'ai.

Vu que c'est un fichier temporaire, j'ai choisi de sélectionner les cellules via un InputBox, qui normalement ne devrait pas poser de soucis.

+ lignes à la suite que j'ai essayé sans succès :

For Each cels In ref
If IsDate(cels.Value) Then cels.Value = Format(cels, "dd/mm/yyyy")
Next

re,

un peu long ce code

tu peux faire ceci en 3 étapes:

Sub dates()
Dim ref As Range
Dim mCell
'Set ref = Application.InputBox(prompt:="Sélectionner les cellules sur la feuille d'export Aconex (WF)", Type:=8)
Set ref = [B2:B1200]
ref.Select
'tExportAconex = ActiveWorkbook.Name
ref.Replace What:=".", Replacement:="", LookAt:=xlPart, SearchOrder _
  :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
  end sub
  

ensuite en c2: "= --(b2)" (égale + 2 tirets + B2) et double clic pour copier vers le bas

puis tu recopies ces données là dans la colonne B en valeur copier/coller/valeur et tu remets le bon format à la colonne B tu effaces la C

Il y a certainement mieux mais ça fonctionne ainsi

P.

Merci d'avoir prit le temps de me répondre !

J'avais procédé de cette manière pour les mois, car le remplacement des "." par "" ne fonctionnent pas pour les mois d'août, mai, juin et mars ! (il n'y a pas d'exemples dans le fichier joint, mais ils n'ont pas de point) et pour les mois de décembre ça restait sous format texte..

Donc j'étais partit sur une toute autre gestion, via le chiffre du mois.

Je vais tenté avec "=--(B2)" et te tiens informé.

Bon, marche quand même pas.

Quel sal*p*rie cet export !! Si qq'un a d'autres idées....

Bonjour

Je ferais une liste des abréviations de chaque mois avec sa correspondance soit en texte soit en nombre (février ou bien 02) et je reconstruirais les dates restées sous forme de texte (test à faire) en combinant le contenu de la cellule et cette liste.

Exemple joint en formule mais transposable en VBA où on peut stocker la liste de décoding dans un array

A compléter pour les autres mois...

Bonjour, Salut à tous !

Sub ConvertDate()
    Dim c As Range, n&
    Application.ScreenUpdating = False
    With ActiveSheet
        n = .Cells(.Rows.Count, 2).End(xlUp).Row
        For Each c In .Range("B2:B" & n)
            If IsDate(c) Then c = DateValue(c)
        Next c
    End With
End Sub

Cordialement.

Merci beaucoup MFerrand ! ca marche.

J'avais voulu éviter le traitement cellule par cellule, mais bon, tant que ça marche hein !

Mais c'est tellement étrange, j'avais pourtant tenté cette méthode mais sans succès ...

Bon,l'essentiel est que ce soit résolu !

Cela n'est pas forcément moins rapide, tout dépend de ce qui est utilisé en alternative (et la fonctionnalité de recherche-remplacement n'est pas des plus véloces), et l'on peut utiliser des fonctions de conversion qui me paraissent préférables à des manipulations de chaînes...

Cordialement.

Bonjour

voila une macro reste a modifier le Array pour les mois

Sub FormatDate()
Moi = Array("janv", "févr", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "sept", "oct", "nov", "déc")
Nlig = Range("B" & Rows.Count).End(xlUp).Row
    For L = 2 To Nlig
        Text = Replace(Range("B" & L), ".", "")
        If Len(Text) > 0 Then
            Jour = Split(Text, " ")(0)
            Mois = Split(Text, " ")(1)
            An = Split(Text, " ")(2)
                For I = 0 To UBound(Moi)
                    If Moi(I) = Mois Then Tmois = I + 1: Exit For
                Next I
            Range("C" & L).Value = DateSerial(An, Tmois, Jour)
        End If
    Next
End Sub

A+

Maurice

Rechercher des sujets similaires à "format date fonctionne pas"