Remplacer un caractère change le format de ma date

Bonjour, après avoir passé presque 10 heures sur ce problème, je me sent obligé de demander de l'aide. Voici mon problème :

J'ai une colonne date (le format de cellule est "standard") de forme : "dd/mm/yyyy_hh:mm:ss" j'ai environ 1 mois de données du 15/06 au 15/07. Je souhaite remplacer le underscore par un espace. Lorsque que je le fais avec ctrl+f et remplacer, cela fonctionne et passe directement ma date sous le bon format. Excellent ! Mais lorsque j'utilise l'enregistreur de macro pour être certain de faire exactement la même chose cela me donne le code suivant :

Range("A:A").Select
Selection.Replace What:="_", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Seulement avec ce code, le underscore est bien remplacé, mais du 15 au 30 juin la date reste au format standard, mais dès le changement de mois, la date passe en format date mais ANGLAIS (07/01/2019 au lieu de 01/07/2019)

J'ai déjà essayé de modifier les paramètre searchFormat et replaceFormat, aucun changement. J'ai tout formaté en texte avant, ou après, format date différent. Rien à faire, à partir du changement mois ça mer**.

Je vous donne mon fichier avec la colonne date remplie, en espérant que ça serve. Je pense pas avoir été très clair mais je répondrais avec plaisir à vos moindres interrogations (pour info mon fichier est un csv, mais j'ai essayé de le convertir en xlsx et de recommencer, c'est la même chose).

Merci, Emerois

36test-date.xlsx (244.72 Ko)

Bonjour,

effectivement difficile de préciser le format date en même temps que l'on remplace un caractére.

Au plus simple en selectionnant la colonne A option "données" "convertir" séparateur " _ " et précision format date JMA.

Tu obtiendras deux colonnes une pour les dates l'autres pour les heures minutes secondes.

Bonjour,

effectivement difficile de préciser le format date en même temps que l'on remplace un caractére.

Au plus simple en selectionnant la colonne A option "données" "convertir" séparateur " _ " et précision format date JMA.

Tu obtiendras deux colonnes une pour les dates l'autres pour les heures minutes secondes.

Bonjour, salut Xmenpl,

Ta solution est une bonne idée, je précise qu'il est possible de revenir ensuite à une seule colonne en additionnant les 2 (Date + Heure), du moment qu'elles sont toutes deux reconnues comme des dates/heures.

Bonjour, salut Xmenpl,

Ta solution est une bonne idée, je précise qu'il est possible de revenir ensuite à une seule colonne en additionnant les 2 (Date + Heure), du moment qu'elles sont toutes deux reconnues comme des dates/heures.

Bonjour, Pédro j'avoue que je n'avais même pas pensé à la possibilité de réunir les deux colonnes après conversion

Bonjour à tous,

une proposition :

    Dim datas, pl As Range, lig As Long
    Set pl = [A1].Resize(Cells(Rows.Count, 1).End(xlUp).Row)
    datas = pl.Value
    For lig = 1 To UBound(datas)
        If datas(lig, 1) Like "##/##/####_*" Then datas(lig, 1) = CDate(Replace(datas(lig, 1), "_", " "))
    Next lig
    pl = datas

si besoin remettre le format date/heure, une date à 0h n'affiche plus l'heure.

eric

Les réponses de Xmenpl et Pedro22 ont l'air de fonctionner.

Pour concaténer les 2 colonnes, je suis obligé de passer par une boucle pour chaque cellule ? Car c'est long :/ Je ne sais pas si concaténer 2 colonnes directement c'est possible

La proposition de code de eriiic fonctionne également à 1 exception prête, lorsque l'heure est 00:00, elle disparait. Il ne reste que la date.

ex :

02/07/2019 23:58

03/07/2019

03/07/2019 00:02

Merci à vous dans tous les cas, c'est top

Les réponses de Xmenpl et Pedro22 ont l'air de fonctionner.

Pour concaténer les 2 colonnes, je suis obligé de passer par une boucle pour chaque cellule ? Car c'est long :/ Je ne sais pas si concaténer 2 colonnes directement c'est possible

Je ne voit pas bien ce qui te pose problème ? Si ta date est en colonne A, ton heure en colonne B, tu peux écrire en colonne C :

=A1+B1

Il te suffit ensuite d'étendre cette formule jusqu'à la dernière ligne.

Pour le faire en VBA, pas à la main. La solution de tout à l'heure je l'ai faite en VBA avec l'enregistreur de macro. Mais du coup pour concaténer les 2 en VBA je sais pas faire sans boucle (et sans créer une autre colonne si possible). Mais bon voila

