Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 vba : replace modifie le format

dev_co

XLDnaute Occasionnel
Bonsoir
Je pige pas trop ; je mets du texte formaté comme tel en col A , je désire traiter comme date , donc je remplace le - en / là ça va
ensuite je modifie le "h" en ":" mais là Malheureusement après chaque REPLACE le jour et mois sont inversés ????? je ne trouve pas
j'ai laissé en 'pause' le résultat de A en E c'est l'original
 

Pièces jointes

  • test-repl.xlsm
    15.7 KB · Affichages: 16

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Une possibilité parmi d'autres :

VB:
c.Value = DateValue(Left(c, 8)) + TimeValue(Replace(Right(c, 5), "h", ":"))

Plus court puisque jj-mm-aaaa est un format "officiel" de date (le système reconnait le - comme séparateur de date en plus du séparateur indiqué dans ses options) :

Code:
        c.Value = CDate(Replace(c.Text, "h", ":"))


Et une seule boucle suffit

Et pour aller plus vite si vous avez beaucoup de date à transformer :
Code:
Sub convert()
    Dim t(), i As Integer
    dl = Worksheets("Feuil1").Range("A100").End(xlUp).Row
    t = Range("A1:A" & dl)
    For i = LBound(t) To UBound(t)
        t(i, 1) = CDate(Replace(t(i, 1), "h", ":"))
    Next i
    Range("A1:A" & dl).Value = t
End Sub

Cordialement
 
Dernière édition:

dev_co

XLDnaute Occasionnel
dernier point : je n'arrive pas à retrouver le format d'origine pour les heures en A après le replace et malgré un format d ecellules : jj/mm/aaaa hh:mm ;@ par exemple pour 22/06/2021 16:00 dans la cellule dans la barre de formule on voit 16:00:00 idem si je mets dans une variable car je dois revenir en texte avec 16:00
 

patricktoulon

XLDnaute Barbatruc
re
bonsoir
m'en voulez pas trop je vais continuer a travailler avec le value moi
VB:
Sub test()
[E1] = Format(CDate([A1].Value), "dd-mm-yyyy hh""h""mm")
End Sub
reste plus qu'a vous mettre ça dans une boucle

pour faire l'inverse ben l'astuce est simple
vous replacez et formatez en date inverse
la date atterri dans le bon ordre
Code:
Sub test3()
[e15] = Format(Replace([e14].value, "h", ":"), "mm-dd-yyyy hh:mm")
End Sub
 

dev_co

XLDnaute Occasionnel
?? c'est quoi [e1] , [e15] comment je reformate ma cellule ici de A1 à A7 ? en E c'est juste pour les essais et faire du copier /coller de E en A afin de retrouver les data de base
 

patricktoulon

XLDnaute Barbatruc
re
comme ça
VB:
Sub test3()
    For Each cel In Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).Cells
        cel.NumberFormat = "dd-mm-yyyy hh:mm"
        cel.Value = Format(Replace(cel.Value, "h", ":"), "mm-dd-yyyy hh:mm")
    Next
End Sub
 

dev_co

XLDnaute Occasionnel
Non ,est ce que t'as vu la VRAIE valeur dans fx ligne de formule qui elle donne le bon résultat informatique donc en VBA je récupère 16:00:00 et pas 16:00 ?
j'en ai besoin pour créer une string et comparer 16:00:00 n'est pas égal à 16:00
 

Discussions similaires

Réponses
7
Affichages
529
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…