Vérifier si un fichier existe

Résolu/Fermé
cletess Messages postés 38 Date d'inscription jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018 - 3 avril 2018 à 18:09
cletess Messages postés 38 Date d'inscription jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018 - 5 avril 2018 à 09:24
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 22713 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 22 avril 2024 1 474
3 avril 2018 à 22:10
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 jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018
5 avril 2018 à 09:15
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 jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018
5 avril 2018 à 09:24
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 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
3 avril 2018 à 18:23
If Dir$("NomFichier")="" then N'existe pas.
0
cletess Messages postés 38 Date d'inscription jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018
5 avril 2018 à 09:16
Bonsoir,

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