Je crois avoir un problème unique car je n'ai rien vu de tel sur Internet. Je suis un analyste d'affaires/développeur d'applications et je veux recueillir automatiquement les données du fichier Excel CSV d'un autre utilisateur sur leur ordinateur personnel sans ouvrir le fichier et les perturber. Y a-t-il un moyen?VBA Copie de données d'un fichier CSV non ouvert vers la feuille de calcul sans ouvrir le fichier CSV fermé
Voici le code que j'ai jusqu'à présent:
Option Explicit
Dim MyDocuments As String, strFileName, myToday, origWorkbook, origWorksheet, strConnection
Dim row As Integer
Private Sub btnStart_Click()
MyDocuments = Environ$("USERPROFILE") & "\My Documents"
myToday = Format(Date, "mmddyy")
strFileName = "DataFile" & myToday & ".csv"
strConnection = "TEXT;" & MyDocuments & "\DataFolder\" & strFileName
origWorksheet = "DataFile" & myToday
row = 1
On Error Resume Next
row = Range("A1").End(xlDown).row + 1
With ActiveSheet.QueryTables.Add(Connection:=strConnection, Destination:=Range("$A$" & row))
.Name = "temp"
.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 = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Comme je l'ai dit, je ne veux pas le fichier CSV à ouvrir pendant qu'ils travaillent. Je voudrais que ce soit dans les coulisses afin qu'ils puissent continuer à travailler pendant que nous recueillons les données.
Je suppose que mon plus gros problème est que c'est un fichier CSV, ou que le fichier n'est pas ouvert. S'il y a un moyen de le faire, s'il vous plaît faites le moi savoir. Actuellement, je reçois une erreur hors plage.
Lorsque je lance votre code, il l'imprime sur la ligne suivante ... – chancea
Est-ce que ce serait un réglage de quelques sortes? Peut-être dans Excel? Chaque fois que je lance le programme, il place les données dans la colonne suivante. – Lou
existe-t-il des données dans la colonne A de votre fichier CSV? Je viens de réaliser que si votre première colonne est vide alors aucune donnée ne sera copiée dans Excel et l'instruction 'row = Range (" A1 "). End (xlDown) .row + 1' ne fonctionnera pas et la variable de ligne restera égale Changez le 'Plage (" A1 ")' à une colonne que vous savez que les données seront copiées afin qu'il compte les lignes jusqu'à la ligne suivante – chancea