Traitement des photos (par repertoire)

Description

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

Codes Sources

A voir également

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.