En bossant sur le PC d une copine j ai vu que les fichiers photos de son appareil numerique avait des noms bizarres. Afin d'optimiser cela j ai ecrit ce petit truc qui renomment les fichiers en prenant comme base le nom du repertoire. Ex repertoire Noel_2006 les photos seront renommees en Noel_2006_001, Noel_2006_002 etc......... y a plus de commentaires que de code mais au moins c est simple......
Source / Exemple :
' FrmTraitementFichiersPhotos
' Afin de pouvoir utiliser des variables dans tout le programme
' il faut les declarer(creer..) ici (fenetre principale)
' il faut savoir qu'une procedure genre private sub.... contient ses propres
' variables. Celles ci ne sont "visibles" que dans cette procedure. Afin de
' pouvoir les "voir" ou lire dans le reste du programme il faut donc leur donner
' une autre lisibilite. Celle ci s'obtient en declarant les variables dans la partie
' generale du code de la fenetre.
Public Nomrepertoire As String
Public NouveauNomFichier As String
Private Sub CmdQuitter_Click()
' fin du programme je ferme tout...........
End
End Sub
Private Sub CmdRenommez_Click()
Dim NumFichier As Integer
'initialisation des variables
NumFichier = 0
Longueur = ""
Nomrep = ""
Nomrepertoire = ""
' je verifie le format de fichier a traiter. S il est vide c est a dire non
' renseigne par l utilisateur alors par defaut je ne traite que les fichiers
' ayant une extension ".jpg" (vont pas nous faire chier ces cons d utilisateurs
' z ont qu a lire les messages qu ont leur donne...............) plutot que de
' cliquer connement sur un bouton sans savoir ce que ca va faire
If FormatATraiter = "" Then FormatATraiter = ".JPG"
' la boucle de lecture des fichers
' j initialise ici la variable NumFichier. Y a pas besoin de la declarer comme
' la variable FormatATraiter dans le general puisque que celle ci ne sera pas
' utilisee ailleurs que dans cette procedure.
' integer est un type de donnees entier (soit des valeurs comprises entre
' -32 768 et 32 767 on a pas besoin de virgules ici) en clair tant que ton traitement
' a effectuer ne depasse pas 32 767 fichiers pas de soucis..... en revanche si tu
' as 32 768 fichiers...... bin pour le dernier fichier (32 767 + 1) ca va chier
' grave !!! le programme va te generer une erreur et te virer de l application !!!
' je defini le n° de fichier a 1
NumFichier = "001"
' une autre boucle pour recuperer le nom du repertoire
' mais celle la est inversee je pars de la fin du chemin pour obtenir le nom du repertoire
Longueur = Len(Dir1.Path)
For j = 0 To Len(Dir1.Path)
caractere = Mid(Dir1.Path, Longueur, 1)
Longueur = Longueur - 1
If caractere = "\" Then Exit For
' mais la : probleme les lettres sont inversees
Nomrep = Nomrep + caractere
Next
Longueur = Len(Nomrep)
'pour les remettre dans l'ordre je refais la meme boucle.
For k = 0 To Len(Nomrep)
caractere = Mid(Nomrep, Longueur, 1)
Longueur = Longueur - 1
If caractere = "\" Then Exit For
Nomrepertoire = Nomrepertoire + caractere
If Longueur = 0 Then Exit For
Next
' j initialise ma boucle pour le traitement
' je veux traiter tous les fichiers (selon ou non l extension choisie) contenus
' dans le repertoire choisi par l'utilisateur
' alors la syntaxe en "pseudo_code" c est a dire en francais pur sera du genre
' pour chaque fichier rencontre alors je fais tel traitement
' ce qui donne en VB
MousePointer = vbHourglass
For i = 0 To File1.ListCount - 1
' ca veut dire que le fichier N°1 aura une valeur de traitement = zero
' j aurai pu dire aussi For i = 1 To File1.ListCount
' les deux modes sont possibles..il suffit d en choisir un
' la propriete file1.list(i) me donne le nom du premier fichier a traiter.
' chaque fois que le programme passe dans la boucle for/next. la variable i est
' incrementee d'une unite. Dans le cas ou je n 'aurai voulu traiter qu'un fichier sur
' deux j'aurai ajoute a la fin de l instruction for, la methode step
' (ce qui signifie "marche" ou "pas") avec la valeur 2.
nomfichier = File1.List(i)
NouveauNomDeFichier = Nomrepertoire & "_000" & NumFichier
Name Dir1.Path & "\" & File1.List(i) As Dir1.Path & "\" & UCase(NouveauNomDeFichier & FormatATraiter)
'j incremente mon numero de fichier
NumFichier = NumFichier + 1
PBar.Value = PBar.Value + (100 / (File1.ListCount - 1))
TextFicheirs.Text = TextFicheirs + (NouveauNomDeFichier & FormatATraiter) & vbCrLf
Next
MousePointer = vbNormal
' je rafraichi la liste des fichiers a traiter et le resultat apparait.
File1.Refresh
' le traitement est termine j envoie un message l indiquant
Z = MsgBox(" Traitement Terminé !" & vbCrLf & " " & NumFichier - 1 & " Fichier(s) Traité(s)", vbOKOnly, "Traitement des Photos")
' le logiciel attend donc une nouvelle demande de traitement de ta part
End Sub
Private Sub Dir1_Change()
' l objet fichier (file) recupere les fichiers de l ojbet directory (repertoire)
File1.Path = Dir1.Path
' je rafraichi l objet fichier (file)
File1.Refresh
End Sub
Private Sub Drive1_Change()
On Error GoTo gestion_erreur
lecteur = Drive1.Drive
Select Case lecteur
Case "a:"
Z = MsgBox("Veuillez choisir un autre lecteur", vbOKOnly, " Videotheque")
Exit Sub
Case "c:"
File1.Path = lecteur
Case "d:"
File1.Path = lecteur
Case "e:"
File1.Path = lecteur
Case "f:"
File1.Path = lecteur
Case "g:"
File1.Path = lecteur
Case "h:"
File1.Path = lecteur
Case "i:"
File1.Path = lecteur
Case "j:"
File1.Path = lecteur
Case "k:"
File1.Path = lecteur
Case Else
Exit Sub
End Select
File1.Pattern = "*.jpg;*.bmp;*.gif;*.htm"
Dir1.Path = lecteur
Exit Sub
gestion_erreur:
' Évalue le numéro d'erreur.
Select Case Err.Number
Case 68 ' Erreur "Peripherique non disponible".
Z = MsgBox("Pas de Disque dans le Lecteur ! Veuillez insérer un CD ou DVD", vbOKOnly, "Traitement Photo")
Drive1.Drive = "c:"
Exit Sub
Case Else
Z = MsgBox("Une erreur est survenue ! contactez l'Auteur", vbOKOnly, " Traitement Photo")
Exit Sub
End Select
Resume
End Sub
Private Sub File1_Click()
' bien que peu documentee la fonction loadpicture permet de charger une image
' le fait d'indiquer dir1.path & "\" permet de donner l emplacement exact du
' fichier à afficher. Autrement une erreur apparaitra.
Image1.Picture = LoadPicture(Dir1.Path & "\" & File1.FileName)
End Sub
Private Sub Form_Load()
' j initialise le chemin des repertoires sur C:\
Dir1.Path = "C:\"
End Sub
Private Sub OptExtension_Click()
Z = MsgBox("Dans ce cas de Figure, ne serons traités que les fichiers du Répertoire ayant une Extension que vous allez sélectionner. Voulez-vous continuer ? Oui/Non", vbOKCancel, "Traitement Répertoire")
Select Case Z
' le bouton Ok a une valeur 1 par defaut (defini par VBasic)
' Il n y a que celui la qui m interesse d ou le case else
' qui signifie "autrement"
Case 1
' un peu de double emploi mais cela te montre le cheminement
' je passe la valeur a "0" (false) pour la case a cocher
' ensuite j interdit toute saisie sur cette case
' elle devient inactive (grisee)
OptTous.Value = False
OptTous.Enabled = False
' je "montre" la fenetre du choix de fichier
' une autre idee possible aurait ete de "dessiner" sur la fenetre
' FrmTraitement un "label" (une etiquette) et une "combo" (liste deroulante)
' et de les definir (propriete "enabled" à "false" pour ensuite les rendre
' actif lorsque le programme passe ici
' mais graphiquement parlant c est pas genial
FrmChoixFormatFichier.Show
Case Else
' si le click est fait ailleurs que sur le bouton Ok alors le programme
' passera ici...........
' et donc je considere que l utilisateur ne veut pas traiter un seul format
' de fichier et je l en empeche en passant le bouton radio avec une valeur
' "fausse" c est a dire decochee........... ensuite je passe ce controle
' comme inutilisable (propriete enabled=false)
OptExtension.Value = False
OptExtension.Enabled = False
End Select
' je rends le bouton renommer actif
CmdRenommez.Enabled = True
End Sub
' FrmChoixFormatFichier
Private Sub CmdAnnuler_Click()
' sert a "decharger" la fenetre. Elle n'est plus visible et ne prend plus de place
' en memoire.
Unload Me
End Sub
Private Sub CmdOk_Click()
' je recupere dans une variable "globale" (c est a dire visible dans tout le programme)
' la valeur choisie dans la combo type de fichier
FrmTraitementFichiersPhotos.File1.Pattern = "*." & ComboChoix.Text
' une fois la valeur de la combo recuperee je decharge la fenetre active
Unload Me
End Sub
Private Sub Form_Load()
' methode pour ajouter des elements dans la combo liste de choix
ComboChoix.AddItem ("JPG")
ComboChoix.AddItem ("BMP")
ComboChoix.AddItem ("GIF")
ComboChoix.AddItem ("HTM")
End Sub
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.