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

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

Hasco

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

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

ivan27

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

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,
 

sylvanu

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

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

Discussions similaires

M
Réponses
9
Affichages
751
Maikales
M
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…