Vérifier si un fichier existe [Résolu/Fermé]

Messages postés
38
Date d'inscription
jeudi 10 janvier 2013
Statut
Membre
Dernière intervention
5 avril 2018
- - Dernière réponse : 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


Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
8896
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 novembre 2019
449
2
Merci
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

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 71231 internautes nous ont dit merci ce mois-ci

cletess
Messages postés
38
Date d'inscription
jeudi 10 janvier 2013
Statut
Membre
Dernière intervention
5 avril 2018
-
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 !
cletess
Messages postés
38
Date d'inscription
jeudi 10 janvier 2013
Statut
Membre
Dernière intervention
5 avril 2018
-
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 :)
Messages postés
14590
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 novembre 2019
183
-1
Merci
If Dir$("NomFichier")="" then N'existe pas.
cletess
Messages postés
38
Date d'inscription
jeudi 10 janvier 2013
Statut
Membre
Dernière intervention
5 avril 2018
-
Bonsoir,

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