Probleme avec le code vba importation des fichiers

h_adil Messages postés 231 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 10 juin 2009 - 2 juil. 2007 à 11:26
h_adil Messages postés 231 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 10 juin 2009 - 2 juil. 2007 à 15:22
bonjour,
ya quelque jours une personne ( que je remercie ) ma envoyer le code ci dessous. pour faciliter l'importation des fichiers(importer tous les fichiers dans un repertoire) dans ma base de données.
et là enfait je suis entrain de tester ce code et j'ai eu quelque probleme de compilation.
le premiere est :losque je compile pas à pas le code narrive pas a rentrer dans la contion If UBound(strTabName) 1 And UCase(Right(strFile.Name, 4)) ".TXT" Then<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>







       If Len(strTabName(1)) = 18 Then








          imax = imax + 1








          ReDim Preserve Tableau(2, imax)








          Tableau(1, imax) = strTabName(0)








          Tableau(2, imax) = strTabName(1)








       End If





je sais pas pourquoi. et donc il donne aucune valeur a mon imax

le seconde : lorsque j'ai donnée directement une valeur a mon imax =11 (le nombre de fichier que j'ai reçus aujourdhui par exemple), il me donne une erreur incompatibilité de type 
dans la condition If CStr(Tableau(2, i)) > CStr(Tableau(2, i + 1)) Then.

pouvez vous me dire il est où le problème.
la totalité du code est ci dessous :

Sub TriRepertoire()



Dim objFso, objShell





Dim strDesktop, strPath, strFile, strTabName




Dim i, imax, z, valeur, Cible, liste



Dim Tableau As Variant





Set objFso = CreateObject("Scripting.FileSystemObject")





Set objShell = CreateObject("WScript.Shell")





strDesktop = objShell.SpecialFolders("Desktop")





strPath = objShell.SpecialFolders(4) & "\fichiercde"






 






imax = 0





'début de l'énumération





For Each strFile In objFso.GetFolder(strPath).Files






   
strTabName = Split(strFile.Name, "_")



    'le nom du fichier sous la forme: nom de fichier_20070614115213.txt



   

If UBound(strTabName) 1 And UCase(Right(strFile.Name, 4)) ".TXT" Then








       If Len(strTabName(1)) = 18 Then








          imax = imax + 1








          ReDim Preserve Tableau(2, imax)








          Tableau(1, imax) = strTabName(0)








          Tableau(2, imax) = strTabName(1)








       End If







    End If





Next





'---tri---





Do






   valeur = 0







   imax =11







   For i = 1 To imax - 1






       If CStr(Tableau(2, i)) > CStr(Tableau(2, i + 1)) Then






          For z = 1 To 2






              Cible = Tableau(z, i)






              Tableau(z, i) = Tableau(z, i + 1)






              Tableau(z, i + 1) = Cible






          Next






          valeur = 1






       End If






  
Next


Loop While valeur = 1


'Affichage du résultat classé



For i = 1 To imax






 DoCmd.TransferText acImport, "formatagetoto", _






     "TABLESOURCE", strPath & Tableau(1, i) & "_" & Tableau(2, i)






    liste = liste & vbTab & strPath & Tableau(1, i) & "_" & Tableau(2, i) & vbCr






    If i = imax Then MsgBox liste, , "Liste du répertoire" & Space(3) & strPath





Next





Set objFso = Nothing





Set objShell = Nothing




End Sub





programation .....

10 réponses

h_adil Messages postés 231 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 10 juin 2009
2 juil. 2007 à 11:37
pour la deuxieme je sais pourquoi, si je ne recupère pas les valeurs de  Tableau(2, imax) dans la premiere contion je peux pas le lire après  c bete

programation .....
0
h_adil Messages postés 231 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 10 juin 2009
2 juil. 2007 à 11:45
su sa peux vous aider voila le format de mon fichier CDE20070702090603189.txt

et je suis certain que le probeleme est dans cette partieFor Each strFile In objFso.GetFolder(strPath).Files<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

    strTabName = Split(strFile.Name, "_")

    'le nom du fichier sous la forme: nom de fichier_20070614115213.txt

  For Each strFile In objFso.GetFolder(strPath).Files
    strTabName = Split (strFile.Name, "_")
    'le nom du fichier sous la forme: nom de fichier_20070614115213.txt    If UBound(strTabName) 1 And <gras>UCase(Right(strFile.Name, 4))</gras> ".TXT" Then
       If Len(strTabName(1)) = 18 Then
          imax = imax + 1
          ReDim Preserve Tableau(2, imax)
          Tableau(1, imax) = strTabName(0)
          Tableau(2, imax) = strTabName(1)
       End If
    End If
