RESOLU Comme l'indiquait @ z32a7ul, j'utilisais la mauvaise variable pour indiquer le chemin après le FileDialog. C'était censé être OutPathS au lieu de OutPath.Entrée utilisateur FileDialog vers chemin d'accès pour les fichiers sources dans VBA
Quel code fait: J'ai un code qui lit les fichiers dans un dossier, imprime les noms dans le classeur actif, et met ensuite les noms dans l'ordre croissant.
OBS1: J'ai suit les codes qui utilisent ces informations pour les calculs, mais cette partie ne concerne pas le problème actuel. J'essaie de créer un FileDialog afin que l'utilisateur puisse entrer le dossier dans lequel sont les fichiers source.
Problème: Je crée un code pour cela, mais pour une raison quelconque, il ne lit pas les fichiers source, même si le format est le même. Si je supprime cette entrée utilisateur et que je "code" l'adresse des sources (en supposant que mon classeur se trouve dans le même dossier qu'eux), tout fonctionne correctement. Mais alors je suis limité à l'endroit où je peux placer ce cahier de travail "rassembleur".
Question: Je n'obtiens aucune ligne d'erreur spécifique. Le résultat est le problème, car il ne trouve pas les fichiers source. Est-ce que quelqu'un a une idée sur ce qu'il faut faire ici?
code:
Option Explicit
Public path As String
Sub Counter()
Dim count As Integer, i As Long, var As Integer
Dim ws As Worksheet
Dim w As Workbook
Dim Filename As String
Dim FileTypeUserForm As UserForm
Dim X As String
Dim varResult As Variant
Dim OutPath As String, OutPathS As String, wPos As Long
Set w = ThisWorkbook
Application.Calculation = xlCalculationManual
'source input by user
varResult = Application.GetSaveAsFilename(FileFilter:="Comma Separated Values Files" & "(*.csv), *.csv", Title:="OutPath", InitialFileName:="D:StartingPath")
If varResult <> False Then
OutPath = varResult
w.Worksheets("FILES").Cells(1, 4) = varResult
Else
Exit Sub
End If
wPos = InStr(OutPath, "\StartingPath")
OutPathS = Mid(OutPath, 1, wPos - 1)
**'MY ERROR IS HERE, It has to be OutpathS:
path = OutPath & "\*.*" 'this should be: path = OutPathS & "\*.*"**
Filename = Dir(path)
ThisWorkbook.Sheets("FILES").Range("A:A").ClearContents
X = GetValue
If X = "EndProcess" Then Exit Sub
Set ws = ThisWorkbook.Sheets("FILES")
i = 0
Do While Filename <> ""
var = InStr(Filename, X)
If var <> 0 Then
i = i + 1
ws.Cells(i + 1, 1) = Filename
Filename = Dir()
Else: Filename = Dir()
End If
Loop
Range("A2:A" & i).Sort key1:=Range("A2"), order1:=xlAscending, Header:=xlNo 'this will sort the names directly in the "FILES" sheet
Application.Calculation = xlCalculationAutomatic
ws.Cells(1, 2) = i
MsgBox i & " : files found in folder"
End Sub
Function GetValue()
With FileTypeUserForm
.Show
GetValue = .Tag
End With
Unload FileTypeUserForm
End Function
OBS2: Il y a une variable publique, car il va être utilisé dans une macro ultérieure, pour les calculs.
Obs3: La partie entière de filedialog est juste pour trouver le chemin où les fichiers sources sont. Ça ne sauve rien.
Pouvez-vous essayer ceci: 'varResult = Application.GetSaveAsFilename (FileFilter: = "Valeurs séparées par des virgules (*. Csv), * .csv") ' – Vityata
N'y a-t-il pas un \ de InitialFileName? Ne devrait-il pas être "D: \ StartingPath" au lieu de "D: StartingPath"? – z32a7ul
Vous sauvegardez le résultat de Mid à OutPathS mais calculez le chemin à partir de OutPath (sans S). – z32a7ul