XL 2016 Conversion d'un fichier csv par VBA sans modification du format date

sasjm37

XLDnaute Junior
Bonjour,
Malgré mes recherches sur les forums, je ne trouve pas la solution à mon problème.
Dans les fichiers de la PJ, mon programme (en partie d'autres auteurs...) ouvre l'explorateur pour intégrer le fichier csv joint. Lors de cette intégration les dates sont transformées (exemple : le 01/04/2021 est transformer en 04/01/2021) et forcement ça m....
Merci de votre aide.
Cordialement.
 

Pièces jointes

  • conversion_csv.zip
    24.8 KB · Affichages: 16
Solution
Bonjour Sasjm,
Un essai en PJ qui semble marcher. A tester, avec simplement :
VB:
Sub integre()
Dim nf$
    nf = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
    If nf <> "" And Right(nf, 3) = "csv" Then
        Workbooks.Open Filename:=nf, Local:=True
        Cells.EntireColumn.AutoFit
        [A1].Select
    End If
End Sub

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Sasjm,
Un essai en PJ qui semble marcher. A tester, avec simplement :
VB:
Sub integre()
Dim nf$
    nf = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
    If nf <> "" And Right(nf, 3) = "csv" Then
        Workbooks.Open Filename:=nf, Local:=True
        Cells.EntireColumn.AutoFit
        [A1].Select
    End If
End Sub
 

Pièces jointes

  • recup_csv_avec_pb_date 2.xlsm
    23.7 KB · Affichages: 4

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, sasjm37, sylvanu

Une autre façon de faire
(correspond à Données/Données externes/Fichier Texte)
Code:
Sub Macro1()
Dim nf$
nf = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & nf, Destination:=Range("$A$1"))
    .Name = "Resa_club"
    .FieldNames = -1: .PreserveFormatting = -1
    .RefreshStyle = xlInsertDeleteCells: .SaveData = -1
    .AdjustColumnWidth = -1: .RefreshPeriod = 0
    .TextFilePlatform = 1252: .TextFileStartRow = 1
    .TextFileParseType = xlDelimited: .TextFileSemicolonDelimiter = -1
    .TextFileColumnDataTypes = Array(1, 4, 4, 1, 4, 4) ' ici formatage des données : 4 = Date JMA
    .Refresh BackgroundQuery:=False
End With
End Sub
Test OK sur le CSV exemple.
 

sasjm37

XLDnaute Junior
Bonjour Sasjm,
Un essai en PJ qui semble marcher. A tester, avec simplement :
VB:
Sub integre()
Dim nf$
    nf = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
    If nf <> "" And Right(nf, 3) = "csv" Then
        Workbooks.Open Filename:=nf, Local:=True
        Cells.EntireColumn.AutoFit
        [A1].Select
    End If
End Sub
Merci sylvanu
C'est beau, c'est simple, ça fonctionne. Je suis admiratif devant ce code si pur.
moi je dis "Respect Monsieur"
Merci encore
 

sasjm37

XLDnaute Junior
Bonsoir le fil, sasjm37, sylvanu

Une autre façon de faire
(correspond à Données/Données externes/Fichier Texte)
Code:
Sub Macro1()
Dim nf$
nf = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & nf, Destination:=Range("$A$1"))
    .Name = "Resa_club"
    .FieldNames = -1: .PreserveFormatting = -1
    .RefreshStyle = xlInsertDeleteCells: .SaveData = -1
    .AdjustColumnWidth = -1: .RefreshPeriod = 0
    .TextFilePlatform = 1252: .TextFileStartRow = 1
    .TextFileParseType = xlDelimited: .TextFileSemicolonDelimiter = -1
    .TextFileColumnDataTypes = Array(1, 4, 4, 1, 4, 4) ' ici formatage des données : 4 = Date JMA
    .Refresh BackgroundQuery:=False
End With
End Sub
Test OK sur le CSV exemple.
Bonjour Staple1600,
Merci d'avoir pris le temps d'étudier mon code et de répondre à ma demande.
Ton code fonctionne correctement, mais il demande beaucoup d'adaptations pour répondre à mon besoin.
En revanche, il est toujours utile d'avoir plusieurs solutions et je vais prendre le temps d'étudier ce code avec attention.
Merci encore
Cordialement
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, sasjm37, sylvanu

Alors, je fais dans l'utile (et dans le fun)
VB:
Sub b()
Workbooks.OpenText "C:\Users\STAPLE\conversion_csv\Resa_club.csv", Local:=-1
ActiveSheet.Cells(1).CurrentRegion.Columns.AutoFit
End Sub
PS: J'ai pas osé reprendre le fit de Sylvanu ;) (déjà que j'avais emprunté son nf)
Maintenant, il est trop tôt pour que je cherche la différence entre la méthode Workbooks.Open et Workbooks.OpenText

Et pour nourrir tes études, une autre possibilité (puisque tu es sous Excel 2016) : PowerQuery
POWERQ.png

NB: L'avantage (selon l'environnement d'exploitation de ton classeur), c'est que passer par Données ou par PowerQuery (donc sans macro) permet d'avoir une requête actualisable.
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou