XL 2013 Décomposer une Date avec VBA

azerty129

XLDnaute Nouveau
Bonjour,
J'aimerais pouvoir décomposer une date avec une macro (sans utiliser de formule excel)
par exemple j'ai dans une cellule : "12/10/2022 20:30"
J'aimerais la diviser avec une colonne jour, mois, années et heure
Merci d'avance de votre aide.
 
Solution
Re,
Si vous ne pouvez garantir que l'entrée est une date vous pouvez essayer ceci sans aucune garantie que cela couvre toutes les possibilités, mais au moins ça marche avec les ex de votre fichier :
VB:
Sub Décomposition()
Dim Cel As Range, Chaine$, V$, i%
Application.ScreenUpdating = False
For Each Cel In Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
    Chaine = ""
    With Cel
        V = .Value
        If Not IsDate(V) Then   ' Si ce n'est pas une date on supprime tout ce qui est différent d'un chiffre ou d'un espace ou de "/" ou ":"
            For i = 1 To Len(V)
                carac = Mid(V, i, 1)
                If IsNumeric(carac) Or carac = " " Or carac = "/" Or carac = ":" Then
                    Chaine = Chaine &...

Cousinhub

XLDnaute Barbatruc
Bonjour,
Il faut adapter le code...
Par exemple :
VB:
Sub Décomposition()
Dim Cel As Range
For Each Cel In Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
    With Cel
        If IsDate(.Value) Then 'A savoir que tout nombre peut être considéré comme une date
            .Offset(, 2) = Day(.Value)
            .Offset(, 3) = Month(.Value)
            .Offset(, 4) = Year(.Value)
            .Offset(, 5) = Format(.Value, "hh:mm")
        End If
    End With
Next Cel
End Sub
Bonne journée
 

Cousinhub

XLDnaute Barbatruc
Re-,
Je ne sais d'où proviennent ces données ressemblant à des dates, mais leur comportement est vraiment bizarre...
Je n'ai pas réussi à les manipuler afin qu'elles se convertissent, même si on veut supprimer un /, il faut 2 appuis sur le bouton de suppression..
Et on dirait qu'il y a un espace à la fin, mais si on veut le supprimer, c'est le dernier chiffre qui est effacé...
Jamais vu ce type de données...
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
L'analyse de la chaine "‎26/‎06/‎2020 ‏‎16:30" est la suivante :
1666275481559.png

Déjà c'est une chaine non une date ( car sinon l'analyse montrerai un nombre ) d'autre part il y a des codes 63 qui ne seront pas interprété comme des espaces.
 

azerty129

XLDnaute Nouveau
Re,
L'analyse de la chaine "‎26/‎06/‎2020 ‏‎16:30" est la suivante :
Regarde la pièce jointe 1152874
Déjà c'est une chaine non une date ( car sinon l'analyse montrerai un nombre ) d'autre part il y a des codes 63 qui ne seront pas interprété comme des espaces.
C'est données son tirer d'un code pour récupérer une date d'une image par rapport a c'est propriété
le code en question :

Dim Tph(), chDph$, nPh$, ph%
chDph = Chemin
nPh = Dir(chDph & "\*.jpg")
Do While nPh <> ""
ph = ph + 1: ReDim Preserve Tph(1, ph)
'Tph(0, ph) = Replace(nPh, ".jpg", "", , , vbTextCompare)
Tph(0, ph) = DPrVue(chDph, nPh)
nPh = Dir()
Loop
'Tph(0, 0) = "Photo":
Tph(0, 0) = "Prise de vue"


With ActiveSheet.Range("n1").Resize(ph + 1)
.Value = WorksheetFunction.Transpose(Tph)
End With
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Si vous ne pouvez garantir que l'entrée est une date vous pouvez essayer ceci sans aucune garantie que cela couvre toutes les possibilités, mais au moins ça marche avec les ex de votre fichier :
VB:
Sub Décomposition()
Dim Cel As Range, Chaine$, V$, i%
Application.ScreenUpdating = False
For Each Cel In Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
    Chaine = ""
    With Cel
        V = .Value
        If Not IsDate(V) Then   ' Si ce n'est pas une date on supprime tout ce qui est différent d'un chiffre ou d'un espace ou de "/" ou ":"
            For i = 1 To Len(V)
                carac = Mid(V, i, 1)
                If IsNumeric(carac) Or carac = " " Or carac = "/" Or carac = ":" Then
                    Chaine = Chaine & carac
                End If
            Next i
        Else
            Chaine = V
        End If
        If IsDate(Chaine) Then 'A savoir que tout nombre peut être considéré comme une date
            .Offset(, 2) = Day(Chaine)
            .Offset(, 3) = Month(Chaine)
            .Offset(, 4) = Year(Chaine)
            .Offset(, 5) = Format(Chaine, "hh:mm")
        End If
    End With
Next Cel
End Sub
 

Pièces jointes

  • Classeur1 (19).xlsm
    18.5 KB · Affichages: 2

Discussions similaires