Besoin d'aide pour conversion Access 2003 2007

Besoin d'aide pour conversion Access 2003 2007 - VB/VBA/VBS - Programmation

Marsh Posté le 04-10-2010 à 13:05:53    

Bonjour a tous,
 
Je viens a vous desepérement car ca fait plus d'une semaine que j'essay de convertir ce code en 2007 car ma fonction "Application.FileSearch" ne fonctionne plus sous 2007...
Il y a bien une solution sous excell pour rajouter cette fonction mais ca ne marche pas sous access.
 
Voici mon code :
 

Code :
  1. Sub import()
  2.        Set fs = Application.FileSearch   ' NE FONCTIONNE PLUS
  3.    
  4.     With fs
  5.    
  6.         .LookIn = "C:\mon dossier"
  7.         .filename = "*.TXT"                                 ' JE RECUPERE MON FICHIER TEXT TOUTE LES 15 MIN IMPORT D'UN FTP
  8.        
  9.         If .Execute(SortBy:=msoSortbyFileName, _
  10.             SortOrder:=msoSortOrderAscending) > 0 Then
  11.                  
  12.                 For i = 1 To .Foundfiles.Count
  13.                 FileCopy .Foundfiles(i), "C:\mon dossier save" & Right(.Foundfiles(i), (Len(.Foundfiles(i)) - InStrRev(.Foundfiles(i), "\" )))     ' SAVE DES FICHIERS
  14.                 DoCmd.TransferText acImportDelim, "Spécification export ORDER", "FICHIER ORDER", .Foundfiles(i), False, ""                     ' IMPORT DANS MA TABLE SUIVANT UN SP2CIFICATION D'IMPORTATION
  15.                 Kill (.Foundfiles(i))
  16.              
  17.          Next i
  18.              Else
  19.                  End If
  20. End With
  21. End Sub


 
MERCI DE VOTRE AIDE CAR LA JE c'est plus quoi faire !!!!!  :??:  
 
j'ai bien essayé avec un dir mais j'arrive pas a l'importater dans ma table existante " FICHIER ORDER"
 
MERCI MERCI D'avance


Message édité par fabiencer84 le 04-10-2010 à 13:44:22
Reply

Marsh Posté le 04-10-2010 à 13:05:53   

Reply

Marsh Posté le 04-10-2010 à 13:30:03    

Salut, va jeter un oeil sur http://www.developpez.net/forums/d [...] oundfiles/ sinon via Gog http://www.google.fr/search?hl=fr& [...] =&gs_rfai=


Message édité par kiki29 le 04-10-2010 à 13:33:18
Reply

Marsh Posté le 04-10-2010 à 13:30:43    

TItre modifié : les titres tout en majuscules sont prohibés. Merci de lire les règles de la section.

Reply

Marsh Posté le 04-10-2010 à 13:41:00    

Oui justement j'ai vu ce topics mais c'est ultra compliqué et je n'arrive pas a le mettre en action.
 
j'espere trouver un code plus simple comme celui que j'avais sous 2003.
 
Je suis debutant et je ne connais presque pas le vba.

Reply

Marsh Posté le 04-10-2010 à 13:59:51    

Re, en allant au plus simple ( pas de récursion ) : c'est du VBA mais testé sous Excel


Option Explicit
 
Dim Tableau() As String
 
Sub Tst()
Dim i As Long
    Erase Tableau
    ListeFichiersDansDossier ThisWorkbook.Path, "txt", 0
    For i = LBound(Tableau) To UBound(Tableau)
        Debug.Print i, Tableau(i)
    Next i
End Sub
 
Private Sub ListeFichiersDansDossier(sChemin As String, sExt As String, r As Long)
Dim Fichier As String, sPath As String
 
    Fichier = Dir$(sChemin & "\*." & sExt)
    Do While Len(Fichier) > 0
        ReDim Preserve Tableau(r)
        sPath = sChemin & "\" & Fichier
        Tableau(r) = sPath
        r = r + 1
        Fichier = Dir$()
    Loop
End Sub


en adaptant (sans doute) et insérant  


            For i = 1 To .FoundFiles.Count
                FileCopy .FoundFiles(i), "C:\mon dossier save" & Right(.FoundFiles(i), (Len(.FoundFiles(i)) - InStrRev(.FoundFiles(i), "\" )))      ' SAVE DES FICHIERS
                DoCmd.TransferText acImportDelim, "Spécification export ORDER", "FICHIER ORDER", .FoundFiles(i), False, ""                     ' IMPORT DANS MA TABLE SUIVANT UN SP2CIFICATION D'IMPORTATION
                Kill (.FoundFiles(i))
            Next i


à la place du


 Debug.Print i, Tableau(i)


Ce qui sauf erreur de ma part devrait donner


Option Explicit  
 
Dim Tableau() As String  
 
Sub Tst2()
Dim i As Long
    Erase Tableau
    ListeFichiersDansDossier "C:\mon dossier", "txt", 0
    For i = LBound(Tableau) To UBound(Tableau)
        FileCopy Tableau(i), "C:\mon dossier save" & Right$(Tableau(i), (Len(Tableau(i)) - InStrRev(Tableau(i), "\" )))
        DoCmd.TransferText acImportDelim, "Spécification export ORDER", "FICHIER ORDER", Tableau(i), False, ""
        Kill (Tableau(i))
    Next i
End Sub
 
Private Sub ListeFichiersDansDossier(sChemin As String, sExt As String, r As Long)  
Dim Fichier As String, sPath As String  
 
    Fichier = Dir$(sChemin & "\*." & sExt)  
    Do While Len(Fichier) > 0  
        ReDim Preserve Tableau(r)  
        sPath = sChemin & "\" & Fichier  
        Tableau(r) = sPath  
        r = r + 1  
        Fichier = Dir$()  
    Loop  
End Sub


Message édité par kiki29 le 04-10-2010 à 15:24:06
Reply

Marsh Posté le 04-10-2010 à 16:42:42    

J'ai une erreur sur la ligne "For i = LBound(Tableau) To UBound(Tableau)"  code exe 9 "l'indice n'appartient pas a la selection"
 
Mais deja merci j'y vois deja beaucoup plus clair
 
EDIT 2 C'EST BON CA MARCHE MERRRRRRRRRRRRRRRRRRRRRRRRRCI    :bounce:  :bounce:  
 
en fait ca marche plus quand le dossier est vide.
 
Donc encore une petit demande comment puije interdire l'import si mon dossier est vide? car si mon dossier est vide j'ai lerreur ci dessus.
Ou du moins avoir un message "dossier vide " a la place d'erreur 9?
 
MERCI


Message édité par fabiencer84 le 04-10-2010 à 17:28:43
Reply

Marsh Posté le 04-10-2010 à 18:24:38    

Re, qqch comme cela devrait convenir


Option Explicit
   
Dim Tableau() As String
Dim bFlag As Boolean
 
Sub Tst2()
Dim i As Long
    Erase Tableau
    bFlag = False  
    ListeFichiersDansDossier "C:\mon dossier", "txt", 0
    If bFlag = True Then  
        MsgBox "Pas de Fichier", vbOKOnly + vbInformation, "Info"  
        Exit Sub  
    End If  
    For i = LBound(Tableau) To UBound(Tableau)
        FileCopy Tableau(i), "C:\mon dossier save" & Right$(Tableau(i), (Len(Tableau(i)) - InStrRev(Tableau(i), "\" )))
        DoCmd.TransferText acImportDelim, "Spécification export ORDER", "FICHIER ORDER", Tableau(i), False, ""
        Kill (Tableau(i))
    Next i
End Sub
 
Private Sub ListeFichiersDansDossier(sChemin As String, sExt As String, r As Long)
Dim Fichier As String, sPath As String
   
    Fichier = Dir$(sChemin & "\*." & sExt)
    If Len(Fichier) = 0 Then
        bFlag = True
        Exit Sub
    End If
    Do While Len(Fichier) > 0
        ReDim Preserve Tableau(r)
        sPath = sChemin & "\" & Fichier
        Tableau(r) = sPath
        r = r + 1
        Fichier = Dir$()
    Loop
End Sub


Message édité par kiki29 le 10-10-2010 à 17:40:50
Reply

Marsh Posté le 04-10-2010 à 18:59:19    

kiki29 tu est trop fort....
Il y avait un beug dans ton code mais grace a toi j'ai su le rectifié et maintenant tout fonctionne.
 
voici mon code definitif :  

Code :
  1. Option Explicit
  2.  
  3. Dim Tableau() As String
  4. Dim bFlag As Boolean
  5. Private Sub ListeFichiersDansDossier(sChemin As String, sExt As String, r As Long)
  6. Dim Fichier As String, sPath As String
  7.  
  8.     Fichier = Dir$(sChemin & "\*." & sExt)
  9.     If Len(Fichier) = 0 Then bFlag = True
  10.     Do While Len(Fichier) > 0
  11.         ReDim Preserve Tableau(r)
  12.         sPath = sChemin & "\" & Fichier
  13.         Tableau(r) = sPath
  14.         r = r + 1
  15.         Fichier = Dir$()
  16.     Loop
  17. End Sub
  18. Sub import_kyocera2()
  19. Dim i As Long
  20.     Erase Tableau
  21. bFlag = False
  22.         ListeFichiersDansDossier "C:\", "txt", 0
  23.           If bFlag = True Then
  24.         MsgBox "Pas de Fichier", vbOKOnly + vbInformation, "Info"
  25.         Exit Sub
  26.         Else
  27.       For i = LBound(Tableau) To UBound(Tableau)
  28.         FileCopy Tableau(i), "C:\SAUVEGARDE\" & Right$(Tableau(i), (Len(Tableau(i)) - InStrRev(Tableau(i), "\" )))
  29.         DoCmd.TransferText acImportDelim, "Spécification export ORDER", "FICHIER ORDER", Tableau(i), False, ""
  30.         Kill (Tableau(i))
  31.    Next i
  32.     End If
  33. End Sub


 
Encore merci a toi


Message édité par fabiencer84 le 04-10-2010 à 19:01:16
Reply

Marsh Posté le 04-10-2010 à 19:11:11    

Re, à priori  


Sub import_kyocera2()
Dim i As Long
    Erase Tableau
    bFlag = False
    ListeFichiersDansDossier "C:\", "txt", 0
    If bFlag = True Then
        MsgBox "Pas de Fichier", vbOKOnly + vbInformation, "Info"
        Exit Sub
    End If
 
    For i = LBound(Tableau) To UBound(Tableau)
        FileCopy Tableau(i), "C:\SAUVEGARDE\" & Right$(Tableau(i), (Len(Tableau(i)) - InStrRev(Tableau(i), "\" )))
        DoCmd.TransferText acImportDelim, "Spécification export ORDER", "FICHIER ORDER", Tableau(i), False, ""
        Kill Tableau(i)
    Next i
End Sub


Message édité par kiki29 le 05-10-2010 à 06:42:47
Reply

Marsh Posté le 05-10-2010 à 13:48:09    

Yes ca fonctionne aussi plus judicieux...
Merci en tout cas

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed