VBA Dates

Bonjour, bonjour

C'est encore moi !

Lors d'un dernier poste on m'avait donné un code afin de convertir au format date une rangée de cellule cependant j'essaye de l'appliquer à d'autre format de donnée mais j'ai un peu du mal car je ne comprend pas bien ce que fait le code :

Ce que j'essaye de convertir est par exemple pleins de date de la forme de: 12/12/2016 09:00:00 vers 12/12/2016

Sub ConversionDate()

Dim c As Range, txdh, txd

Dim Rangeeffect As Range

Set Rangeeffect = Worksheets("tactical_planning").Range("F2:P1000")

For Each c In Rangeeffect

On Error GoTo errform

txdh = Split(Trim(c.Value))

'txd = Split(txdh(0), ".")

txdh(0) = DateSerial(CInt(txd(2)), CInt(txd(1)), CInt(txd(0)))

c.Value = CDate(txdh(0)) ' j'obtiens une erreur ici

c.NumberFormat = "dd/mm/yyyy"

errform:

Next c

End Sub

Bonjour,

Dans ton code, tu as une ligne invalidée (précédée par une apostrophe), tu invalides aussi la suivante (en mettant également une apostrophe devant).

Ces deux lignes étaient liées à un séparateur . (au lieu de /) pour la date...

Merci MFerrand de ta réponse

En plus je crois que c'est toi qui m'avait donné ce code ^^

Donc je dois invalider ces 2 lignes ? celles avec txd et txdh ? si c'est le cas cela ne marche pas,

Cela m'affiche l'indice n'appartient pas à la selection en surlignant la ligne c.Value

(je suis désolé je ne suis pas très fort en VBA)

La suivante est celle qui commence par txdh(0).

C'est moi qui ... ! Je n'en étais pas sûr, la première ligne de déclaration est bien mon style mais pas la seconde (j'ai dû garder ton nom de variable) et comme tu n'utilises pas la balise Code malgré les recommandations en la matière...

j'ai donc invalidée les 2 lignes, et cela m'affiche , l'indice n'appartient pas à la selection

Merci d'avance

4pourleforum.xlsm (85.82 Ko)

La macro convertissait des chaînes en date.

Dans ton fichier tu n'as pas de texte, tu as des dates !!

Il ne s'agit plus de conversion, la macro ne s'applique pas !!!

Il faut supprimer la partie décimale d'un nombre pour ne garder que l'entier correspondant à la date (sans les heures).

Sub DatesUniq()
    Dim c As Range, Rangeeffect As Range
    Set Rangeeffect = Worksheets("tactical_planning").Range("A1:M1000")
    For Each c In Rangeeffect
        On Error GoTo errform
        If c.Value <> "" Then c.Value = CDate(Int(c.Value))
errform:
    Next c
End Sub

Ah oui en effet, je n'avais pas compris, en tout cas merci MFerrand de ta patience

Rechercher des sujets similaires à "vba dates"