Comment transformer une date ?

Bonjour le forum,

J'ai une colonne avec les dates à ce format 17.11.2021 15:55:45.

Je voudrais éliminer les doublons de date et par tranche horaire, pour ce faire j'utilise la ligne ci-dessous, qui me donne un format 17.11.2021 15.

Mais lorsque j'utilise la fonction "supprimer les doublons", ma date en 17.11.2021 15 est reconnus avec les minutes, secondes et les millisecondes ce qui fait que j'ai des valeurs unique. Comment je pourrais résoudre mon problème en VBA ?

Une bonne journée à vous .

Range("A1", "A50000").NumberFormat = "dd.mm.yy h" 
8exemple.xlsx (271.60 Ko)

Bonjour,

D'abord évitez d'utiliser des points pour les séparations dans votre format date. Utilisez plutot le - ou /

Sinon plus simple. Plutôt que de passer par un code VBA, pourquoi ne pas utiliser la fonction de base excel dans menu DONNEES -> CONVERTIR ?
Le résultat obtenu, vous utilisez ensuite la fonction "supprimer les doublons"

Cordialement

Bonjour à tous

On ne cesse de le répéter : le formatage ne modifie ni le type ni la valeur d'une donnée, c'est juste un déguisement.

Par ailleurs je m’interroge sur ton élimination de doublons : ne serait-ce pas plutôt un regroupement par tranche qui serait judicieux ?

Sans contexte...

Bonjour,

Sur la colonne A Utiliser l'option "Données" / "Convertir" / largeur fixe et placez vous juste aprés le 15.

Vous obtiendrez le texte que vous souhaitez en colonne A.

Exemple de ce que l'on obtient avec la méthode citée plus haut par DAN

1exemple.xlsx (272.88 Ko)

Nota dans cette configuration ce ne sont plus des dates mais bien du texte au final

@Xmenpl : en gros c'est ce que je viens juste de lui écrire... non ?

Oui Dan j'ai édité la double observation ... ma fénêtre de réponse était encore ouverte et je ne voyais pas encore

ta réponse désolé.

Bonjour,
Une proposition ?
Cdlt.

4exemple.xlsm (282.78 Ko)
Public Sub RemoveDuplicates()
Dim lo As ListObject, tbl, i As Long, n

    Set lo = Range("t_Temps").ListObject
    tbl = lo.ListColumns(1).DataBodyRange

    For i = LBound(tbl) To UBound(tbl)
        n = Format(tbl(i, 1), "dd/mm/yyyy h")
        n = CDate(Split(n)(0)) + Int(Split(n)(1)) / 24
        tbl(i, 1) = n
    Next i

    With lo
        .DataBodyRange.Cells(1, 1).Resize(UBound(tbl)) = tbl
        With .Sort
            .SortFields.Add _
                    Key:=lo.ListColumns(1).DataBodyRange, _
                    SortOn:=xlSortOnValues, _
                    Order:=xlAscending
            .Apply
            .SortFields.Clear
        End With
        .Range.RemoveDuplicates Columns:=1, Header:=xlYes
        .ListColumns(1).DataBodyRange.NumberFormat = "dd.mm.yy hh"
    End With

End Sub

Bonjour,

Je vous remercie pour tous vos conseils. Je vais joindre encore un fichier qui va peut-être mieux exprimer mon problème.

Le fichier à été fait avec un enregistreur de macro, je ne l'ai pas encore mis proprement.

Quand je le fais manuellement toutes mes dates sont au format 25.11.2021 15 et le tri c'est correct qui me donne le résultat 220.

Quand j’exécute la macro j'ai plusieurs mélanges de dates comme 20.10.2021 03:00 et 10/20/2021 11 après le tri j’obtiens 178 comme résultat qui n'est pas correct.

J'ai essayé de changer le format mais malgré plusieurs tentatives je n'ai pas réussi à avoir 220 comme résultat.

Je me permets de relancer le sujet qui s'est perdu derrière les pages. Si vous avez une piste je serais preneur, j'ai essayé mais malgré je n'ai pas réussi à résoudre mon problème.

@Jean-Eric: Merci ! J'ai essayé votre code, mais en l'intégrant dans mon classeur j'ai encore ce problème de format avec une partie des dates qui sont mal formatés.

@Xmenpl: Merci ! Pareil que plus haut, quand je le fais manuellement c'est bon lorsque je le fais en VBA, j'ai le problème de format. Comme dans l'exemple donné plus haut.

Bonjour

Au risque de me répéter "le formatage ne modifie ni le type ni la valeur d'une donnée, c'est juste un déguisement."

Tu as 115 textes dans la colonne Temps et le formatage ne change pas la nature texte

Jean-Eric a donné un code incluant la conversion

Re bonjour, on peut effectivement faire une macro qui gardera uniquement les 13 premiers caractère.

Cependant vu la taille de votre fichier votre la macro va tourner pendant un bout de temps.

( interrogation contenu texte cellule puis remplacement par les treize premiers caractères. )

Personnellement à votre place je me contenterai de l'option de convertion manuelle.

Rechercher des sujets similaires à "comment transformer date"