Import csv => Excel avec

Bonjour,

Je dois importer un fichier csv vers excel (2007).

Mon fichier csv est délimité par une vertical line => "|".

De plus, j'aimerais que l'utilisateur puisse chercher le fichier csv dans le dossier qu'il souhaite (du genre parcourir).

Aujourd'hui j'utilise le convertisseur de données d'excel mais voila c'est long quand je dois importer une vingtaine/trentaine de fichiers...

Pour importer le fichier j'ai trouvé ça mais il est utile que pour les délimiteurs ;.....

Sub a_IMPORT_FICHIERCSV()

NomFic = Application.GetOpenFilename(, , "programmes Presses")

If NomFic <> False Then

Workbooks.OpenText Filename:=NomFic, DataType:=1, Semicolon:=True, local:=True

End If

End Sub

Avec l'enregistreur de macro je retrouve ça:

Sub ImportFichierCSV()

With ActiveSheet.QueryTables.Add(Connection:= _

"TEXT;le chemin du csv", Destination:=Range("$A$1"))

.Name = "Pictrel_145-2016-19"

.FieldNames = True

.RowNumbers = False

.FillAdjacentFormulas = False

.PreserveFormatting = True

.RefreshOnFileOpen = False

.RefreshStyle = xlInsertDeleteCells

.SavePassword = False

.SaveData = True

.AdjustColumnWidth = True

.RefreshPeriod = 0

.TextFilePromptOnRefresh = False

.TextFilePlatform = 1252

.TextFileStartRow = 1

.TextFileParseType = xlDelimited

.TextFileTextQualifier = xlTextQualifierDoubleQuote

.TextFileConsecutiveDelimiter = False

.TextFileTabDelimiter = True

.TextFileSemicolonDelimiter = False

.TextFileCommaDelimiter = False

.TextFileSpaceDelimiter = False

.TextFileOtherDelimiter = "|"

.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _

1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _

, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

.TextFileTrailingMinusNumbers = True

.Refresh BackgroundQuery:=False

End With

End Sub

Pouvez-vous m'aider svp?

Je vous remercie

Cordialement,

Bonjour Monkey D Cyril,

As-tu essayé de retourner le problème?

Piste 1:

Remplacer tes délimiteurs "|" par d'autres délimiteurs, et ensuite faire l'importation (en faisant l'hypothèse que le délimiteur soit ton problème)

Piste 2:

Lire via VBA ligne par ligne les données, et utiliser la fonction "split"

Dim uneLigne as String
uneLigne = ...... ' lecture de la ième ligne de ton fichier texte
Dim data as Variant
data = Split(uneLigne,"|")
for x = lbound(data,1) to ubound(data,1)
cells(numLigne,x+1).Value = data(x)
next x

Bonjour d3d9x,

Je te remercie de ta réponse rapide!

Piste 1:

Comme je l'avais précisé, je convertissais les données directement sur excel mais maintenant je souhaite qu'il le fasse automatiquement.

J'ai trouvé ça mais aucun changement:

Sub test2()

NomFic = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")

If NomFic <> False Then

Workbooks.OpenText Filename:=NomFic, Origin:=xlWindows, _

StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _

ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1), 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), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array( _

25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), _

Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1), Array(36, 1), Array(37, 1), Array( _

38, 1), Array(39, 1), Array(40, 1), Array(41, 1), Array(42, 1), Array(43, 1), Array(44, 1), _

Array(45, 1), Array(46, 1), Array(47, 1), Array(48, 1), Array(49, 1), Array(50, 1), Array( _

51, 1), Array(52, 1), Array(53, 1), Array(54, 1), Array(55, 1), Array(56, 1), Array(57, 1), _

Array(58, 1), Array(59, 1), Array(60, 1), Array(61, 1), Array(62, 1), Array(63, 1), Array( _

64, 1), Array(65, 1), Array(66, 1), Array(67, 1), Array(68, 1), Array(69, 1), Array(70, 1), _

Array(71, 1), Array(72, 1), Array(73, 1)), TrailingMinusNumbers:=True

End If

End Sub

Piste2:

Je n'ai pas compris par quoi j'initialisais "uneLigne"..

Mon fichier comprend des données confidentielles.. sinon je te l'aurai montré.

Je l'ouvre sur excel et toutes les colonnes se retrouvent dans la première.

Il se compose de la sorte:

Centre|Destinataire|Site|Technicien|Date|Fournisseur|.....

et sur 6000 lignes.

Je te remercie encore pour ta réponse et m'excuse de ne pas t'avoir compris..

Bonjour,

une manière de faire,

Sub test2()
    NomFic = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
    If NomFic <> False Then
        Workbooks.OpenText Filename:=NomFic, Origin:=xlWindows
    End If
    Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
                                 TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
                                 Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
                                                                                            :="|", TrailingMinusNumbers:=True
End Sub

Re,

J'ai enfin trouvé un code qui répond à marche!

Pouvez-vous me dire s'il est correct svp?

Sub a_IMPORT_FICHIERCSV()

NomFic = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv") 'cherche dans les documents le fichier csv

If NomFic <> False Then

Workbooks.OpenText Filename:=NomFic, DataType:=1, Tab:=True, local:=True 'l'ouvre sur excel

End If

Columns("A:A").Select

Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ 'convertit la colonne A de csv à xslx

TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _

Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _

:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True

End Sub

Je te remercie du temps que tu as pris pour moi d3d9x !

Cordialement

PS: je mettrai résolu d'ici peu si je n'ai aucun retour


Bonjour H2so4,

J'ai commenté en même temps que toi, je te remercie encore

Cordialement,

Voilà ma proposition. Je t'invite à faire un premier test en spécifiant à la main le répertoire du fichier. Si cela fonctionne, il te suffira de remplacer ce repertoire par un paramètre dans la procédure.

'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'ATTENTION CE PROGRAMME NECESSITE LACTIVATION DE LA REFERENCE A "Microsoft Scripting Runtime"

Sub proposition()
Dim file As String
Set fs = New Scripting.FileSystemObject

'------------------- répertoire du fichier --------------
Dim repertoireFichier As String
repertoireFichier = "C:\Users\TOTO\Desktop\data.txt"
'-------------------                       --------------

Set a = fs.OpenTextFile(repertoireFichier, IOMode.ForReading)
'data contiendra une ligne de données
'numLigne contiendra le numéro de la ligne où écrire les données
'contenu contiendra un tableau. Chaque case de ce tableau représente la donnée d'une colonne (pour la ligne actuellement traitée)

Dim data As String, numLigne As Integer, contenu As Variant, i As Integer
'on écrit nos données dès la première ligne de notre feuille excel
numLigne = 1

'tant qu'on est pas arrivé à la fin du fichier
Do While Not a.AtEndOfStream
    'on lit une ligne
    data = a.ReadLine
    'on découpe les informations par "|"
    contenu = Split(data, "|")
    'on écrit ces informations dans la feuille excel
    For i = LBound(contenu, 1) To UBound(contenu, 1)
        'Remarque: le IIF permet d'éviter d'écrire dans la cellule ligne "numLigne" et colonne 0 (ce qui n'aurait pas de sens)
        Cells(numLigne, IIf(LBound(contenu, 1) = 0, i + 1, i)).Value = contenu(i)
    Next i
Loop
'fermeture du fichier
a.Close
End Sub
Rechercher des sujets similaires à "import csv"