Pour le faire en VBA, pas à la main. La solution de tout à l'heure je l'ai faite en VBA avec l'enregistreur de macro. Mais du coup pour concaténer les 2 en VBA je sais pas faire sans boucle (et sans créer une autre colonne si possible). Mais bon voila

Transmet ton code, j'intégrerais ça dedans si tu veux.

    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="_", FieldInfo:=Array(1, 4), TrailingMinusNumbers:=True
    Range("I14").Select

Du coup j'ai la date en A et l'heure en B. Après concaténation faut supprimer la colonne B.

à 1 exception prête, lorsque l'heure est 00:00

c'est que je t'ai noté.

Tu n'as qu'une ligne de code à ajouter pour mettre le bon format partout si tu préfères :

pl.NumberFormat = "dd/mm/yyyy hh:dd"

eric

A tester :

Sub ChangeFormatDate()

Dim DerLig As Long, Lig As Long

With Sheets("Feuil1") 'Nom à adapter
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A1:A" & DerLig).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, Other:=True, OtherChar:="_", FieldInfo:=Array(1, 4), TrailingMinusNumbers:=True 'Séparation date et heure selon caractère "_"
    For Lig = 1 To LigMax
        .Range("A" & Lig) = .Range("A" & Lig) + .Range("B" & Lig) 'Addition date et heure pour revenir à 1 colonne
    Next Lig
    .Range("B:B").Delete 'Suppression colonne B
End With

End Sub

Eric, ta solution fonctionne dans le sens où à 00:00 je n'ai plus le problème, en revanche mes minutes se bloquent à 22 ... je comprends pas comment c'est possible une telle chose tout fonctionne mais juste les minutes sont bloqués tout le long. j'ai testé avant et après p1 = data et en rajoutant les secondes mais pareil ...

Pedro, personnellement, ça ne concatène pas pour ma part. Je me retrouve "simplement" avec la date mais sans les heures :/

Je trouve ça quand même très compliqué de manipuler des dates et des heures en vba alors que là, ce ne sont même pas des calculs ! J'aime bien VBA, mais je ne veux plus jamais avoir à faire aux dates

Eric, ta solution fonctionne dans le sens où à 00:00 je n'ai plus le problème, en revanche mes minutes se bloquent à 22 ... je comprends pas comment c'est possible une telle chose tout fonctionne mais juste les minutes sont bloqués tout le long. j'ai testé avant et après p1 = data et en rajoutant les secondes mais pareil ...

Pedro, personnellement, ça ne concatène pas pour ma part. Je me retrouve "simplement" avec la date mais sans les heures :/

Je trouve ça quand même très compliqué de manipuler des dates et des heures en vba alors que là, ce ne sont même pas des calculs ! J'aime bien VBA, mais je ne veux plus jamais avoir à faire aux dates

Ce n'est pas une concaténation (Texte collé à du texte), car le résultat obtenu est une date valide. C'est quoi une date valide ? Pas un texte qui ressemble à une date, mais un nombre (de jours depuis une date de référence), que l'on peut ensuite formater pour qu'il apparaissent visuellement comme une date.

Je pense donc que ta cellule contient bien l'heure (vérifiable en passant en format numérique par exemple, ce qui doit donner un nombre avec des décimales), mais qu'il faut juste changer le format pour la faire apparaître.

Oui oui je sais pour ça Pedro, mais merci. Visuellement c'est une concaténation, c'est pour ça que j'ai employé ce mot Cependant, je n'avais pas pensé à ta réponse. mais j'ai bien des nombres sans virgule quand que les passes en mode standard ou texte. Et j'ai appliqué un format à toute la colonne, mais ça ne fonctionne pas.

Sinon tant pis, je passe pas par VBA :/ Ce qui est fou c'est qu'à la main en faisant juste remplacer "_" par " ", tout est parfait. Mais ça ne fait pas la même chose avec le code grrrr

Dans tous les cas merci à vous, vous êtes extrêmement réactif !

pl.NumberFormat = "dd/mm/yyyy hh:mm"

et non hh:dd. Je ne sais pas comment j'ai fait mon compte pour mettre dd ?!?

Mais comment ai-je fais pour ne pas voir ça non plus !!!?? Voila, quand on demande de l'aide sur les forums on a tendance à recopier bêtement la solution proposée ahah !

J'ai rectifié et du coup ça fonctionne parfaitement ! Merci bien, je vais du coup adopter cette solution

Merci à vous tous, ma journée va pouvoir reprendre sereinement

Rechercher des sujets similaires à "remplacer caractere change format date"