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

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 Azerty,
Une idée :
VB:
Sub Décomposition()
    Valeur = Range("F10")   ' A adapter
    Jour = Day(Valeur)
    Mois = Month(Valeur)
    Année = Year(Valeur)
    Heure = TimeValue(Valeur)
End Sub
 
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 :

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
 
Bonjour,
Il n'empêche que cela donne du texte et non une date, donc "Décomposer une Date avec VBA" ne sera pas possible avec ce texte, les codes 63 ne seront pas interprétés correctement.
 
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

Carac est une variable, rien d'autre il extrait un caractère de la chaine.
Envoyez votre "vrai" fichier si pas de données sensibles, il y a plein de raisons pour lesquelles un pb peut surgir.
 
- 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
77
Réponses
4
Affichages
290
Réponses
4
Affichages
151
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…