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

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

  • Conversion.xlsx
    10.4 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Conversion.xlsm
    16.4 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Conversion 2.xlsm
    21.3 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Conversion 4.xlsm
    20.8 KB · Affichages: 0
Dernière édition:

ivan27

XLDnaute Occasionnel
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,
 

Hasco

XLDnaute Barbatruc
Repose en paix
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

  • Conversion (1).xlsm
    26 KB · Affichages: 1
Dernière édition:

Discussions similaires

M
Réponses
9
Affichages
449
Maikales
M

Statistiques des forums

Discussions
311 725
Messages
2 081 945
Membres
101 849
dernier inscrit
florentMIG