VBA - Problème de lecture du CSV

Bonjour,

Je me permets aujourd'hui de vous écrire car j'effectue actuellement un fichier me permettant d'analyser deux données provenant de deux sources différentes.

Pour cela, j'ai créé deux boutons qui me permettent d'aller chercher mes fichiers CSV, ils sont nommés IRL et SIM.

J'ai aucun problème pour aller chercher ma donnée IRL qui fonctionnent parfaitement bien. Mais j'ai toujours une erreur sur mon bouton SIM. Il s'avère que le code est le même, je l'ai juste adapté pour SIM car beaucoup plus de colonnes dans le CSV...

Est-ce qu'une personne fort sympathique pourrait vérifier mon code VBA ? Vous trouverez mes deux CSV ci-dessous ainsi que les deux codes des deux boutons :

IRL :

Sub IRLimportCSV()
    Dim dialogbox As FileDialog
    Dim selectedfile As String
    Set dialogbox = Application.FileDialog(msoFileDialogFilePicker)

    With dialogbox
        .Filters.Add "CSV", "*.CSV", 1
        .AllowMultiSelect = False

        If .Show = True Then
            selectedfile = .SelectedItems(1)
        End If
        Debug.Print selectedfile

    End With

    If selectedfile <> "" Then
        Open selectedfile For Input As #1
            Dim rownumber As Long
            Dim linefromfile As String
            Dim lineitems As Variant
            Dim itteration As Integer

            rownumber = 1

            Do Until EOF(1)
                Line Input #1, linefromfile
                lineitems = Split(linefromfile, ";")

                For itteration = 0 To 7
                    Range("IRLDataImport").Cells(rownumber, itteration + 1) = lineitems(itteration)
                Next

                rownumber = rownumber + 1

            Loop

        Close #1

    End If

End Sub

SIM :

Sub SIMimportCSV()
    Dim dialogbox As FileDialog
    Dim selectedfile As String
    Set dialogbox = Application.FileDialog(msoFileDialogFilePicker)

    With dialogbox
        .Filters.Add "CSV", "*.CSV", 1
        .AllowMultiSelect = False

        If .Show = True Then
            selectedfile = .SelectedItems(1)
        End If
        Debug.Print selectedfile

    End With

    If selectedfile <> "" Then
        Open selectedfile For Input As #2
            Dim rownumber As Long
            Dim linefromfile As String
            Dim lineitems As Variant
            Dim itteration As Integer

            rownumber = 1

            Do Until EOF(2)
                Line Input #2, linefromfile
                lineitems = Split(linefromfile, ";")

                For itteration = 0 To 170
                    Range("SIMDataImport").Cells(rownumber, itteration + 1) = lineitems(itteration)
                Next

                rownumber = rownumber + 1

            Loop

        Close #2

    End If

End Sub

En vous remerciant!...

7irl.zip (210.58 Ko)
8sim.zip (99.87 Ko)

Bonjour à tous !

Et....

Si VBA n'est pas une obligation indépassable, une proposition via Power Query (une ligne de code pour le chargement....) :

Note : Pour alléger le fichier je n'ai conservé que les 1000 premières lignes du fichier Irl.csv (la ligne de commande devra être supprimée.)

Bonjour,

Du même avis que JFL mais pour la boulette :

Tu as 169 valeur par ligne csv "Sim" donc

For itteration = 0 To 168
'et pas to 170
image

A+

bonjour, pour la même boulette ...

Sub IRLimportCSV()
     Dim dialogbox As FileDialog
     Dim selectedfile As String

     Set dialogbox = Application.FileDialog(msoFileDialogFilePicker)
     With dialogbox
          .Filters.Add "CSV", "*.CSV", 1
          .AllowMultiSelect = False

          If .Show = True Then
               selectedfile = .SelectedItems(1)
          End If
Debug.Print selectedfile
     End With

     If selectedfile <> "" Then
          Open selectedfile For Input As #1
          mydata = Input$(LOF(1), 1)
          Close #1
          strdata = Split(mydata, vbCrLf)
          For i = 0 To UBound(strdata)
               If Len(strdata(i)) Then
                    sp = Split(strdata(i), ";")
                    'Range("IRLDataImport").Cells(i + 1, 1).Resize(, UBound(sp) + 1).Value = sp     'soit complètement
                    Range("IRLDataImport").Cells(i + 1, 1).Resize(, Application.Min(8, UBound(sp) + 1)).Value = sp     'soit seulement 8 colonnes
               End If
          Next
     End If
End Sub

Merci à tous pour vos réponses, le souci venait que j'avais mal configuré le nombre de colonne !

Merci à vous tous

Rechercher des sujets similaires à "vba probleme lecture csv"