h_adil
Messages postés231Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention10 juin 2009
-
2 juil. 2007 à 12:48
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 2018
-
2 juil. 2007 à 22:30
lorsque je compile mon code sur vba j'ai un message d'erreur "incompatibilité de type"
strTabName=CDE20070702090603189.txt
je voudrais savoir comment il faut que je declare mon table pourqu'il prend en compte le format de strtabname.
merci
dim tableau
If Len(strTabName(0)) >= 2 Then
imax = imax + 1
ReDim Preserve Tableau(2, imax)
Tableau(1, imax) = strTabName(0)
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 2 juil. 2007 à 21:02
Bonsoir [auteurdetail.aspx?ID=499829 h_adil] ,
Bonsoir Exploreur, MPI et Jacques,
Ne prenez pas peur au script proposé ci-dessous ....
Notre ami "h_adil" a eu la bienveillance d'ouvrir, pour son petit problème, de nombreux topics
qui se différencient par le nom des fichiers. Son but étant de les importer dans une base Access.
Si tous ses fichiers commencent par CDE, il lui suffit d'adapter le script en vb6
Option explicit
Call TriRepertoire
Sub TriRepertoire()
Dim objFso, objShell
Dim strDesktop, strPath, strFile
Dim imax, i, j, k, bpermute 'liste
Dim Tableau()
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
strDesktop = objShell.SpecialFolders("Desktop")
strPath = objShell.SpecialFolders(4) & "\fichiercde"
imax = 0
For Each strFile In objFso.GetFolder(strPath).Files
imax = imax + 1
ReDim Preserve Tableau(imax)
Tableau(imax) = strFile.Name
Next
bpermute = True
Do While bpermute = True
bpermute = False
For j = 1 To imax - 1
If Tableau(j) > Tableau(j + 1) Then
cprovisoire = Tableau(j)
Tableau(j) = Tableau(j + 1)
Tableau(j + 1) = cprovisoire
bpermute = True
End If
Next
Loop
'Affichage trié du répertoire
For k = 1 To imax
'liste = liste & Tableau(k) &vbCrLf
'If k = imax Then MsgBox "liste complète triée" &vbCrLf& liste
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 2 juil. 2007 à 14:37
Bonjour,
Sage question, MPI !
et, avant même de "poster", notre ami aurait pu avoir le réflexe de faire ceci :
Private Sub Command1_Click()
strTabName = CDE20070702090603189.txt
MsgBox Len(strTabName(0))
End Sub
pour décourvir l'incohérence, incohérence qui aurait été là également avec :
Private Sub Command1_Click()
strTabName = "CDE20070702090603189.txt"
MsgBox Len(strTabName(0))
End Sub
mais n'aurait pas, par exemple, été avec :
Private Sub Command1_Click()
strTabName = Array("CDE20070702090603189.txt")
MsgBox Len(strTabName(0))
End Sub
Mais voilà... il est tellement plus facile de crier "Bobo" que de tenter, sinon de comprendre, tout au moins ... de "vérifier" l'état des choses...
C'est, je le crains, devenu une habitude... que je déplore ...
J'arrive à comprendre que l'on ne sait pas encore. Mais je ne parviens pas à comprendre l'absence de réflexes naturels (voilà un pléonasme, tiens...)
Vous n’avez pas trouvé la réponse que vous recherchez ?
h_adil
Messages postés231Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention10 juin 2009 2 juil. 2007 à 15:28
exemple de nom de fichier :
CDE20070702090603189.txt
CDE20070702090604189.txt
CDE200707020906031891.txt
CDE200707020906031892.txt
le strTabName c'est un tableau
For Each strFile In objFso.GetFolder(strPath).Files
strTabName = Split(strFile.Name, ".txt") If UBound(strTabName) 1 And UCase(Right(strFile.Name, 4)) ".TXT" Then
If Len(strTabName(0)) >= 2 Then
imax = imax + 1
ReDim Tableau(1, imax) As String 'Preserve
Tableau(1, imax) = strTabName(0)
Tableau(2, imax) = strTabName(1)
h_adil
Messages postés231Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention10 juin 2009 2 juil. 2007 à 15:28
exemple de nom de fichier :
CDE20070702090603189.txt
CDE20070702090604189.txt
CDE200707020906031891.txt
CDE200707020906031892.txt
le strTabName c'est un tableau
Dim objFso, objShell
Dim strDesktop, strPath, strFile, strTabName Dim i, imax, z, valeur, Cible, liste
Dim Tableau
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
strDesktop = objShell.SpecialFolders("Desktop")
strPath = objShell.SpecialFolders(4) & "\fichiercde"
For Each strFile In objFso.GetFolder(strPath).Files
strTabName = Split(strFile.Name, ".txt") If UBound(strTabName) 1 And UCase(Right(strFile.Name, 4)) ".TXT" Then
If Len(strTabName(0)) >= 2 Then
imax = imax + 1
ReDim Tableau(1, imax) As String 'Preserve
Tableau(1, imax) = strTabName(0)
Tableau(2, imax) = strTabName(1)
Si, par contre, tu utilises le point dans ton Split, le tableau aura bien 2 items
strTabName = Split(strFile.Name, ".")
Tableau(1, imax) = strTabName(0) ' nom du fichier
Tableau(2, imax) = strTabName(1) ' .txt
Mais encore là... à quoi ça sert de stocker le nom et l'extension ? et pourquoi utiliser un tableau à 2 dimensions ???
Et si tu lisais tous les fichiers ayant .txt comme extension, est-ce que ça causerait un problème ? Dois-tu ouvrir (ou sauvegarder) seulement certains de ces fichiers ? si oui, selon quels critères ?
h_adil
Messages postés231Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention10 juin 2009 2 juil. 2007 à 20:32
en faite ce que je veux un programme capale d'importer des fichiers (que je connais pas le nombre) puis de deplacer ces fichiers après importation dans un autre repretoir (traité).
je suis pas un devellopeur pro, j'essaye de comprendre le programme puis je l'adapte.
est ce vous avez des idées pourquer sa serai plus simple je te remercié
programation .....
h_adil
Messages postés231Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention10 juin 2009 2 juil. 2007 à 21:23
MERCI BEUCOUP JEAN-MARC, en faite c'est ça ce que je veux.
j'ai juste une question : si je veut déplacer chaque fichier importer dans un autre repretoir historique (couper/coller). j'utilise quelle synthaxe?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 2 juil. 2007 à 21:34
Voici un bout de code te permettant de lire chaque fichier .txt d'un répertoire et de le déplacer par la suite, sans devoir utiliser le FileSystemObject.
Sub LireLesFichiers()
Dim CheminSource As String, CheminDest As String, Fichier As Variant
'Changer les chemins selon les besoins - terminés par un \
CheminSource = "C:"
CheminDest = "D:"
'Rechercher tous les fichiers .txt
Fichier = Dir(CheminSource & " *.txt ")
While Fichier <> ""
'Traitement du fichier
MsgBox Fichier
'une fois traité on le déplace
FileCopy CheminSource & Fichier, CheminDest & Fichier
'une fois déplacé, on peut le détruire
Kill CheminSource & Fichier
h_adil
Messages postés231Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention10 juin 2009 2 juil. 2007 à 21:43
je peux utilisé un movefile avec une boucle for i=1 to imax? je pense que c'est plus simple surtous je connais le nombre du fichier que j'ai dans mon repertoir. que pensez vous?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 2 juil. 2007 à 21:46
Salut Jean-Marc (et les autres...)
Effectivement, il y a eu plusieurs posts là-dessus et comme tu peux voir, je n'ai pas cherché à faire le traitement des fichiers... seulement la lecture des fichiers texte sans vérification de nom.
Perso, je préfère me passer du scrrun.dll (question de choix et de compatibilité...)
h_adil
Messages postés231Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention10 juin 2009 2 juil. 2007 à 21:59
j'ai une question j'ai insseré le filecopy et le kill dans la premiere procedure pour faire le traitement dans la meme procedure. mais j'ai un message derreur chemin introuvable. et pourtant j'ai bien declarer mon chemin dorigine et mon chemin de destination
For k = 1 To imax
'liste = liste & Tableau(k) &vbCrLf
'If k = imax Then MsgBox "liste complète triée" &vbCrLf& liste
h_adil
Messages postés231Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention10 juin 2009 2 juil. 2007 à 22:27
oui je l'ai trouvé, c'etait pas evident mais je suis arrivé a faire ce que je voulais faire.
merci beaucoup pour votre aide
merci JEAN MARC
merci MPI
merci JMFMARQUES
merci EXPLOREUR
DONC je vous montre mon code depuis le depuis jusqu'a la fin : (en esperant que demain fonctionne au travail )
le code suivant permet de changer l'extention d'un fichier, puis importer un par un les fichiers existant dans un dossier dans une base de données Accees. puis de faire les traitements dans access.
Sub TriRep()
Dim objFso, objShell
Dim strDesktop, strPath, strFile
Dim imax, i, j, k, bpermute 'liste
Dim Tableau()
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
strDesktop = objShell.SpecialFolders("Desktop")
strPath = objShell.SpecialFolders(4) & "\dossier\traites"
CheminSource = "C:\Documents and Settings\adil\Desktop\dossier\traites"
CheminDest = "C:\Documents and Settings\adil\Desktop\dossier\old"
imax = 0
For Each strFile In objFso.GetFolder(strPath).Files
imax = imax + 1
ReDim Preserve Tableau(imax)
Tableau(imax) = strFile.Name
Next
bpermute = True
Do While bpermute = True
bpermute = False
For j = 1 To imax - 1
If Tableau(j) > Tableau(j + 1) Then
cprovisoire = Tableau(j)
Tableau(j) = Tableau(j + 1)
Tableau(j + 1) = cprovisoire
bpermute = True
End If
Next
Loop
'Affichage trié du répertoire
For k = 1 To imax
'liste = liste & Tableau(k) &vbCrLf
'If k = imax Then MsgBox "liste complète triée" &vbCrLf& liste
DoCmd.RunMacro ("ECLATER")
DoCmd.RunMacro ("DECOMPOSER")
End Sub
juste pour info : pour excuter une commande MS dos a partir de vba il faut utiliser la synthaxe suivante :
'Dim RetVal
'RetVal = Shell("C:\Documents and Settings\adil\Desktop\dossier\transformerextention.bat", 1)
programation .....