Traitement consécutif de fichiers excel
Résolu
denisw95
-
denisw95 -
denisw95 -
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.
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
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:
- Traitement consécutif de fichiers excel
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Comment faire la somme de plusieurs cellules non consécutives sur excel - Guide
- Déplacer colonne excel - Guide
7 réponses
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
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
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é
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é
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"
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"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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)
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)
Compris merci.
J'avais complétement zappé l'utilisation du DIR dans la subroutine, c'est pour cela que je ne comprenais pas
J'avais complétement zappé l'utilisation du DIR dans la subroutine, c'est pour cela que je ne comprenais pas
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
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