Traitement consécutif de fichiers excel

Résolu/Fermé
denisw95 - 26 août 2014 à 17:51
 denisw95 - 29 août 2014 à 17:49
Bonjour,

Je reçois régulièrement des fichiers XLS générés à partir d'un outil de ticketing et je suis de m'apercevoir que certaines colonnes du fichier ne sont pas pris en compte lors de l'importation dans ma base Access (problème de format ?).
Comme parade, j'ouvre le fichier et le sauvegarde sous un autre nom en utilisant Excel. Je récupère alors bien toutes mes colonnes.

Mon objectif maintenant est d'écrire une procédure de reprise pour convertir et réintégrer tous mes fichiers.


Option Explicit

Sub ReprendreDesFichiers()

Dim Fich As String
Dim Chemin As String
'
' Liste des fichiers du répertoires
'
Chemin = "D:"
Fich = Dir(Chemin & "*.xls")

Do While Fich <> ""
Call fichier_xls(Chemin, Fich)
Fich = Dir()
Loop

End Sub

Sub fichier_xls(Chemin, nom_fichier)

Dim xlApp As Variant, xlBook As Variant, xlSheet As Variant
Dim fic_out As String

Dim strSource As String
Dim strSql As String
Dim dbBdeD As Database

strSource = "D:\u_formulaire.xls"
'
' ouvrir le fichier Excel
'
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(Chemin & nom_fichier)

Set xlSheet = xlBook.Worksheets(1)
' xlApp.Visible = True
'
' sauvegarde du fichier
'
xlBook.SaveAs (strSource)
'
' fermeture du fichier
'
xlBook.Close
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

' Chargement des formulaires

If Dir(strSource) = "" Then
MsgBox "Le fichier " & strSource & " n'existe pas"
Else
Set dbBdeD = CurrentDb
strSql = "DROP TABLE Formulaire_tmp;"
dbBdeD.Execute strSql, dbFailOnError

DoCmd.RunSavedImportExport ("Importation-formulaire")
Call xx_Chargement_formulaire.Chargement_formulaire
Kill (strSource)
End If

End Sub

Mon problème lors de l'exécution de la procédure est qu'il semble que je perde mon pointeur sur la commande DIR. Je m'explique :
- le 1er fichier de ma liste est correctement traité
- lorsque pas la commande DIR(), il ne trouve pas de second fichier (alors que la commande DIR en retourne une vingtaine ...)

Pour avancer dans mon analyse, j'ai replacé dans ma procédure principale, la fonction CALL par la fonction MSGBOX, et là, tout fonctionne, la commande msgbox me défile bien tous mes fichiers.

Conclusion :est ce l'appel à excel qui me fait perdre mon pointeur ? avez-vous d'autres suggestions ?

Merci d'avance pour votre aide
A voir également:

7 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 27/08/2014 à 15:01
Bonjour,

ce n'est pas EXCEL en lui-meme qui gene, c'est le deuxieme Dir qui pose probleme, pour savoir si un fichier existe vous pouvez utiliser une autre methode:

exemple:

http://www.forumsig.org/showthread.php/2321-VBA-Utilitaire-Savoir-qu-un-fichier-existe-sur-le-disque-dur
0
Bonjour,

Merci pour ce retour.

En quoi le second DIR pose problème ? Lorsque je remplace le "Call ..." par "MsgBox ...), la liste des fichiers est correctement traité
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
28 août 2014 à 18:42
Bonjour,

l'instruction DIR garde "en memoire" le dernier DIR. Donc pour vous, c'est celui que vous faites dans votre sub routine fichier_xls(Chemin, Fich). Quand vous remplacez la Call par une MsgBox, vous ne modifiez pas la "memoire" du dir de depart, avec le Call vous modifiez cette "memoire"
0
Bonjour,

Cela veut dire qu'il n'est pas possible d'exploiter une liste de fichier ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 29/08/2014 à 16:44
Bonjour,

Si, mais pas avec deux DIR. Pour verifier que le fichier existe dans votre subroutine fichier_xls(Chemin, Fich) n'utilisez pas DIR(). Dans le Lien (#1), je vous donne une autre methode, il y en a d'autres.
Vous pouvez aussi mettre tous vos noms de fichier dans un tableau avec un DIR(), utiliser le tableau et DIR() pour l'existance du fichier dans fichier_xls(Chemin, Fich)
0
Compris merci.

J'avais complétement zappé l'utilisation du DIR dans la subroutine, c'est pour cela que je ne comprenais pas
0
Du coup, j'ai remplacé la commande DIR dans la subroutine par :

Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(strSource)) Then

MsgBox "Le fichier " & strSource & " existe donc déclenchement du traitement"

Else

MsgBox "Le fichier " & strSource & " n'existe pas"

End If

ça marche nickel
0