Conversion de formats de dates

Bonjour à tous,

Je tente depuis quelques temps sur google de trouver la réponse à ma question mais sans succès !

Je cherche tout simplement, via VBA, à convertir une colonne de données de dates (au format texte) en

Format numérique qui me permettrait de les utiliser et de les grouper dans un tableau dynamique. Cela ne marche pas avec des dates au firmat texte. Je ne suis pas du tout pro en excel mais je vous donne quand même l'embryon de mon code

J'ai vu qu'il y avait la fonction DateValue mais je ne sais comment l'imbriquer au sein de mon code

Dim myRange As Range

Dim myDate As Date

Sheets ("DATA Output").Select

Range ("K4:K1919").Select

For Each myRange.Value ="" Then

Exit For

Else

myDate = myRange.Value

myRange.NumberFormat = "@"

myRange.Value = Format (myDate, "dd/mm/yyyy")

End If

Next

Merci à vous tous en tout cas! Les forums il n'y a rien de mieux pour trouver des reponses!!

Bonne fin de journée !!

Géry

Bonjour et bienvenu,

Peux-tu joindre un fichier que l'on voit comment procéder pour t'apporter une aide ?

Cdlt.

Aïe! J'aimerais beaucoup mais il s'agit d'un fichier sur mon ordi de boulot et tout est classé confidentiel defense

Salut,

Voici une proposition :

Sub Conversion_Dates()
Dim CL As Range
Sheets("DATA Output").Select
Range("K4:K1919").Select
For Each CL In Selection
  If IsDate(CL) Then
    CL.NumberFormat = "General"
    CL = CDate(CL)
    CL.NumberFormat = "dd/mm/yyyy"
  End If
Next
End Sub

A tester...

A+

H

Super! Merci, je teste ça demain et je te tiens au courant !

Lethal118, le forum,

Une autre version :

Private Sub CommandButton1_Click()

Dim myRange As Range

Dim Cel As Range

Sheets("DATA Output").Select

Set myRange = Range("K4:K1919")

For Each Cel In myRange

If Cel <> "" Then

Cel.NumberFormat = "dd/mm/yyyy;@"

Cel = Format(Cel, "dd/mm/yyyy")

End If

Next Cel

LaCéline

Cool!! Je vous fais un retour demain !

Bonsoir,

Un peu d'explications à partir de ton code (qui n'avait aucune chance de fonctionner au vu de ta boucle déconnante... mais c'est un autre problème). Une date est un nombre (valeur de type Long) dont des caractéristiques le font identifier par Excel comme par VBA (mais de façon non identique) comme date. Ce nombre-date (officiellement appelé numéro de série, dans Excel comme VBA) est stocké sous sa forme numérique. De ce fait tout nombre entier (dans les limites des plages de dates reconnues respectivement par Excel et VBA) peut être converti en date sans ambiguïté sur la date (hormis le bogue d'Excel sur 1900...). Inversement, une expression littérale (texte) ayant un format de date reconnu peut être converti en date, et il l'est mais c'est là que les problèmes interviennent...

myDate = myRange.Value

Quand tu écris ceci, myDate étant déclarée de type Date, tu lui affectes une valeur texte, ce qui va entraîner spontanément une conversion de l'expression en date. Si cette conversion ne peut se faire, tu auras une erreur (incompatibilité de type).

Sinon elle se fait, mais comme tu ne l'as pas demandée, VBA la réalise avec ses propres paramètres (identification des dates selon les formats américains...)

Il te faut donc toujours convertir explicitement, avec CDate ou DateValue, car dans ce cas, VBA ira se référer aux paramètres régionaux de Windows pour identifier les formats de date avant d'opérer la conversion...

Ensuite, quand tu écris :

myRange.Value = Format (myDate, "dd/mm/yyyy")

Il faut savoir que, dès lors que tu utilises la fonction Format, celle-ci renvoie une valeur texte. Tu fais donc l'inverse de ce que tu veux réaliser.

Ceci dit, le code de LordNelson45, qui respecte ces spécifications, devrait répondre à tes attentes...

Cordialement.

Merci pour les explictions! En fait, les données sont extraites d'un logiciel! Cependant, l'extraction ne se fait pas de manière uniforme. J'utilise donc une transformation en texte. Les données resultent d'une colonne ou j'ai appliqué une formule =Gauche pour en extraire des caracteres non desires. Mais effectivement je ne peux jouer avec via un tableau croise dynamique!

Merci en tout cas pour les explictions. J'appliquerai les differentes solutions histoire de mieux maitriser le language, ou du moins de comprendre davantage ce que j'écris !

Alors petit retour

Sur la première méthode j'ai une erreur 438.

Sur la deuxième, cela me transforme tout en format date mais en inversant les jours et les mois.

De base en fait, sans rien modifier, si j'applique une fonction =Datevalue sur les differentes colonnes de dates, celle que je desire modifier est la seule qui de base me donne une valeur numérique, les autres me diront "VALEUR$"

Salut,

Sans risquer d'exposer des données sensibles, tu pourrais copier/coller les dates que tu veux convertir dans un fichier et nous le montrer.

A+

H

Lethal118, LordNelson45, le forum,

Pour ton erreur 438 : https://forum.excel-pratique.com/cours-astuces/erreur-438-t60484.html

Une petite variante du code de LordNelson45, car la plage restait sélectionnée :

Option Explicit

Sub Conversion_Dates()
Dim CL As Range
Dim myRange As Range
Sheets("DATA Output").Select
Set myRange = Range("K4:K1919")
For Each CL In myRange
  If IsDate(CL) Then
    CL.NumberFormat = "General"
    CL = CDate(CL)
    CL.NumberFormat = "dd/mm/yyyy"
  End If
Next CL
End Sub

LaCéline

Bonsoir,

Sous quelle forme se présentent tes dates ?

Les cellules sont-elles au format Standard ?

Bonjour,

Une procédure à tester sur un échantillon.

Cdlt.

Option Explicit

Sub ConverTextToDate()
Dim ws As Worksheet
Dim rCell As Range, Rng As Range
Dim n As Long
    Set ws = ActiveWorkbook.Worksheets("DATA Output")
    With ws
        Set rCell = .Cells(4, "K")
        n = .Cells(.Rows.Count, "K").End(xlUp).Row
        Set Rng = rCell.Resize(n - rCell.Row + 1)
    End With
    Rng.TextToColumns _
            Destination:=rCell, _
            DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, _
            FieldInfo:=Array(1, 4)
End Sub
Rechercher des sujets similaires à "conversion formats dates"