J'écris un code vba qui censé supprimer les données d'une feuille Excel sélectionnée, ouvrir une boîte de dialogue pour la sélection de fichiers texte, puis importer les données de ce fichier texte dans la même feuille exacte dont j'ai supprimé les données. Jusqu'à présent, je ne peux ouvrir le fichier texte que dans un nouveau classeur, mais je ne peux pas l'ouvrir sur la même feuille dont j'ai supprimé les données. Voici ce que je suis venu jusqu'à présent, j'apprécierai votre aide:
Dim Filt As String
Dim FilterIndex As Integer
Dim Title As String
Dim FileName As Variant
Filt = "Cst Files (*.prn),*.prn"
Title = "Select a cst File to Import"
FileName = Application.GetOpenFilename(FileFilter:=Filt, Title:=Title)
If FileName = False Then
MsgBox "No File Was Selected"
Exit Sub
End If
With Application.ActiveSheet
Cells.Select
Selection.QueryTable.Delete
Selection.ClearContents
End With
Workbooks.Open FileName
Merci!
Il existe de nombreuses façons d'importer un fichier texte dans la feuille actuelle. En voici trois (y compris la méthode que vous utilisez ci-dessus)
Cells.Copy
en utilisant un QueryTable
Voici une macro simple que j'ai enregistrée. Veuillez le modifier en fonction de vos besoins.
Sub Sample()
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Sample.txt", Destination:=Range("$A$1") _
)
.Name = "Sample"
.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)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Ouvrez le fichier texte en mémoire
Sub Sample()
Dim MyData As String, strData() As String
Open "C:\Sample.txt" For Binary As #1
MyData = Space$(LOF(1))
Get #1, , MyData
Close #1
strData() = Split(MyData, vbCrLf)
End Sub
Une fois que vous avez les données dans le tableau, vous pouvez les exporter vers la feuille actuelle.
en utilisant la méthode que vous utilisez déjà
Sub Sample()
Dim wbI As Workbook, wbO As Workbook
Dim wsI As Worksheet
Set wbI = ThisWorkbook
Set wsI = wbI.Sheets("Sheet1") '<~~ Sheet where you want to import
Set wbO = Workbooks.Open("C:\Sample.txt")
wbO.Sheets(1).Cells.Copy wsI.Cells
wbO.Close SaveChanges:=False
End Sub
SUIVI
Vous pouvez utiliser le Application.GetOpenFilename
pour choisir le fichier correspondant. Par exemple...
Sub Sample()
Dim Ret
Ret = Application.GetOpenFilename("Prn Files (*.prn), *.prn")
If Ret <> False Then
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Ret, Destination:=Range("$A$1"))
'~~> Rest of the code
End With
End If
End Sub
vous pouvez écrire .WorkbookConnection.Delete après .Refresh BackgroundQuery: = False cela supprimera la connexion externe du fichier texte.
Je pense ma réponse à ma propre question voici la solution la plus simple à ce que vous essayez de faire:
Sélectionnez la cellule où doit se trouver la première ligne de texte du fichier.
Utilisez le Data
/Get External Data
/From File
boîte de dialogue pour sélectionner le fichier texte à importer.
Formatez le texte importé comme requis.
Dans le Import Data
boîte de dialogue qui s'ouvre, cliquez sur Properties...
Décochez la case Prompt for file name on refresh
boîte.
Chaque fois que le fichier externe change, cliquez sur Data
/Get External Data
/Refresh All
bouton.
Remarque: dans votre cas, vous devriez probablement ignorer l'étape # 5.