Traitement des photos (par repertoire)

Soyez le premier à donner votre avis sur cette source.

Vue 8 907 fois - Téléchargée 835 fois

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

Ajouter un commentaire

Commentaires

conseildg
Messages postés
86
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
18 mars 2007
-
Intéressant ce programme.
Pour les suivants, ne serait-il pas mieux de remplacer dans le titre sur le site « traitement » par « renommer » ou « nommage » ?
capricorne83
Messages postés
48
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
15 novembre 2013
-
Geco
Ok je vais regarder le probleme et corriger cela
Didier72
Ok je n avais effecitvement pas songé au nom du lecteur je vais corriger la source

Merci a tous deux.

Bye
cs_Didier72
Messages postés
76
Date d'inscription
dimanche 10 octobre 2004
Statut
Membre
Dernière intervention
13 juin 2015
-
re

Voilà comment j'ai modifié la partie utile pour que cela fonctionne avec des Labels:

On Error GoTo gestion_erreur
lecteur = Drive1.Drive
lect = Left(lecteur, 2)
Select Case lect
Case "a:"
Z = MsgBox("Veuillez choisir un autre lecteur", vbOKOnly, " Videotheque")
Exit Sub
File1.Path = lect
End Select
File1.Pattern = "*.jpg;*.bmp;*.gif;*.htm"
Dir1.Path = lect
Exit Sub

Bye
cs_Didier72
Messages postés
76
Date d'inscription
dimanche 10 octobre 2004
Statut
Membre
Dernière intervention
13 juin 2015
-
Re

Le problème de reconnaissance d'un autre Disque reste présent:
Cela doit venir du fait que si tu mets un Label au Disque celui-ci n'est plus reconnu dans la Case.
Exemple:
Si ta partition ou autre disque dur est le d: --> C'est ok sans Label
Mais
Si ta partition ou autre disque dur est le d: [DONNEES] --> marche pas avec le label DONNEES.

Voir comment prendre en compte ta fenêtre Drive1 Drivebox pour qu'il reconnaissance l'info ..!!!

Merci

Bye
cs_geco
Messages postés
14
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
4 février 2007
-
Très bien.
Toutefois,
- il faudrait que le n° ajouté soit toujours à 3 caractères, sinon les photos sont déclassées : 1, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, etc...
- l'ascenseur du répertoire disparaît après l'affichage des fichiers.

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.