XL 2019 Format date en VBA

bambi

XLDnaute Occasionnel
Bonjour à tous
Après manipulaton par VBA d'un fichier CSV, j'obtiens des données que je colle dans un classeur
Tout fonctionne, à l'exception du format de date que je ne parviens pas à uniformiser
Je vous met un fichier montrant cellules A1 à A5 le résultat souhaité
Et à la suite ce que j'obtiens
Auriez vous un bout de code VBA simple pour transformer les cellules A6: A10 au format des A1:A5 ?
note: dans le fichier intitial, les données à formater correctement sont dans le range A1:A30 mais j'adapterais lle code moi même si besoin
Merci d'avance
 

Pièces jointes

  • date.xlsm
    9.4 KB · Affichages: 19

Modeste geedee

XLDnaute Barbatruc
Bonjour à tous
Après manipulaton par VBA d'un fichier CSV, j'obtiens des données que je colle dans un classeur
Tout fonctionne, à l'exception du format de date que je ne parviens pas à uniformiser
Je vous met un fichier montrant cellules A1 à A5 le résultat souhaité
Et à la suite ce que j'obtiens
Auriez vous un bout de code VBA simple pour transformer les cellules A6: A10 au format des A1:A5 ?
note: dans le fichier intitial, les données à formater correctement sont dans le range A1:A30 mais j'adapterais lle code moi même si besoin
Merci d'avance
dans le fichier initial (.csv) les dates sont-elles uniformisées... ?
Garbage In, Garbage Out ;)
 

soan

XLDnaute Barbatruc
Inactif
Bonjour bambi,

ton fichier en retour ; fais Ctrl e ➯ travail effectué ! 😊

VB:
Option Explicit

Sub Essai()
  Dim n&: n = Cells(Rows.Count, 1).End(3).Row
  If n = 1 And IsEmpty([A1]) Then Exit Sub
  Dim s$, p As Byte, i&: Application.ScreenUpdating = 0
  [A1].Resize(n).NumberFormat = "dd/mm"
  For i = 1 To n
    With Cells(i, 1)
      p = InStr(.Value, " ")
      If p > 0 Then
        s = .Value
        .Value = DateSerial(Right$(s, 4), _
          Mid$(s, p + 1, 2), Left$(s, p - 1))
      End If
    End With
  Next i
End Sub

si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. ;)



@Modeste geedee (salut) a quand même raison : « Garbage In, Garbage Out » = « poubelle en entrée, poubelle en sortie » ; ça signifie qu'il vaut mieux traiter le problème en amont, afin de pouvoir importer un fichier CSV correct dès le départ ... si toutefois c'est possible de le faire : parfois, on ne peut pas faire autrement si le fichier est fait par une tierce personne ; et si cette tierce personne est un client, c'est peut-être pas évident de lui demander de recommencer son travail. :rolleyes:

soan
 

Pièces jointes

  • date.xlsm
    15.8 KB · Affichages: 5

bambi

XLDnaute Occasionnel
Merci à tous les deux d'avoir répondu

@Modeste geedee
Dans mon fichier csv, les dates sont au format anglais avec heure
Je les retravaille en VBA pour extraire uniquement la date en colonne A
Voir pièce jointe anonymisée

@soan
Effectivement, un simple ctrl e et ça fonctionne très bien
Mais le reste de ma macro initiale, elle, ne fonctionne plus si j'introduis ton bout de code
 

Pièces jointes

  • c1.zip
    210 bytes · Affichages: 7

soan

XLDnaute Barbatruc
Inactif
@bambi (salut cp4)

ah, je croyais que c'était par rapport à ta phrase : « Mais le reste de ma macro initiale, elle, ne fonctionne plus si j'introduis ton bout de code » (mais que tu t'étais trompée de fichier) ; mais si mon bout de code VBA fait que ta macro initiale ne fonctionne plus, il faudrait que tu m'envoies un fichier .xlsm pour que je regarde si je peux faire quelque chose. (c'est sans garantie qu'j'vais trouver une solution)

soan
 

Modeste geedee

XLDnaute Barbatruc
@soan
oui j'ai mis le csv pour répondre à la question de @Modeste geedee
Ouvrir un nouveau Classeur vierge
Fichier > ouvrir
Choisir le fichier que tu aura préalablement dézippé dans un répertoire prévu
type: = .csv
L'assistant de conversion apparait :
1618680675003.png

choisir : délimité

> suivant
1618680746294.png

séparateur : cocher virgule
suivant >
1618680822855.png


Selectionner successivement les colonnes comportant les dates
Préciser à chaque fois le format lu :
JMA
Terminé >

macro enregistrée selon cette proposition :
Sub Macro2()
Workbooks.OpenText Filename:="C:\Users\TonID\Downloads\c1\c1.csv", Origin:= _
65001, StartRow:=9, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=True, _
Space:=False, Other:=False, FieldInfo:=Array(Array(1, 4), Array(2, 1), Array( _
3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10 _
, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), _
Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1)), TrailingMinusNumbers:=True
Columns("B:B").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
End Sub
 

bambi

XLDnaute Occasionnel
Bonjour à vous deux
Je m'aperçois que ma demande sans fichier plus clair ni explicaitons plus simples et/ou plus complètes, ne peux pas aboutir
J'en suis désolée
Il y a beaucoup de données dans mon fichier initial et c'est du coup très complexe pour moi de l'anonymiser
@Modeste geedee a parfaitement raison
"Garbage In, Garbage Out"
Je vais laisser tout cela en stand by pour l'instant et essayer de trouver une autre approche pour résoudre mon problème et parvenir à mes fins "proprement"
Merci encore à vous deux et bon dimanche 👍 ;)
 

patricktoulon

XLDnaute Barbatruc
Bonjour Bonjour
testé sur le csv en exemple
VB:
Sub test()
    Dim cheminCSV, X#, arr, Tbl(), I&, C&
    cheminCSV = ThisWorkbook.Path & "\c1.csv"    'chemin du CSV à adapter
    X = FreeFile: Open cheminCSV For Input As #X: Lines = Input$(LOF(X), #X): Close #X
    arr = Split(Lines, vbCrLf)
    ReDim Tbl(UBound(arr), Columns.Count)
    For I = 0 To UBound(arr)
        t = Split(arr(I), ",")
        For C = 0 To UBound(t)
            Tbl(I, C) = t(C)
            If C = 1 Or C = 3 Then Tbl(I, C) = Format(Left(t(C), 10), "dd/mm/yyyy")
            If C > maxC Then maxC = C
        Next
    Next
    Cells(1, 1).Resize(UBound(Tbl) + 1, maxC + 1) = Tbl
End Sub
 

Discussions similaires