Import fichier CSV VBA

Bonjour à toutes et à tous,

j'ai un petit soucis avec mon programme et je n'arrive pas à trouver lequel :

Je cherche à importer un fichier csv de manière automatique (cela m'ouvre l'explorateur de fichier et je peux choisir les fichiers en csv avec un filtre)

seulement, depuis que j'ai mis les boutons sur la feuille d'avant et non plus sur la même que les informations à importer, le code ne fonctionne plus... la feuille où se situe les boutons (affecté au code) est "calculs" et la feuille où je souhaite que cela soit implémenter est "résultats".

Voici mon code :

 Option Explicit

Sub Auto_Open() 

    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
    End With
' --------------------------------------------------------------------------------------------------------------------------------------------
      If selectedFile <> "" Then
            Open selectedFile For Input As #2  
                Dim Rownumber As Integer 
                Dim lineFromFile As String 
                Dim lineItems As Variant
                Dim itteration As Integer

                Rownumber = 2 

                Do Until EOF(2) 
                    Line Input #2, lineFromFile 
                    lineItems = Split(lineFromFile, ";") 

                    For itteration = 0 To 22 
                            Range("importRange").Cells(Rownumber, itteration + 1) = lineItems(itteration) 

                        Next
                    Rownumber = Rownumber + 1
                Loop

            Close #1

      End If

End Sub

Merci à tous d'avance pour votre aide ! :)

Bonjour, j'imagine qu'il faut simplement selectionner votre feuille "résultats" en début de macro.

( vous pouvez aussi désactiver le rafraichissement de l'écran pendant l'importation ( screenupdating )

Option Explicit

Sub Auto_Open()
Application.ScreenUpdating = False
With Sheets("résultats").Activate

    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
    End With
' --------------------------------------------------------------------------------------------------------------------------------------------
      If selectedFile <> "" Then
            Open selectedFile For Input As #2
                Dim Rownumber As Integer
                Dim lineFromFile As String
                Dim lineItems As Variant
                Dim itteration As Integer

                Rownumber = 2

                Do Until EOF(2)
                    Line Input #2, lineFromFile
                    lineItems = Split(lineFromFile, ";")

                    For itteration = 0 To 22
                            Range("importRange").Cells(Rownumber, itteration + 1) = lineItems(itteration)

                        Next
                    Rownumber = Rownumber + 1
                Loop

            Close #1

      End If
End With
Application.ScreenUpdating = True
End Sub

Bonjour,

Je l'ai modifié avec votre proposition et quand je l'exécute, cela me donne ça : (cf photo)

C'est la ligne que suit qui bug :

  Range("importRange").Cells(Rownumber, itteration + 1) = lineItems(itteration)
image

Bonjour,
Peux-tu joindre un csv ?
Sinon, tu sembles disposer de Microsoft 365 (version 2203). tu disposes donc d'autres outils, dont Power Query, pour importer ton fichier.
Cdlt.

Bonjour,

Joindre un csv?

Je dois obligatoirement passer par vba...

Bonjour,

Mettre juste un petit point (.) devant le :

.Range("Import...

A+

Bonjour Galopin01,

Ca ne fonctionne toujours pas même en ajoutant le point... :/

image

Je ne sais pas, j'ai juste fait écho à la suggestion de WMenpl et utilisé le With... Pour le reste je ne sais pas tester sans fichier...

A+

Aucun soucis, le voici

le fichier a implanter est celui ci :

4test.csv (1.61 Ko)

Bonjour,
Une proposition.
Cdlt.

Sub Auto_Open()
Dim wbSource As Workbook
Dim dialogBox As FileDialog
Dim selectedFile As String
Dim arr As Variant
Dim lRow As Long

    Application.ScreenUpdating = False

    Set wbSource = ThisWorkbook
    Set dialogBox = Application.FileDialog(msoFileDialogFilePicker)

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

    If selectedFile <> "" Then
        Workbooks.OpenText Filename:=selectedFile, DataType:=xlDelimited, semicolon:=True, local:=True
        arr = ActiveWorkbook.Worksheets(1).Cells(1).CurrentRegion
    End If

    With wbSource.Worksheets("Résultats")
        lRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        .Cells(lRow, 1).Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
    End With

    ActiveWorkbook.Close savechanges:=False

End Sub

Bonjour,

quand je l'exécute, il ne se passe rien .. :/

Oui j'en était à peu près au même résultats que JE

Comme je dis souvent ça ressemble un peu à la chambre de ma fille...

Avec un rel foutoir c'est vrai qu'on va toujours plus vite quand on reprend tout à zéro, parce que si on essaie de corriger l'existant c'est la course à l'échalote... le tonneau des Danaïdes, les poupées russes.

Tu peux essayer avec mon classeur ou ton Range("Import...) est défini en $A$2

A+

Re,
J'ai revu ma proposition pour corriger l'annulation !...
Voir résultat de l'import(en jaune dans le fichier joint).
Cdlt.

Sub Auto_Open()
Dim wbSource As Workbook
Dim dialogBox As FileDialog
Dim selectedFile As String
Dim arr As Variant
Dim lRow As Long

    Application.ScreenUpdating = False

    Set wbSource = ThisWorkbook
    Set dialogBox = Application.FileDialog(msoFileDialogFilePicker)

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

    If selectedFile <> "" Then
        Workbooks.OpenText Filename:=selectedFile, DataType:=xlDelimited, semicolon:=True, local:=True
        arr = ActiveWorkbook.Worksheets(1).Cells(1).CurrentRegion
        With wbSource.Worksheets("Résultats")
            lRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
            .Cells(lRow, 1).Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
            ActiveWorkbook.Close savechanges:=False
        End With
    End If

End Sub

Merci beaucoup pour vos réponses !

Cela fonctionne ! :D

Bonjour,

il me reste une petite question :

Que pourrais-je ajouter au programme pour que celui ci ne bug pas lors de l'import ?

Il y a 4 000 lignes à importer et à chaque fois cela prend un certain temps et le fichier ne répond plus pendant quelques minutes.

Existe t il une fonction qui éviterai cela ?

Cordialement.

Rechercher des sujets similaires à "import fichier csv vba"