web-dev-qa-db-fra.com

macro pour importer un fichier csv dans une feuille de calcul Excel non active

J'ai un classeur Excel activé par macro qui contient plusieurs feuilles de calcul nommées. Une des feuilles de calcul est nommée "panneau" et une deuxième feuille de travail est nommée "données". La feuille nommée "panneau" a un bouton auquel une macro est assignée. Je voudrais sélectionner le bouton de la feuille de calcul nommé "panel" et faire apparaître une fenêtre de recherche de fichier. Une fois que l'utilisateur sélectionne le fichier csv sur son disque dur, je souhaite que le contenu du fichier csv soit importé dans la feuille de calcul nommée "données" à partir de la cellule A1.

PROBLÈME 1: la vba que j'ai assignée au bouton fait que le contenu du fichier csv est placé sur la même feuille de calcul que le bouton (la feuille de calcul "panneau"). Je voudrais que le contenu du fichier csv soit placé sur la feuille "données".

PROBLÈME 2: il existe également une chaîne de code référençant mon disque dur et un fichier appelé "capture.csv". Ainsi, lorsque le fichier Excel activé par macro est sur un autre ordinateur, le fichier se bloque. Un moyen de supprimer la chaîne de chemin d'accès afin que n'importe quel ordinateur puisse utiliser le fichier?

Toute aide pour résoudre ce problème serait grandement appréciée. La macro assignée au bouton suit:

Sub load_csv()
Dim fStr As String
With Application.FileDialog(msoFileDialogFilePicker)
.Show
If .SelectedItems.Count = 0 Then
MsgBox "Cancel Selected"
End
End If
'fStr is the file path and name of the file you selected.
fStr = .SelectedItems(1)
End With
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Users\laptop\Desktop\CAPTURE.csv", Destination:=Range("$A$1"))
.Name = "CAPTURE"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
MsgBox fStr
End With
End Sub
8
George

Est-ce ce que vous essayez?

Sub load_csv()
    Dim fStr As String

    With Application.FileDialog(msoFileDialogFilePicker)
        .Show
        If .SelectedItems.Count = 0 Then
            MsgBox "Cancel Selected"
            Exit Sub
        End If
        'fStr is the file path and name of the file you selected.
        fStr = .SelectedItems(1)
    End With

    With ThisWorkbook.Sheets("Data").QueryTables.Add(Connection:= _
    "TEXT;" & fStr, Destination:=Range("$A$1"))
        .Name = "CAPTURE"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False

    End With
End Sub
12
Siddharth Rout

Pour Excel sur Mac, il semble que l'objet QueryTable ne prenne pas en charge les propriétés "PreserveFormatting" et "RefreshPeriod" et vous générera une erreur d'exécution si vous essayez de les définir.

En outre, Application.FileDialog ne fonctionne pas non plus avec Mac, mais cela est traité dans d'autres publications.

Pour Mac:

Sub load_csv()
Dim fStr As String

fStr = "Macintosh HD:Users:anthony:Documents:example.csv" 'Keeping file String simple for example.

With ThisWorkbook.Sheets("Data").QueryTables.Add(Connection:= _
"TEXT;" & fStr, Destination:=Range("$A$1"))
    .Name = "CAPTURE"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    '.PreserveFormatting = True  **commented out for Mac
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    '.RefreshPeriod = 0  **commented out for Mac
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 437
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False

End With
End Sub
0
user2947053