[vb6] Traitement de fichiers en masse
Sauvegarde2
Messages postés
205
Date d'inscription
Statut
Membre
Dernière intervention
-
Sauvegarde2 Messages postés 205 Date d'inscription Statut Membre Dernière intervention -
Sauvegarde2 Messages postés 205 Date d'inscription Statut Membre Dernière intervention -
Bonjour, j'ai fait un programme qui renomme tous les fichiers d'un même dossier.
Dim Dossier As Object
Dim Fichiers As Object
Dim Longueur As Integer
Dim Fso As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
If Fso.FolderExists(Path.Text) = False Then
Erreur
ElseIf IsNumeric(SupGauche) = False Then
Erreur
ElseIf SupGauche.Text < 0 Then
Erreur
ElseIf SupDroite.Text < 0 Then
Erreur
ElseIf IsNumeric(SupDroite) = False Then
Erreur
ElseIf AddGauche.Text = "Ajouter des caratères par la gauche ?" Then
Erreur
ElseIf AddDroite.Text = "Ajouter des caratères par la droite ?" Then
Erreur
End If
Set Dossier = Fso.getFolder(Path.Text)
Set Fichiers = Dossier.Files
For Each Fichier In Fichiers
Longueur = Len(Fichier.Name)
Fichier.Name = Right(Fichier.Name, Longueur - SupGauche.Text)
Fichier.Name = Left(Fichier.Name, Longueur - SupDroite.Text)
Fichier.Name = AddGauche & Fichier.Name & AddDroite
Next
SupGauche/subdroite sont des nombres fournis par l'utilisateur.
AddGauche/adddroite sont des caractères fournis par l'utilisateur.
Le programme fonctionne de manière completement chaotique, enlevant plusieurs caractères alors que je dit "1", répétant plusieurs fois les chaine de caractères etc
Pourriez vous me dire pourquoi ?
Dim Dossier As Object
Dim Fichiers As Object
Dim Longueur As Integer
Dim Fso As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
If Fso.FolderExists(Path.Text) = False Then
Erreur
ElseIf IsNumeric(SupGauche) = False Then
Erreur
ElseIf SupGauche.Text < 0 Then
Erreur
ElseIf SupDroite.Text < 0 Then
Erreur
ElseIf IsNumeric(SupDroite) = False Then
Erreur
ElseIf AddGauche.Text = "Ajouter des caratères par la gauche ?" Then
Erreur
ElseIf AddDroite.Text = "Ajouter des caratères par la droite ?" Then
Erreur
End If
Set Dossier = Fso.getFolder(Path.Text)
Set Fichiers = Dossier.Files
For Each Fichier In Fichiers
Longueur = Len(Fichier.Name)
Fichier.Name = Right(Fichier.Name, Longueur - SupGauche.Text)
Fichier.Name = Left(Fichier.Name, Longueur - SupDroite.Text)
Fichier.Name = AddGauche & Fichier.Name & AddDroite
Next
SupGauche/subdroite sont des nombres fournis par l'utilisateur.
AddGauche/adddroite sont des caractères fournis par l'utilisateur.
Le programme fonctionne de manière completement chaotique, enlevant plusieurs caractères alors que je dit "1", répétant plusieurs fois les chaine de caractères etc
Pourriez vous me dire pourquoi ?
A voir également:
- [vb6] Traitement de fichiers en masse
- Renommer des fichiers en masse - Guide
- Vb6 - Télécharger - Divers Utilitaires
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Traitement de texte gratuit - Guide
- Explorateur de fichiers - Guide
5 réponses
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+
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 ?
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+
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
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 :/