Vérifier si un fichier existe

Résolu
cletess Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   -  
cletess Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un document source .xlsx reprenant les noms de toute une série d'autres documents .xlsx en colonne A.
J'ai la macro suivante qui ouvre successivement les fichiers .xlsx pour en extraire les données et les inclure dans le document source.

Cependant, certains noms de fichiers repris dans le document source n'existe pas et j'aimerai que la macro saute les cas concernés et ne traite que les fichiers qui existent réellement dans le répertoire.

Voici, ce que j'ai essayé mais rien ne se passe. Je n'ai pas de messages d'erreur mais la macro ne s'exécute pas. Auriez-vous des indications sur comment contourner ce problème ?

Merci infiniment !

CL

Sub cletess()



Dim objFSO As Object
Dim objFolder As Object
Dim objSubFolder As Object
Dim e As Integer
Dim test As String

Dim wb As Workbook
Dim strFile As String
Dim strDir As String

Dim fdest As Worksheet, fsource As Worksheet
Dim dlig As Long
Dim sfich As String
Dim srow As Range
Dim crit(34) As String
Dim i As Integer
Dim skey, sval, cpath As String

cpath = ThisWorkbook.Path & "\"
Set fdest = ActiveSheet

For e = 1 To 34
    crit(e) = fdest.Cells(1, 33 + e)
Next e

dlig = 2

sfich = fdest.Cells(dlig, 1)
test = cpath & sfich & ".xlsx"


Do While sfich <> ""

    If Len(Dir(test)) = 0 Then
        dlig = dlig + 1
        sfich = fdest.Cells(dlig, 1)
    Else
        Set wb = Workbooks.Open(cpath & sfich & ".xlsx")
        Set fsource = wb.Sheets(1)
        For Each srow In fsource.UsedRange.Rows
            skey = srow.Cells(1, 2)
            sval = srow.Cells(1, 3)
    
            For i = 1 To 34
                If skey = crit(i) Then
                    fdest.Cells(dlig, 33 + i) = sval
                    Exit For
                End If
            Next i
    
        Next srow
        wb.Close
        dlig = dlig + 1
        sfich = fdest.Cells(dlig, 1)
    End If
Loop
End Sub


A voir également:

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonsoir, je pense qu'il faut déplacer l'instruction en ligne 33 vers la ligne 37.
connais-tu la technique d'exécution en pas à pas? je pense que cela t'aidera à comprendre ce que fait ton code.
Débogage de VBA
2
cletess Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour votre réponse ! J'ai utilisé la touche F8 et il semblerait que la boucle If soit tout le temps vrai, je ne passe jamais au Else !
0
cletess Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
C'était tout à fait ça, déplacer l'instruction en ligne 33 vers la ligne 37 a complètement résolu le problème !

Un fois de plus, merci pour votre aide :)
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
If Dir$("NomFichier")="" then N'existe pas.
0
cletess Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir,

Je ne suis pas sur de comprendre, pourriez-vous détailler ? Merci !
0