VBA - extract Date

Bonjour,

ça fait quelque jour que je me casse la tête sur une simple date. J'ai un problème de format de date. Bien que j'utilise la ligne

.NumberFormat = "DD/MM/YYYY"

Pour mettre mes dates au format voulu, c'est uniquement visuel, quand on clique sur une date, celle-ci peut être écrite de façon différente (voir image)

date

Mon but est de comparer deux dates pour calculer leur delta, hors avec toutes ce dates qui sont pas harmoniser j'arrive pas à calculer.

A savoir que j'importe de façon automatique les dates sur mon dashboard du coup je n'ai aucun contrôle sur les dates que j'importe, le plus simple serait de traiter les date une fois dans mon fichier, par contre je sèche un peu sur la méthode.... Pourtant quand je fais le coller dans mon classeur j'importe sans prise en compte du format et autre...

    WbkD.Sheets("MemCache").[A65536].End(xlUp)(1).Resize(UBound(T1), UBound(T1, 2)) = T1
    Sheets("MemCache").Select
    Sheets("MemCache").Range("A1", Range("AL1").End(xlDown)).Copy
    Sheets("MemCache").Select
    Sheets("MemCache").Range("A1").PasteSpecial Paste:=xlPasteValues
    Sheets("MemCache").Range("A1").Select
    Sheets("MemCache").Range("C:V").NumberFormat = "DD/MM/YYYY"

Merci pour votre aide,

Bruno

12date.xlsm (13.07 Ko)
Sub NormalizeDates()
Dim Sh As Worksheet, rg As Range, cell As Range
Set Sh = Sheets("Tab") 'ActiveSheet
Set rg = Sh.UsedRange
Set rg = Sh.Range("C4:V15")

For Each cell In rg
'MsgBox cell.Address
  pos = InStr(1, cell.Text, "/")
  If pos Then
    pos = InStr(1, cell.Text, "/")
    If pos = 3 Then
      If Len(cell.Text) = 8 Then
         cell.Value = Mid(cell.Text, 1, 6) + "20" + Mid(cell.Text, 7, 2)
    'MsgBox cell.Address
      End If
    End If
  End If

Next
End Sub

Bonjour Nunos31

D'abord normaliser les dates au format texte?

Je n'ai pas compris votre code, pas trouvé la déclaration de la variable T1, ni de la feuille "MemCache" dans le document Date.xlsm (sans macro associée)

Cdlt

Merci de ton retour, oui j'ai rien mis car en fait le problème est que je copie déjà toute les dates en mode texte, cependant, bien que je demande à passer les dates de façon DD/MM/YYYY, quand on clique sur une cellule, on se retrouver en réalité avec une date de type MM/DD/YY ou DD/MM/YY ou encore DD/MM/YYYY.

J'ai des cellules qui son configuré pour des raisons inconnue en mode date française et d'autre en anglais. J'ai même fait le test manuel de faire un copier coller dans un classeur vide des dates en y collant juste les valeurs sans type de format et je me retrouve avec des dates sous différente région du monde sans savoir pourquoi.

Je cherche juste à ce que excel puisse interpréter les dates uniformément, que ça soit en Fr ou US peux importe, mais sans que ça soit aléatoire...

Bonsoir,

ci-jointe une proposition :

10date1.xlsm (19.56 Ko)

code :

Option Explicit

Sub convertir_dates()
    Dim dates_orig As Range, dates_résult As Range
    Dim i As Integer

    Set dates_orig = Feuil1.Range("Dates").Cells
    Set dates_résult = Feuil2.Range("Dates").Cells

    For i = 1 To dates_orig.Count
        dates_résult(i) = CDate(dates_orig(i))
    Next i

End Sub

Bonsoir

le problème ne viendrait -il pas de(s) méthode(s) de copie des données qui reconnaissent ou nom le format de la donnée d'origine.

J'ai lu en diagonale l'article suivant et je me dis que lorsque les données n'ont pas été copiées par l'une des méthodes présentées dans l'article (ex le copier/coller serait le coupable) alors on obtient un peu n'importe quoi.

Je me pose la question : Est-ce qu'un code peut corriger les erreurs à postériori?

Est-il concevable de reprendre les imports de dates par une méthode bien identifiée (manuelle ou par macro) pour corriger le problème?

bonsoir,

Comme je n'arrive pas à appliquer la solution de thev , je propose cette autre :

Sub Galopin()
Dim Arr, i&, iC%, s$
Arr = Range("C1").CurrentRegion.Value2
For i = 3 To UBound(Arr)
   For iC = 3 To UBound(Arr, 2)
   On Error GoTo GESTERR
      Cells(Arr(i, iC)).NumberFormat = "dd/mm/yyyy"
      Cells(i, iC).Value = Arr(i, iC)
   Next
Next
Exit Sub
GESTERR:
s = Arr(i, iC)
Arr(i, iC) = CLng(CDate(Left(s, 6) & "20" & Right(s, 2)))
Resume Next
End Sub

A+

#1 Pour répondre précisément à ta question il faudrait voir non pas la feuille que tu nous as transmis mais le document à partir duquel tu as fait ton import.

A partir de là on pourrait te suggérer une meilleure solution (si possible ou pas) pour importer ces donnes.

#2 Concernant la solution que j'ai proposé : Elle ne gère que l'hypothèse de date "dd/mm/yy". En cas d'inversion" mm/dd", je ne l'ai pas géré car je n'en ai pas vu d'exemple.

De toute façon dans ce cas, revenir au #1 !

A+

@galopin

Comme je n'arrive pas à appliquer la solution de thev

En sus du code, il faut définir la plage "Dates" via le Gestionnaire de noms, dans les feuilles Tab et Résultat. C'est pourquoi, j'ai joint le fichier.

Bonjour,

Oui j'avais compris...Ce que j'avais zappé c'est la Feuil1/Feuil2 !

A+

J'avais pas fait de check du system. Le problème est que j'avais des dates en format US et FR, et pour uniformiser tout ça, j'ai du changer la langue et région du fichier excel et surtout le system de windows, par contre, je dois me taper manuellement tous les écarts de date car certaine on pas était converti et au lieu de dire que c'est janvier par exemple, il dit que c'est le mois de Mars.... Mais bon, juste une fois devrait suffir lol

Vos macro son top pour le futur, par contre pour l'instant pas le choix de tout vérifier pour être sur des datas...

Rechercher des sujets similaires à "vba extract date"