![]() |
| 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é. | |||||||
|
|||||||
| VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre régulier
![]() Date d'inscription: juin 2004
Âge: 26
Messages: 120
|
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 |
|
|
|
|
|
#2 (permalink) |
|
Membre régulier
![]() Date d'inscription: juin 2004
Âge: 26
Messages: 120
|
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 |
|
|
|
|
|
#3 (permalink) |
![]() Date d'inscription: février 2006
Localisation: Morlanwelz (Carnières)
Âge: 44
Messages: 10 445
|
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
__________________
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 |
|
|
|
|
|
#4 (permalink) |
|
Membre régulier
![]() Date d'inscription: juin 2004
Âge: 26
Messages: 120
|
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 |
|
|
|
|
|
#5 (permalink) |
![]() Date d'inscription: février 2006
Localisation: Morlanwelz (Carnières)
Âge: 44
Messages: 10 445
|
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 |
|
|
|
|
|
#6 (permalink) |
|
Membre régulier
![]() Date d'inscription: juin 2004
Âge: 26
Messages: 120
|
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 |
|
|
|
|
|
#7 (permalink) |
![]() Date d'inscription: février 2006
Localisation: Morlanwelz (Carnières)
Âge: 44
Messages: 10 445
|
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 |
|
|
|
|
|
#8 (permalink) |
|
Membre régulier
![]() Date d'inscription: juin 2004
Âge: 26
Messages: 120
|
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 ="" 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 |
|
|
|
|
![]() |
![]() |
||
Parcourir les fichiers d'un repertoire
|
||
| Outils de la discussion | |
|
|