Import Fichier CSV dans Excel

Bonjour à tous,

J'ai épluché google et internet pour essayer de trouver une solution à mon problème, mais rien ne me satisfait vraiment. Je vous expose mon problème, je télécharge via mon site internet un fichier CSV encodé en UTF-8 qui a pour but d'être importé sur excel, et ensuite être transmis à diverses personnes. Comme je ne serai pas le seul à utiliser cet outil, je souhaiterai faire une macro VBA afin d'importer en un clic le contenu du CSV dans un beau tableau excel. La solution du power query est intéressante mais d'une part je n'ai pas réussi à renseigner le fichier en dynamique via une dialogBox par exemple, et ensuite je ne sais pas si tous les utilisateurs auront une version d'excel assez récente pour utiliser power query.

Dans un premier temps, j'ai trouvé une solution qui marchait à 90%, le seul problème étant l'encodage en UTF8 pas pris en compte, et donc des accents transformés en caractères spéciaux. Voici le code en question :

Sub importCSV()
    Dim dialogBox As fileDialog
    Set dialogBox = Application.fileDialog(msoFileDialogFilePicker)
    Dim selectedFile As String

With dialogBox    
        .Filters.Add "CSV", "*.csv", 1
        .AllowMultiSelect = False       
        If .Show = True Then
            selectedFile = .SelectedItems(1)
        End If       
    End With

If selectedFile <> "" Then
        Open selectedFile For Input As #1        
            Dim rowNumber As Long
            Dim lineFromFile As String
            Dim lineItems As Variant 'array of string
            Dim itteration As Integer           
            rowNumber = 1      

            Do Until EOF(1) 'false till end of file is reache then it will turn true            
                Line Input #1, lineFromFile ' reads a single line from an open sequential file
                lineItems = Split(lineFromFile, ",")                
                For itteration = 0 To 4
                    Range("ImportRange").Cells(rowNumber, itteration + 1) = lineItems(itteration)
                Next
                rowNumber = rowNumber + 1                
            Loop           
        Close #1
    Rows(3).EntireRow.Delete
    End If
End Sub

Comme dit, j'ai ensuite testé de passer avec power query, mais sans succès.

Je vous joins un ficher CSV (ils auront tous le même format, juste pas le même nombre de lignes) ainsi que le fichier excel dans lequel j'aimerai récupérer mes données.

Merci d'avance pour votre aide

26licences-20-09-2021.csv (518.00 Octets)

Bonjour à tous !

Je vous livre un début de piste avec...... Power Query !

L'emplacement du fichier CSV des licences est à indiquer dans la feuille "Param".

Ensuite une simple actualisation, en cas de besoin, vous donnera les informations rafraîchies.

Bonjour @JFL,

Merci pour votre réponse, cela fonctionnerai bien, mais comme annoncé, j'aimerai si possible me passer de power query, car je ne suis pas certain que toutes les personnes sauront l'utiliser, ou bien y auront accès sur leur machine.

Bonjour de nouveau !

mais ......, j'aimerai si possible me passer de power query, car je ne suis pas certain que toutes les personnes sauront l'utiliser, ou bien y auront accès sur leur machine.

J'entends, et je comprends, votre crainte.

Sachez toutefois, que l'outil est disponible pour les versions Excel à compter de .....2010 ! (Complément à télécharger pour Excel 2010 et 2013) (Intégré nativement depuis Excel 2016)

Quant à la facilité d'utilisation, ce sera tout aussi transparent qu'une solution VBA.

Le fait est, qu'il peut y avoir plusieurs fichiers .csv par jour.
Je suppose que je peux changer le chemin du fichier via une dialogBox en VBA, ainsi que faire l'actualisation dans le même script ?

Si la structure du fichier CSV est stable alors oui, une simple actualisation suffira pour le peu que votre fichier CSV soit cumulatif.

Merci JFL, j'ai fini par avoir quelque chose qui me va très bien, avec le code suivant :

Sub Rectangle1_Cliquer()
'
' Rectangle1_Cliquer Macro
'
'
    Dim dialogBox As FileDialog
    Set dialogBox = Application.FileDialog(msoFileDialogFilePicker)
    Dim selectedFile As String

    With dialogBox
        .Filters.Add "CSV", "*.csv", 1
        .AllowMultiSelect = False
        If .Show = True Then
            selectedFile = .SelectedItems(1)
        End If
    End With
    Worksheets("param").Range("B1").Value = selectedFile
    Application.Goto (ActiveWorkbook.Sheets("Tableau").Range("B3"))
    ActiveWorkbook.RefreshAll

End Sub

Je peux bien sélectionner le fichier que je vois, et cela met à jour le tableau directement. Tout ceci fonctionne au top sur mon pc, mais forcément sur mac ça coince, vous savez si il y a un moyen de faire tourner un script suivant le type de machine (windows/mac) et une façon équivalente d'ouvrir le finder du mac pour sélectionner le .csv à utiliser ?

Merci d'avance pour votre grande aide

vous savez si il y a un moyen de faire tourner un script suivant le type de machine (windows/mac) et une façon équivalente d'ouvrir le finder du mac pour sélectionner le .csv à utiliser ?

Désolé mais je suis, hélas, totalement incompétent pour cette partie "mac".

Bonjour

Je peux bien sélectionner le fichier que je vois, et cela met à jour le tableau directement. Tout ceci fonctionne au top sur mon pc, mais forcément sur mac ça coince, vous savez si il y a un moyen de faire tourner un script suivant le type de machine (windows/mac) et une façon équivalente d'ouvrir le finder du mac pour sélectionner le .csv à utiliser ?

Je m'insère dans ce fil pour votre question avec MAC. Pas sûr sans connaitre votre version MAC mais essayez avec ce code

Sub Rectangle1_Cliquer()
Dim Fichier As Variant
Dim wb As Workbook

    Fichier = Application.GetOpenFilename("CSV FIles(*.csv),*.csv")
    If Fichier = False Then
        Exit Sub
    Else: Set wb = Workbooks.Open(Fichier)
    End If
End Sub

Cordialement

Rechercher des sujets similaires à "import fichier csv"