Problème lié à la gestion de potentielles erreurs

Bonjour a tous !

Je travaille sur la récupération de plusieurs fichier excel se trouvant dans un répertoire dans le but d'extraire plusieurs données dans chacun de ces fichiers.

Pour des raisons de conformité de chaque fichier, j'ai créé une sub procédant à 2 vérification :

1) Si le fichier peut être ouvert (il arrive que certain fichier ne puisse pas être ouvert, pour des raisons qui m'échappe encore mais la n'est pas le problème pour le moment)

2) Si la première feuille du fichier se nomme "ReportHeader", caractéristique des fichiers sur lesquelles je souhaite récupérer mes données

Avec une macro de récupération des fichiers, je stocke le chemin de chacun des fichiers dans la colonne A d'une feuille nommé "GeneralData". Puis je lance ma macro de vérification qui va parcourir la colonne A de ma feuille "GeneralData" et vérifier les 2 conditions cités plus haut.

La macro fonctionne en faite très bien lorsqu'un dossier possède des fichiers non conforme : le chemin du fichier non conforme est stocker dans un tableau tab_error(), et lorsque qu'il n'y a plus de fichier à vérifier, ce tableau est collé sur une feuille nommé "UnusableFile" afin de garder une trace de ces fichiers.

Le problème ici visiblement est en faite lorsque le dossier ne possède pas de fichier non conforme, et que mon tableau tab_error ne possède donc pas de ligne... Une fois tout les fichiers parcouru, la macro devrait passer a l'étiquette "end_sub", mais une erreur apparait sur la ligne "next cel" me disant que ma boucle for n'est pas initialisé.. J'avoue que j'ai beaucoup de mal à comprendre cette erreur, d'autant plus que ma msgbox("Je suis ici") apparait correctement.

Je sais qu'il est possible de gérer l'erreur avec On Error Resume Next, mais cela me dérange de ne pas comprendre ce qu'il se passe derrière et pourquoi cette erreur persiste.

Je mets mon code ci-dessous :

Sub find_wrong_file()

    Dim i As Integer 'index for file browsing
    Dim j As Integer, k As Integer 'index for tab_error
    Dim cel As Range, cel1 As Range
    Dim tab_error() As Variant 'error file table
    Dim nb_file As Integer

    Sheets("GeneralData").Select

    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    'for progress bar
    nb_file = 0
    For Each cel1 In Range("A2", Range("A2").End(xlDown))
        nb_file = nb_file + 1
    Next cel1

    i = 1
    j = 1
    k = 0

debut:
    ProgressBar.afficher
    For Each cel In Range("A2", Range("A2").End(xlDown))
        i = i + 1 'file path begin at cell A2 => line 2
        file_path = cel.Value
        Workbooks.Open file_path
        On Error GoTo erreur 'if can't open file go to erreur
        Worksheets(1).Activate
        If ActiveSheet.Name <> "ReportHeader" Then 'if no report header
            file_name = Right(file_path, Len(file_path) - InStrRev(file_path, "\")) 'get the file name only
            Workbooks(file_name).Close 'close file
            ReDim Preserve tab_error(j) 'redim table while keeping data stored in it
            tab_error(k) = Range("A" & i).Value 'get the file path of the unusable file
            Rows(i).EntireRow.Delete 'delete the row from the Consolidation_V3 workbook
            j = j + 1 'index for tab_error dim
            k = k + 1 'index for tab_error row (j-1)
        Else 'file can be used
            file_name = Right(file_path, Len(file_path) - InStrRev(file_path, "\"))
            Workbooks(file_name).Close
        End If
        ProgressBar.actualiser CInt((i / nb_file) * 100)
Suivant:
    Next cel
    MsgBox ("Je suis ici")
    GoTo end_sub 'when finish file browsing

end_sub:
    If Not IsEmpty(tab_error) Then
        Worksheets("UnusableFile").Range("A1:A" & k) = Application.Transpose(tab_error()) 'k value is the size of the table
    End If
    Application.EnableEvents = True
    Exit Sub '<-------------------------- exit program

erreur:
    ReDim Preserve tab_error(j) 'redim table while keeping data stored in it
    tab_error(k) = Range("A" & i).Value 'get the file path of the unusable file
    Rows(i).EntireRow.Delete 'delete the row from the Consolidation_V3 workbook
    j = j + 1 'index for tab_error dim
    k = k + 1 'index for tab_error row (j-1)
    On Error GoTo 0  'reset the error management
    GoTo Suivant 'go back to the file analyzing process
End Sub

Merci d'avance pour votre aide !

Bonjour

Il me semble qu'en remplaçant :

If Not IsEmpty(tab_error) Then

par :

If k > 0 Then

ça devrait marcher puisque k compte les erreurs. S'il n'ya pas d'erreur k sera &gal à zéro

Effectivement ça fonctionne de cette façon.

Merci pour ta réponse !

Rechercher des sujets similaires à "probleme lie gestion potentielles erreurs"