Next 
ça certe a quoi les fonction : SPLIT, UBOUND, UCASE.
programation .....
0
h_adil Messages postés 231 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 10 juin 2009
2 juil. 2007 à 11:59
j'arrive pas a comprendre pourquoi j'ai un message d'erreur incompatibilité de type lorsque j'enleve la fonction slipt car apparament je n'ai pas besoin pour le moment

For Each strFile In objFso.GetFolder(strPath).Files
       strTabName = strFile.Name
    'le nom du fichier sous la forme: nom de fichier_20070614115213.txt    If UBound(strTabName) 1 And UCase(Right(strFile.Name, 4)) ".TXT" Then
       If Len(strTabName(1)) = 18 Then
          imax = imax + 1
          ReDim Preserve Tableau(2, imax)
          Tableau(1, imax) = strTabName(0)
          Tableau(2, imax) = strTabName(1)
       End If
    End If
Next

programation .....
0
h_adil Messages postés 231 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 10 juin 2009
2 juil. 2007 à 12:09
pourquoi j'ai une incompatibilité de type ???

programation .....
0

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

Posez votre question
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
2 juil. 2007 à 12:47
 Bonjour à tous

Bonjour h_adil,

Normal que cela ne répond plus à ta demande
Dans le topic   http://www.vbfrance.com/infomsg_LECTURE-FICHIER-TXT-DYNAMIQUE-PARTIR-VBA_970108.aspx#4
tu dis que tes fichiers se nomment comme
"C:\Documents and Settings\Bureau\dossier\fichier_20070614115213.TXT" (date sur 18 caractères)
et maintenant c'est "CDE20070702090603189.txt" (date sur 17 caractères)
donc le split avec "_" ne renvoie rien, ni le test len(....Name)

jean-marc
0
h_adil Messages postés 231 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 10 juin 2009
2 juil. 2007 à 12:52
oui vous avez raison, et j'ai modifié les parametres pourqu'il le prend en compte, car le nombre de caractères dans le nom de fichier que je reçois n'est pas normalisé du coup j'ai opté pour la synthaxe suivante :

For Each strFile In objFso.GetFolder(strPath).Files
    strTabName = Split(strFile.Name, ".txt")
    'le nom du fichier sous la forme: nom de fichier_20070614115213.txt    If UBound(strTabName) 1 And UCase(Right(strFile.Name, 4)) ".TXT" Then
       If Len(strTabName(0)) >= 2 Then
          imax = imax + 1
          ReDim Preserve Tableau(2, imax)
          Tableau(1, imax) = strTabName(0)
          Tableau(2, imax) = strTabName(1)
       End If
    End If
Next

lorsque je compile pas à pas j'arrive jusqu'a ReDim Preserve Tableau(2, imax) et il me donne un message d'erreur "incomptibilité de type". alors qu emoi j'ai declaré mon table dim tableau.
et franchement comment resoudre ce probleme

programation .....
0
h_adil Messages postés 231 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 10 juin 2009
2 juil. 2007 à 12:55
oups, j'ai enlevé Preserve  de "ReDim Preserve Tableau(2, imax)" et sa l'air de bien marcher. donc là j'ai passé la premiere condition

programation .....
0
h_adil Messages postés 231 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 10 juin 2009
2 juil. 2007 à 12:58
mais j'ai un autre message derreur : l'indice na'appartient a la selection "

programation .....
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 juil. 2007 à 14:07
Les noms de tes fichiers ne contiennent plus de caractère souligné, donc l'utilisation d'un tableau et de Split sur ce caractère "_"  n'a plus sa place. Ton tableau n'aura jamais d'Index 1 et causera une erreur.

Il te faudra changer ta méthode de travail pour reconnaître les fichiers valides.
Comme on ne connaît le format des noms de fichiers, on ne peut pas t'aider plus que ça...

MPi
0
h_adil Messages postés 231 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 10 juin 2009
2 juil. 2007 à 15:22
voila des exemple des fichiers que je reçois :
CDE20070702090603189.txt
CDE200707020906031893.txt

programation .....
0
Rejoignez-nous