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

Microsoft 365 Conversion date et heure en vu d'un export en csv

  • Initiateur de la discussion Initiateur de la discussion ivan27
  • Date de début Date de début

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 !

ivan27

XLDnaute Occasionnel
Bonjour à tous,

J'ai un problème sur un sujet pour lequel j'ai probablement la réponse sous le nez sans la voir !
Je souhaite convertir des dates et heures sous ces formats :
aaaammjj pour les dates
hhmmss pour les heures
Ca je sais faire mais il y a un problème lors de l'export dans un fichier séquentiel puisque les dates et heures sont exportées dans leur format d'origine (celui qui est visible dans la barre de formule) or je veux exporter dans le nouveau format.
Merci d'avance pour votre aide de préférence en vba.
Bonne fin de journée à tous
Ivan
 

Pièces jointes

Bonjour Ivan,
Un essai en PJ avec les fonctions persos :
Code:
Function ConvertD(Chaine)
    T = Split(Chaine, "/")
    For i = UBound(T) To 0 Step -1
        ConvertD = ConvertD & CStr(T(i))
    Next i
End Function
Function ConvertH(Chaine)
    T = Split(Format(Chaine, "hh:mm:ss"), ":")
    For i = 0 To UBound(T)
        ConvertH = ConvertH & CStr(T(i))
    Next i
End Function
 

Pièces jointes

Bonjour,

A vue de nez et sans avoir ouvert votre fichier.
VB:
CelluleHeure = Format(Heure,"hhmmss")
CelluleDate = Fromat(Date,"yymmdd")

Mais comment exportez-vous ?

cordialement
 
Bonjour Ivan, Hasco,
Et si vous voulez convertir toute une plage :
VB:
Sub Convertir()
    Application.ScreenUpdating = False
    DL = Range("B65500").End(xlUp).Row
    For Ligne = 2 To DL
        If Cells(Ligne, "B") Like "*/*" Then Cells(Ligne, "B") = ConvertD(Cells(Ligne, "B"))
        If Cells(Ligne, "C") < 1 Then Cells(Ligne, "C") = ConvertH(Cells(Ligne, "C"))
    Next Ligne
    Range("B2:B" & DL).NumberFormat = "General"
    Range("C2:C" & DL).NumberFormat = "000000"
    [B1] = "Après conversion"
End Sub
Voir PJ.
 

Pièces jointes

Rebonsoir,
Merci sylvanu pour cette seconde proposition.
Je viens d'arriver à mes fins avec ta fonction et à obtenir un export csv correct. J'essaierai cette seconde proposition demain matin.
Merci à tous
Ivan
 
Re,
Les deux IF sont important dans le cas où le contenu des cellules ne seraient pas des dates ou des heures.
Les deux NumberFormat permettent de bien avoir le format demandé.
 
Re,
Mais il y a infiniment plus simple comme l'a suggéré Hasco :
VB:
Sub Convertir()
    Application.ScreenUpdating = False
    DL = Range("B65500").End(xlUp).Row
    Range("B2:B" & DL).NumberFormat = "yyyymmdd"
    Range("C2:C" & DL).NumberFormat = "hhmmss"
    [B1] = "Après conversion"
End Sub
 

Pièces jointes

Dernière édition:
Bonjour le forum, sylvanu,
Avec ta dernière proposition, le 1er zéro des heures n'est pas pris en compte dans un export csv.
Par exemple : 08:43:00 après conversion j'ai bien dans la cellule 084300 mais dans la barre de formule j'ai 84300 et c'est cette valeur qui est exportée en csv.
Bien cordialement,
 
Bonjour,
Désolé. Alors utilisez la V3 si elle marche. La V4 était simplement plus rapide et plus "esthétique".
Les exports, comme les imports, sont toujours un peu pointilleux sur les formats, comme les imports qui donnent des nombres sous forme de texte.
 
Bonjour,

Il vous faut inclure le 'PrefixCharacter' des cellules dans la chaîne de texte :
VB:
Sub TrucChouette()
    Dim i As Integer, j As Integer, r As Integer
    Dim Valeurs
 
    With Feuil1.Range("B1").CurrentRegion
        With .Offset(1).Resize(.Rows.Count - 1)
            Valeurs = .Value
            r = UBound(Valeurs)
            For i = 1 To r
                Valeurs(i, 1) = "'" & Format(Valeurs(i, 1), "yyyymmdd")
                Valeurs(i, 2) = "'" & Format(Valeurs(i, 2), "hhmmss")
            Next
            .Value = Valeurs
        End With
    End With

End Sub

N'oubliez pas non plus qu'une cellule a une propriété .Text pour vous donner le texte afficher après formatage :

Si vous avez 12589 (valeur numérique) dans en A1 au format personnalisé : "000000" pour afficher sur 6 caractères avec des zéros en début pour les caractères manquants,

[A1].Value donnera 12589
[A1].Text donnera 012589

Avec 365 vous pouvez également préparer vos lignes par formules :
=JOINDRE.TEXTE(";";FAUX;TEXTE(B2;"aaaammjj");TEXTE(C2;"hhmmss"))

Cordialement
 

Pièces jointes

Dernière édition:
- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…