Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > VBA Access

VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.

Réponse
 
Outils de la discussion
Vieux 05/09/2008, 08h54   #1 (permalink)
Membre régulier
 
Date d'inscription: juin 2004
Âge: 26
Messages: 120
Par défaut Parcourir les fichiers d'un repertoire

Bonjour

Voila j'ai un probleme au niveau du parcours des fichiers d'un repertoire.

En fait mon programme ce positionne sur un repertoire contenant des fichiers excel afin de tous les parcourir et d'en extraire certaines informations.

Cependant je ne sais pas pourquoi pour certains repertoires l'application ne les parcours pas dans l'ordre.
Je vous fais parvenir un bout de mon code.
Code :
 
Private Sub Commande21_Click()
 
'importer toutes les factures d'un repertoire
Dim bd As Database
Dim reponse As String
Dim repertoire As String
Dim fichier As String
Dim extension As String
Dim animal As String
Dim année As Integer
Dim semaine As String
Dim extraction As String
Dim typeimport As String
Dim i As Integer
Dim j As Integer
Dim Rst As Recordset
Dim rst1 As Recordset
Dim texte As String
 
Set bd = CurrentDb 'definition de la base de données de reference (celle en cours)
Set rst1 = bd.OpenRecordset("doublons", dbOpenDynaset)
DoCmd.RunSQL "ALTER TABLE factures DROP CONSTRAINT PrimaryKey" 'on enleve la clé primaire pour eviter le bloquage du prog sur les doublons
 
