XL 2019 Récuper une partie de cellule en VBA

bambi

XLDnaute Occasionnel
Bonjour à tous

Je reviens vers vous pour une demande d'aide VBA

J'ai des cellules dans ce format
03 12 2021 14:31:55

Je voudrais les transformer avec le VBA pour récupérer la date puis l'heure
et

Le formatage ne suffit pas car je suis susceptible de récuperer ces valeurs dans une feuille de filtre
Et le formatage ne fait que masquer les données donc mes filtres ne marchent plus

Donc j'ai besoin de réellement transformer (ou extraire) sous les deux formats date seule et heure seule

Merci d'avance ;)
 

mbmb

XLDnaute Nouveau
A adapter au besoin, mais sur le principe :

VB:
Sub Macro1()
Dim MyDate As String
Dim MyTime As String

MyDate = VBA.Left(Range("A1"), 10)
MyTime = VBA.Right(Range("A1"), 8)

MsgBox ("Date : <" & MyDate & "> / Heure = <" & MyTime & ">")

End Sub
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour bambi, le fil,

ouvre le fichier ci-joint, et fais Ctrl e :)

VB:
Sub Essai()
  [B1].NumberFormat = "dd mm yyyy"
  [B1] = DateSerial(Year([A1]), Month([A1]), Day([A1]))
  [B2].NumberFormat = "hh:mm:ss"
  [B2] = TimeSerial(Hour([A1]), Minute([A1]), Second([A1]))
End Sub

soan
 

Pièces jointes

  • Exo Bambi.xlsm
    13.4 KB · Affichages: 5

bambi

XLDnaute Occasionnel
Merci à vous trois pour vos propositions
Je complète ma demande avec un fichier
La date a modifier est en colonne A
Les heures
sont en colonnes E et G
J'ai mis 4 lignes mais dans l'absolu, je ne sais jamais combien je vais avoir de lignes à traiter
Merci d'avance
 

Pièces jointes

  • données.xlsm
    12.5 KB · Affichages: 3

soan

XLDnaute Barbatruc
Inactif
Bonjour bambi,

ton fichier en retour. :)

fais Ctrl e ➯ travail effectué ; code VBA :

VB:
Option Explicit

Sub Essai()
  Dim dlg&, lig&: dlg = Cells(Rows.Count, 1).End(3).Row
  [A1].Resize(dlg).NumberFormat = "dd mm yyyy"
  [E1].Resize(dlg).NumberFormat = "hh:mm:ss"
  [G1].Resize(dlg).NumberFormat = "hh:mm:ss"
  For lig = 1 To dlg
    With Cells(lig, 1)
      If .Value <> "" Then
        .Value = DateSerial(Year(.Value), Month(.Value), Day(.Value))
        With .Offset(, 4)
          If .Value <> "" Then .Value = TimeSerial(Hour(.Value), Minute(.Value), Second(.Value))
        End With
        With .Offset(, 6)
          If .Value <> "" Then .Value = TimeSerial(Hour(.Value), Minute(.Value), Second(.Value))
        End With
      End If
    End With
  Next lig
End Sub

soan
 

Pièces jointes

  • données.xlsm
    19.4 KB · Affichages: 7

Discussions similaires