Extraction de données vide d'une feuille non vide

Bonjour,

Je n'ai pas trouvé de réponse à mon sujet alors je me permets de vous demander de l'aide.

J'ai un petit code qui récupère les informations dans un feuille de plusieurs fichiers d'information sous excel ou open office.

Le code fonctionne bien car il trait mes données précédentes à la perfection. Il lit les fichiers, récupère les données et les ferme sans sauvegarder. Rien de bien méchant.

Mais voilà un bug très bizarre cette année dans mes résultats : j'ai beaucoup de données vides. C'est à dire que le code Decole.range("XX").value renvoit une valeur vide alors qu'aucune cellule n'est vide dans ma feuille.

Ce qui est d'autant plus bizarre c'est que sur les 250 fichiers j'ai une dizaine de fichiers pour lesquels je n'ai aucun problème. Les données sont bien reportées dans mon fichier global.

J'ai essayé de comprendre d'où venait la différence entre un fichier qui s'affiche bien dans mes données globales et un qui ne s'affiche pas malgré le fait que les données existes mais rien n'y fait, ils sont absolument identiques (sauf pour les données bien sûr). Quand je copie un fichier qui fonctionne il me le met bien en double et quand je reporte les données d'un fichier qui ne s'affiche pas dans un fichier qui fonctionne alors comme par magie il s'affiche enfin. Sauf que je ne vais pas faire ça pour les 250 fichiers...

Chaque année j'ai les mêmes fichiers à traiter à une ou deux colonnes de différence. Je ne comprends pas du tout ce qui fait que range.value renvoit vide alors que la feuille contient bien des données et que je me suis assuré d'être bien dans mon fichier.

Dim oFSO As Object
Dim oDossier As Object
Dim oFichier As Object
Dim i As Integer
Dim Chemin As String
Dim Ecole As Workbook
Dim Decole As Worksheet
Dim Inscription As Workbook
Dim Dinscription As Worksheet
Dim Index As Integer
Dim Projection As String

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set Inscription = ThisWorkbook 'définit le classeur destination Ecole et cinéma
Set Dinscription = Inscription.Sheets(1) 'définit la feuille de destination inscription globale

Index = 4 ' l'index de rangement des données commence à 4
i = 0

'chemin d'accès où les fichiers excel des écoles sont rangés
Chemin = "C:\Users\Fol 74\Documents\Dossier Inscriptions Ecoles\"

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oDossier = oFSO.GetFolder(Chemin)

For Each oFichier In oDossier.Files

Application.Workbooks.Open (Chemin & oFichier.Name) 'ouvre le fichier
Set Ecole = ActiveWorkbook 'définit le classeur source avec les donnees de l'école
Set Decole = Ecole.Sheets(1) 'définit la feuille qui contient les données de l'école

Dinscription.Range("E" & CStr(Index)).Value = Decole.Range("C4").Value

Dinscription.Range("A" & CStr(Index)).Value = Decole.Range("C5").Value

Dinscription.Range("B" & CStr(Index)).Value = Decole.Range("L9").Value

Dinscription.Range("C" & CStr(Index)).Value = Decole.Range("L10").Value

Dinscription.Range("D" & CStr(Index)).Value = Decole.Range("L11").Value

Dinscription.Range("F" & CStr(Index)).Value = Decole.Range("C8").Value

Dinscription.Range("G" & CStr(Index)).Value = Decole.Range("C9").Value

Dinscription.Range("H" & CStr(Index)).Value = Decole.Range("C10").Value

Dinscription.Range("I" & CStr(Index)).Value = Decole.Range("C11").Value

Dinscription.Range("J" & CStr(Index)).Value = Decole.Range("H6").Value

Dinscription.Range("K" & CStr(Index)).Value = Decole.Range("J6").Value

[...] beaucoup d'autres données sont copiées de la même manière mais je vous évite du code inutile

Ecole.Close SaveChanges = False 'ferme le fichier de l'école sans enregister les changements

Index = Index + 1 'on incrémente l'index pour stocker dans la ligne suivante
i = i + 1 'on incrémente i pour savoir combien on a traité de fichiers

Next oFichier

Inscription.Save 'enregistre le fichier destination contenant les données
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
MsgBox ("Fin du traitement, " & CStr(i) & " dossiers traités !")

Merci à vous et belle journée

Bonjour,

Avec des Debug.Print, essayez de voir ce que contiennent vos cellules dans les fichiers Ecole.

Nb : Pour lire les debug.print, activer la fenêtre exécution dans l'éditeur VBA avec Ctrl-G.

        For Each oFichier In oDossier.Files

            Application.Workbooks.Open (Chemin & oFichier.Name) 'ouvre le fichier
            Set Ecole = ActiveWorkbook 'définit le classeur source avec les donnees de l'école
            Set Decole = Ecole.Sheets(1) 'définit la feuille qui contient les données de l'école

            With Dinscription
                  .Range("E" & Index).Value = Decole.Range("C4").Value
                  .Range("A" & Index).Value = Decole.Range("C5").Value
                  .Range("B" & Index).Value = Decole.Range("L9").Value
                  .Range("C" & Index).Value = Decole.Range("L10").Value
                  .Range("D" & Index).Value = Decole.Range("L11").Value
                  .Range("F" & Index).Value = Decole.Range("C8").Value
                  .Range("G" & Index).Value = Decole.Range("C9").Value
                  .Range("H" & Index).Value = Decole.Range("C10").Value
                  .Range("I" & Index).Value = Decole.Range("C11").Value
                  .Range("J" & Index).Value = Decole.Range("H6").Value
                  .Range("K" & Index).Value = Decole.Range("J6").Value
            End With

            Debug.Print "C4 : " & Decole.Range("C4") & ", C5 : " & Decole.Range("C5") & ", L9 : " & Decole.Range("L9")

            '[...] beaucoup d'autres données sont copiées de la même manière mais je vous évite du code inutile

            Ecole.Close SaveChanges:=False  'ferme le fichier de l'école sans enregistrer les changements

            Index = Index + 1 'on incrémente l'index pour stocker dans la ligne suivante
            I = I + 1 'on incrémente i pour savoir combien on a traité de fichiers

            Set Ecole = Nothing: Set Decole = Nothing

        Next oFichier

Bien que vous ayez indiqué que la source était des fichiers Excel ou Open Office, quelle est la véritable extension de vos fichiers ?

Bonjour,

Je vous remercie pour votre message.

J'ai trouvé la solution par hasard. Pour une raison que j'ignore Excel crée une feuille de classeur invisible et vide en première position du classeur.

Du coup comme j'utilise workbook.sheets(1) je pointe sur cette feuille en question.

J'ai donc utilisé un test logique pour vérifier si ma feuille en position 1 est vide et si c'est le cas je prends la seconde feuille.

J'espère que mon problème pourra aider des personnes qui rencontrent la même situation.

Bonne journée.

Rechercher des sujets similaires à "extraction donnees vide feuille"