[vb6] Traitement de fichiers en masse
Fermé
Sauvegarde2
Messages postés
205
Date d'inscription
dimanche 14 décembre 2008
Statut
Membre
Dernière intervention
11 janvier 2015
-
28 mars 2009 à 00:05
Sauvegarde2 Messages postés 205 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 11 janvier 2015 - 29 mars 2009 à 23:03
Sauvegarde2 Messages postés 205 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 11 janvier 2015 - 29 mars 2009 à 23:03
A voir également:
- [vb6] Traitement de fichiers en masse
- Renommer des fichiers en masse - Guide
- Vb6 - Télécharger - Divers Utilitaires
- Wetransfer gratuit fichiers lourd - Guide
- Explorateur de fichiers - Guide
- Traitement de texte gratuit - Guide
5 réponses
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
28 mars 2009 à 10:31
28 mars 2009 à 10:31
Bonjour,
Comme je n'ai pas tes fichiers ni tes données,j'ai un peu adapter pour tester...
A+
Comme je n'ai pas tes fichiers ni tes données,j'ai un peu adapter pour tester...
Sub Rép() Dim Dossier As Object Dim Fichiers As Object, Nom As String Dim SG As Integer, SD As Integer Dim Fso As Object Set Fso = CreateObject("Scripting.FileSystemObject") Set Dossier = Fso.getFolder("D:\test\") Set Fichiers = Dossier.Files SG = 2 'SG = SupGauche.Text SD = 4 'SD = SupDroite.Text i = 1 For Each Fichier In Fichiers AddGauche = "0" & i: AddDroite = ".txt" Nom = Fichier.Name Nom = Mid(Nom, SG + 1) Nom = Left(Nom, Len(Nom) - SD) Nom = AddGauche & Nom & AddDroite Fichier.Name = Nom i = i + 1 Next Set Fso = Nothing End Sub
A+
Sauvegarde2
Messages postés
205
Date d'inscription
dimanche 14 décembre 2008
Statut
Membre
Dernière intervention
11 janvier 2015
261
28 mars 2009 à 23:47
28 mars 2009 à 23:47
Merci mais je ne voulais pas mettre de numéros dans mes fichiers. Je voulais juste modifier les noms.
J'ai essayé ton code sans le i mais ça ne marche pas non plus.
En fait ça ne fonctionne que sur un petit nombre de fichiers. Dés que j'en traite un nombre important, le programme déconne et ajoute des bouts de AddGauche à l'infini.
Voici le code mis à jour :
Private Sub Go_Click()
Go.Caption = "C'est parti !"
Dim Dossier As Object
Dim Fichiers As Object
Dim Nom As String
Dim SupNom As String
Dim AddNom As String
Dim Longueur As Integer
Dim Fso As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
If (Fso.FolderExists(Path.Text) = False) Or _
(IsNumeric(SupGauche) = False) Or _
(IsNumeric(SupDroite) = False) Or _
(SupGauche.Text < 0) Or _
(SupDroite.Text < 0) Or _
(AddGauche.Text = "Ajouter des caratères par la gauche ?") Or _
(AddDroite.Text = "Ajouter des caratères par la droite ?") Then
Go.Caption = "Erreur ! Remplissez bien tous les champs."
Exit Sub
End If
Set Dossier = Fso.getFolder(Path.Text)
Set Fichiers = Dossier.Files
For Each Fichier In Fichiers
Longueur = Len(Fichier.Name)
SupNom = Mid(Fichier.Name, SupGauche + 1, (Longueur - SupDroite))
AddNom = AddGauche & SupNom & AddDroite
If Fichier.Name <> AddNom Then
Fichier.Name = AddNom
End If
Next Fichier
Exit Sub
Erreur: Go.Caption = "Erreur ! Plusieurs fichiers portent le même nom."
Exit Sub
End Sub
Est ce que quelqu'un aurait une idée, ne serait ce que pour ralentir le code ?
J'ai essayé ton code sans le i mais ça ne marche pas non plus.
En fait ça ne fonctionne que sur un petit nombre de fichiers. Dés que j'en traite un nombre important, le programme déconne et ajoute des bouts de AddGauche à l'infini.
Voici le code mis à jour :
Private Sub Go_Click()
Go.Caption = "C'est parti !"
Dim Dossier As Object
Dim Fichiers As Object
Dim Nom As String
Dim SupNom As String
Dim AddNom As String
Dim Longueur As Integer
Dim Fso As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
If (Fso.FolderExists(Path.Text) = False) Or _
(IsNumeric(SupGauche) = False) Or _
(IsNumeric(SupDroite) = False) Or _
(SupGauche.Text < 0) Or _
(SupDroite.Text < 0) Or _
(AddGauche.Text = "Ajouter des caratères par la gauche ?") Or _
(AddDroite.Text = "Ajouter des caratères par la droite ?") Then
Go.Caption = "Erreur ! Remplissez bien tous les champs."
Exit Sub
End If
Set Dossier = Fso.getFolder(Path.Text)
Set Fichiers = Dossier.Files
For Each Fichier In Fichiers
Longueur = Len(Fichier.Name)
SupNom = Mid(Fichier.Name, SupGauche + 1, (Longueur - SupDroite))
AddNom = AddGauche & SupNom & AddDroite
If Fichier.Name <> AddNom Then
Fichier.Name = AddNom
End If
Next Fichier
Exit Sub
Erreur: Go.Caption = "Erreur ! Plusieurs fichiers portent le même nom."
Exit Sub
End Sub
Est ce que quelqu'un aurait une idée, ne serait ce que pour ralentir le code ?
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
29 mars 2009 à 10:00
29 mars 2009 à 10:00
Ca irait mieux si tu suivais mon conseil, >>> employer une variable tampon >> "Nom".
J'ai tester et ça fonctionne impec >> Mais si tu veux pas... C'est ton problème
A+
J'ai tester et ça fonctionne impec >> Mais si tu veux pas... C'est ton problème
A+
Sauvegarde2
Messages postés
205
Date d'inscription
dimanche 14 décembre 2008
Statut
Membre
Dernière intervention
11 janvier 2015
261
29 mars 2009 à 20:00
29 mars 2009 à 20:00
J'ai déja testé ton idée et ça n'a pas marché, c'est pour ca que j'ai essayé avec plusieurs variables.
Le code ne fonctionne que sur un petit nombre de fichiers, c'est pour ça que tes tests ont fonctionné.
Mes tests sur 72 fichiers text vides foirent à chaques fois :
For Each Fichier In Fichiers
Dim Nom As String
Dim Longueur As Integer
Longueur = Len(Fichier.Name)
Nom = Fichier.Name
Nom = AddGauche & (Mid(Nom, SupGauche + 1, (Longueur - SupDroite))) & AddDroite
Fichier.Name = Nom
Next Fichier
ECHEC
For Each Fichier In Fichiers
Dim Nom As String
Dim SupNom As String
Dim AddNom As String
Dim Longueur As Integer
Nom = Fichier.Name
Longueur = Len(Fichier.Name)
SupNom = Mid(Nom, SupGauche + 1, (Longueur - SupDroite))
AddNom = AddGauche & SupNom & AddDroite
If Fichier.Name <> AddNom Then
Fichier.Name = AddNom
End If
Nom = ""
SupNom = ""
AddNom = ""
Longueur = 0
Next Fichier
ECHEC
Et ça foire aussi avec les fonction left/right. Je voudrais essayé de limiter le nombre de fichiers traités simultanément mais je ne vois pas comme avec une boucle for each :/
En tout cas merci pour ton aide.
Le code ne fonctionne que sur un petit nombre de fichiers, c'est pour ça que tes tests ont fonctionné.
Mes tests sur 72 fichiers text vides foirent à chaques fois :
For Each Fichier In Fichiers
Dim Nom As String
Dim Longueur As Integer
Longueur = Len(Fichier.Name)
Nom = Fichier.Name
Nom = AddGauche & (Mid(Nom, SupGauche + 1, (Longueur - SupDroite))) & AddDroite
Fichier.Name = Nom
Next Fichier
ECHEC
For Each Fichier In Fichiers
Dim Nom As String
Dim SupNom As String
Dim AddNom As String
Dim Longueur As Integer
Nom = Fichier.Name
Longueur = Len(Fichier.Name)
SupNom = Mid(Nom, SupGauche + 1, (Longueur - SupDroite))
AddNom = AddGauche & SupNom & AddDroite
If Fichier.Name <> AddNom Then
Fichier.Name = AddNom
End If
Nom = ""
SupNom = ""
AddNom = ""
Longueur = 0
Next Fichier
ECHEC
Et ça foire aussi avec les fonction left/right. Je voudrais essayé de limiter le nombre de fichiers traités simultanément mais je ne vois pas comme avec une boucle for each :/
En tout cas merci pour ton aide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sauvegarde2
Messages postés
205
Date d'inscription
dimanche 14 décembre 2008
Statut
Membre
Dernière intervention
11 janvier 2015
261
29 mars 2009 à 23:03
29 mars 2009 à 23:03
J'ai finis, a force de tâtonnements, par trouver une solution :
Set Dossier = Fso.getFolder(Path.Text)
Set Fichiers = Dossier.Files
Dim SupNom As String
Dim AddNom As String
Dim Longueur As Integer
Dim X As Integer
X = 0
If SupGauche + SupDroite > 0 Then
For Each Fichier In Fichiers
Fichier.Name = Mid(Fichier.Name, 1 + SupGauche, (Len(Fichier.Name) - SupDroite))
X = X + 1
If X = Fichiers.Count Then
Exit For
End If
Next Fichier
End If
X = 0
If Len(AddGauche & AddDroite) > 0 Then
For Each Fichier In Fichiers
AddNom = Fichier.Name
AddNom = AddGauche & Fichier.Name & AddDroite
Fichier.Name = AddNom
X = X + 1
If X = Fichiers.Count Then
Exit For
End If
Next Fichier
End If
En fait le programme répétait la boucle AddGauche/Droite infiniment et la boucle SupGauche/Droite comme il voulait. (D'où le bordel...)
Y'a donc fallu que je stop moi-même les boucles pour que ça fonctionne correctement.
Je comprend pas bien pourquoi la boucle for each est aussi foireuse :/
Set Dossier = Fso.getFolder(Path.Text)
Set Fichiers = Dossier.Files
Dim SupNom As String
Dim AddNom As String
Dim Longueur As Integer
Dim X As Integer
X = 0
If SupGauche + SupDroite > 0 Then
For Each Fichier In Fichiers
Fichier.Name = Mid(Fichier.Name, 1 + SupGauche, (Len(Fichier.Name) - SupDroite))
X = X + 1
If X = Fichiers.Count Then
Exit For
End If
Next Fichier
End If
X = 0
If Len(AddGauche & AddDroite) > 0 Then
For Each Fichier In Fichiers
AddNom = Fichier.Name
AddNom = AddGauche & Fichier.Name & AddDroite
Fichier.Name = AddNom
X = X + 1
If X = Fichiers.Count Then
Exit For
End If
Next Fichier
End If
En fait le programme répétait la boucle AddGauche/Droite infiniment et la boucle SupGauche/Droite comme il voulait. (D'où le bordel...)
Y'a donc fallu que je stop moi-même les boucles pour que ça fonctionne correctement.
Je comprend pas bien pourquoi la boucle for each est aussi foireuse :/