'C:\Documents and Settings\CUMA de l'Onglet\Mes documents\CUMAFACTURE
 i = 0 'initialisation du compteur de factures extraites
 j = 0 'initialisation du compteur de doublons
  
 extension = "*.xls" 'selection de l'extension à rechercher dans le repertoire
 
 animal = InputBox("type d'animal desiré?") 'selection du type de facture à importer
 année = InputBox("quelle année?") 'choix de l'année des factures
 reponse = MsgBox("lancer l'import", vbYesNo, "import des factures") 'demande de confirmation de lancement de la tache
  
 Select Case reponse 'suivant la reponse
 Case vbYes 'si oui
 'MsgBox ("appuyer sur echap pour arreter la tache a tout moment")
    'While GetAsyncKeyState(27) = 0 'tant que la touche echap n'as pas été pressé on poursui la tache
     typeimport = MsgBox("tout extraire?", vbYesNo)
     If animal = "agneaux" Then
        excel.Workbooks.Open ("Z:\cuma\agneaux\2008\Facture vierge AGNEAUXP.xls") 'ouverture du fichier contenant la macro
        repertoire = ("Z:\cuma\agneaux\" & année & "\") 'definition du repertoire de recherche
            ElseIf animal = "bovins" Then
            excel.Workbooks.Open ("Z:\cuma\GROSBOVIN\2008\Facture vierge bovinP.xls")
            repertoire = ("Z:\cuma\GROSBOVIN\" & année & "\")
                ElseIf animal = "porcs" Then
                excel.Workbooks.Open ("Z:\cuma\Porcs\2008\Facture vierge porcsP.xls")
                repertoire = ("Z:\cuma\Porcs\" & année & "\")
                    ElseIf animal = "veaux" Then
                    excel.Workbooks.Open ("Z:\cuma\Veaux\2008\Facture vierge veauxP.xls")
                    repertoire = ("Z:\cuma\Veaux\" & année & "\")
     End If
 
    fichier = Dir(repertoire & extension)   'association du repertoire et l'extension pour obtenir uniquement le nom du fichier
    MsgBox (fichier) 'affichage du premier fichier du repertoire
    
   While Left(fichier, 14) <> "Facture vierge" Or fichier = "" 'parcours du repertoire
      excel.Workbooks.Open (repertoire & fichier) 'ouverture du fichier excel
 
 

Merci pour vos remarques.

Amicalement Scons
scons est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/09/2008, 17h14   #2 (permalink)
Membre régulier
 
Date d'inscription: juin 2004
Âge: 26
Messages: 120
Par défaut

Bon j'ai une piste.
En fait j'ai trouvé la façon dont l'application parcour mes fichiers.
Cela depend de leurs dates de creation.
Curieusement seul les fichiers ayant la date de creation la plus ancienne sont extraits.
C'est a dire que si des fichiers sont datés du 05/09/2008 et d'autres a une date anterieur, seul les fichiers du 05/09/2008 sont extrait.
Les autres ne sont pas traités.

Voila si quelqu'un connait la solution a ce probleme je suis preneur.

Amicalement Scons
scons est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/09/2008, 13h24   #3 (permalink)
Responsable Word
 
Avatar de Heureux-oli
 
Date d'inscription: février 2006
Localisation: Morlanwelz (Carnières)
Âge: 44
Messages: 10 445
Par défaut

Salut,

Je ne comprend pas très bien le choix de ta structure en spaghetti.

Si tu ajoutes quelque chose, tu va devoir écrire ton code à nouveau !

Il est possible de parcourir les fichiers d'un répertoire et les répertoires d'un disque dur plus facilement il me semble.

en plus, avec des imputbox, si tu fais une mauvaise saisie, tu recomences.

Essaie d'automatiser un peu plus ton traitement.

On sait que l'année varie avec le temps, mais qu'elle a toujours la même forme 2008 par exemple.

Pour les répertoires, c'est encore plus facile.
Un tuto ne fait jamais de tort.
http://warin.developpez.com/access/fichiers/

Il faut ajouter la référence Microsoft Scripting Runtime à ton projet.

Ensuite :

Code :
Sub Test()
Dim oFso As FileSystemObject
Dim stRep As String
Dim oFil As File
Dim oFold As Folder, oFold2 As Folder
Dim dlg As FileDialog
 
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
dlg.Show
stRep = dlg.SelectedItems(1)
Set oFso = New FileSystemObject
Set oFold = oFso.GetFolder(stRep)
For Each oFold2 In oFold.SubFolders
    Debug.Print oFold2.Name & " - Répertoire"
Next oFold2
 
For Each oFil In oFold.Files
    Debug.Print oFil.Name & " - Fichier"
Next oFil
 
Set oFso = Nothing
 
 
End Sub
Maintenant, le motif pour lequel il ne sont pas parcourus dans l'ordre est lié à la position qu'il a dans le répertoire je pense.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Ne posez pas de question par MP, c'est inutile.
Les rubriques Office recrutent.
Ma page d'accueil
Consultez nos FAQ !! Word ; Access ; Outlook ; Excel ; PowerPoint ; SharePoint
Si vous pensez que certains sujets manquent dans la FAQ, aidez nous !
Des images
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 06/09/2008, 14h26   #4 (permalink)
Membre régulier
 
Date d'inscription: juin 2004
Âge: 26
Messages: 120
Par défaut

En fait je tiens a preciser que mon programme execute une macro excel pour l'import des données.
Cette macro est contennue dans le repertoire 2008 de chaque type d'animal, d'ou ma structure en spaghetti.
Ce programme fonctionne parfaitement le seul ennui c'est le parcours des fichiers en fonction de leur date de creation.

Je testerai quand meme ta syntaxe histoire de voir si ça change quelques choses.

En tout cas merci d'avoir prit le temps de me repondre
__________________
Amicalement Scons
scons est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/09/2008, 19h21   #5 (permalink)
Responsable Word
 
Avatar de Heureux-oli
 
Date d'inscription: février 2006
Localisation: Morlanwelz (Carnières)
Âge: 44
Messages: 10 445
Par défaut

Salut,

si tu veux obtenir un autre ordre, il faut stocker les données relatives aux fichiers dans un tableau et faire un sort du tableau.
Reprendre les données pour traiter les fichiers dans l'ordre, mais je pense que ça ne vaut pas la peine.

Petite question ? Ta macro est-elle différente pour chaque fichier ?

Si ce nest pas le cas, pourquoi ne pas faire tout le traitement en Access. On peut utiliser les fonctions Excel en Access.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Ne posez pas de question par MP, c'est inutile.
Les rubriques Office recrutent.
Ma page d'accueil
Consultez nos FAQ !! Word ; Access ; Outlook ; Excel ; PowerPoint ; SharePoint
Si vous pensez que certains sujets manquent dans la FAQ, aidez nous !
Des images
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 06/09/2008, 20h01   #6 (permalink)
Membre régulier
 
Date d'inscription: juin 2004
Âge: 26
Messages: 120
Par défaut

En fait les factures sont saisies sous excel pour garder une trace des celles-ci.
Apres chaques factures saisies l'utilisateur utilise la macro que j'ai creé sous excel pour envoyer ces infos dans une base access afin de pouvoir les traités.Cela pour la comptabilité.

Dans ma base access j'ai creer un code pour pouvoir importer toutes les factures en une fois. J'utilise donc cette macro excel qui existe deja.
__________________
Amicalement Scons
scons est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/09/2008, 21h49   #7 (permalink)
Responsable Word
 
Avatar de Heureux-oli
 
Date d'inscription: février 2006
Localisation: Morlanwelz (Carnières)
Âge: 44
Messages: 10 445
Par défaut

Salut,

Ne penses tu pas qu'il serait plus facile de faire encoder tes utilisateurs directement dans Access ?

Tu peux utiliser le principe Frontale Dorsale.
Les données encodées dans une DB peuvent être utilisées plusieurs fois pour afficher ou imprimer la même facture. En fait, seules les données sont importantes.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Ne posez pas de question par MP, c'est inutile.
Les rubriques Office recrutent.
Ma page d'accueil
Consultez nos FAQ !! Word ; Access ; Outlook ; Excel ; PowerPoint ; SharePoint
Si vous pensez que certains sujets manquent dans la FAQ, aidez nous !
Des images
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 08/09/2008, 15h59   #8 (permalink)
Membre régulier
 
Date d'inscription: juin 2004
Âge: 26
Messages: 120
Par défaut

hello

Desoler d'avoir mis autant de temps a repondre! mais je n'est pas ete la depuis.
En fait j'avais deja pensé a tout gerer depuis access mais les utilisateurs ou plutot les commenditaires de ce programme de comptabilité preferent fonctionner de cette maniere.

Bon j'ai fini par resoudre mon probleme d'import des données.
En fait dans ma boucle j'ai la condition suivante:
Code :
 
do while left(fichier,14)="Facture Vierge" and fichier =""
 
Et en fait mes repertoires contiennent plusieurs fichiers nommées "Facture Vierge".
Leurs dates de creation etant plus recentes que certain fichiers et vu que l'application parcours les fichiers en fonction de la date de creation il est normal que certain d'entre eux n'etaient pas traités.

Je sais pas si j'ai ete tres claire

En tout cas merci d'avoir prit le temps de me repondre
__________________
Amicalement Scons
scons est déconnecté   Envoyer un message privé Réponse avec citation
NEWS ACCESSF.A.Q AccessF.A.Q VBATutorielsSourcesOutilsLivresAccess TVAccess 2007

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > VBA Access



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide