Import données dans Excel via VBA

Bonjour le Forum,

Je souhaite importer via VBA des données d'un autre classeur via "Getopenfile" mais étant vraiment "une cruche" qui veut apprendre, je poste mon besoin en espérant avoir des retours.

L'idée est d'importer les données des colonnes A à O qui sont dans le fichier CSV ou xls qui se nomme "DOC A IMPORTER" dans le fichier IMPORT.

Les données à importer peuvent aller jusqu’à plus de 45 milles lignes.

Merci d'avance à tous

13doc-a-importer.csv (3.33 Ko)
16fichier-import.xlsx (11.16 Ko)

Bonjour,

voici un premier code à essayer et à adapater.

Pensez à adapater le chemin du fichier .csv

Sub Macro1()
    ActiveWorkbook.Worksheets.Add
    ActiveSheet.Name = "provi"
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\gpetit\Downloads\doc-a-importer.csv", Destination:=Range("$A$1"))          'Chemin à adapter
        '.CommandType = 0
        .Name = "doc-a-importer"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(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
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
    Range("A1:M100000").Select
    Selection.Copy
    Sheets("Feuille d'import").Select
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A2").Select
    Sheets("provi").Select
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.Delete
End Sub

A+

Bonjour,

Une autre proposition réalisée avec Power Query.

Cdlt.

36fabiosus.zip (22.18 Ko)

Bonjour Gabin,

L’idée étant de sélectionner directement le chemin d’accès au fichier à importer et pas de le définir directement dans la Macro.

Jean Eric, je regarde l’option Power Query.

Bien à toi

Bonsoir,

l'option Power query ne me permet pas d'intégrer le fichier dans mon appli global :-(

Help aux contributeurs

Bonjour,

Quel est le souci avec la proposition PQ ?

Cdlt.

Bonjour Jean Eric,

j'ai le message d'erreur suivant :

image

Par ailleurs, j'ai deux fichiers à intégrer et j'aurais souhaité que l'utilisateur puisse choisir via un "Open file" le fichier à intégrer et que le programme récupère uniquement ce dont on a besoin.

J'ai trouvé le code suivant sur une vidéo mais elle ne me permet pas d'y arriver.

Sub importCSV()
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 #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
End If
End Sub

Merci pour ta dispo

Rechercher des sujets similaires à "import donnees via vba"