XL 2013 Décomposer une Date avec VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 &...
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
 
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...
 
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.
 
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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
331
Réponses
6
Affichages
76
Réponses
4
Affichages
289
Réponses
4
Affichages
148
Retour