1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
Sub Test()
Dim Cls As Workbook
Dim Fichier As String
Dim Ligne As String
Dim Tbl()
Dim I As Long
Dim NbCol
Dim Pos As Long
Const Sep As String = ";"
'permet le choix d'un fichier csv seulement...
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Add "Fichiers csv", "*.csv", 1
.Show
'si choix effectué
If .SelectedItems.Count = 1 Then
Fichier = .SelectedItems(1)
'si pas de choix, fin !
Else
MsgBox "Aucun fichier '.csv' choisi, fin de procédure !"
Exit Sub
End If
End With
If InStr(Fichier, "Modifié") = 0 Then
'ouvre le fichier pour lecture...
Open Fichier For Input As #1
Do While Not EOF(1)
Line Input #1, Ligne
'recherche le dernier dièse
Pos = InStrRev(Ligne, "#")
'supprime tout ce qui se trouve avant
Ligne = Mid(Ligne, Pos, Len(Ligne) - Pos)
Loop
'referme
Close #1
'modifie le nom du fichier afin de ne pas refaire cette partie du code
'ce qui a poue effet de créer un nouveau fichier laissant l'original intact
Fichier = Left(Fichier, InStrRev(Fichier, ".") - 1) & " Modifié.csv"
'réouvre pour écriture...
Open Fichier For Output As #1
Print #1, Ligne
'referme à nouveau
Close #1
'l'ouvre avec Excel puis l'enregistre en csv et le referme
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Cls = Workbooks.Open(Fichier)
Cls.Save
Cls.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End If
'maintenant, récup de la colonne voulue :
'ouvre le fichier pour compter le nombre de colonnes...
Open Fichier For Input As #1
Line Input #1, Ligne
'demande le numéro de la colonne à importer
NbCol = InputBox("Le fichier '" & Dir(Fichier) & "' contient " & UBound(Split(Ligne, Sep)) + 1 & " colonne(s) !" & vbCrLf & _
"quel est le numéro de la colonne à importer ?", _
"Choix colonne.", 1)
'referme le fichier...
Close #1
'si non numérique, fin !
If Not IsNumeric(NbCol) Then
MsgBox "Seulement numérique !"
Exit Sub
End If
'puis le réouvre afin de revenir au début !
Open Fichier For Input As #1
'parcour le fichier
Do While Not EOF(1)
'récup de chaque ligne
Line Input #1, Ligne
'suppression d'éventuels espaces
Ligne = Replace(Ligne, """", "")
'stocke dans un tableau seulement les valeurs contenues dans la colonne choisie
I = I + 1
ReDim Preserve Tbl(1 To I)
Tbl(I) = Split(Ligne, Sep)(NbCol - 1)
Loop
'fermeture
Close #1
'résultat en colonne A de la feuille active
ActiveSheet.Range(Cells(1, 1), Cells(UBound(Tbl), 1)) = Application.Transpose(Tbl)
End Sub |