|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
TRAITEMENT DES PHOTOS (PAR REPERTOIRE)
Information sur la source
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
- ' 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
-
-
' 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
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 03 février 2007 08:14:38 :
- j'ai oublie les fenetres....... sorry
- 03 février 2007 19:38:36 :
- En fait il y avait un bug sur le rafraichissement de l objet repertoire. Ce bug était dans le Select Case Lecteur. C'est corrigé les sources sont à jour
- 05 février 2007 07:18:34 :
- Voila j'ai corrigé le problème des numéros de fichiers (je ne me suis pas trop cassé la tête...... j'envoie les nouveaux nom de fichier dans une texte box.....) puis pour le fun j'ai rajouté une barre de progression........ En revanche pour le probleme de la scrollbar qui disparaît la j'ai pas le souci chez moi donc je suis un peu emm..... pour trouver la solution......
Voila
merci encore de vos commentaires.
Bye
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Renommer plusieurs fichiers photos en une fois [ par lesud83 ]
Bonjour à tous les membres. Je suis tout nouveau sur ce site. Je suis à la recherche d'un petit soft qui me permettrait de renommer dans l'ordre que j
Extraire des fichiers olé d'un document word le tout dans un répertoire [ par hervoi ]
Bonjour,je suis débutant en VBA (hé oui j'ai bien lu quelques livres mais je bloque)Voilà le but du jeux:Celui voudrait avoir un script qui permet d'e
URGENT!!!! nombre de fichiers dans répertoire et sous-répertoires [ par yomm ]
Salut j'ai besoin d'aide pour savoir combien il y a de fichiers dans un répertoire, sous-répertoires compris......si possible un code rapide...merci
VB.Net Boucle pour connaitre l'ensemble des répertoire [ par MagDix ]
BonjourJe code des truc mais je ne réussi pas à trouver la bonne facon de faire.J'ai un répertoire C:\Mes Images qui a quelques centaines de répertoir
renommer fichiers en vrac [ par jeanluc065 ]
Bonjour à toutes et tous, Depuis Access 2002, en VBA, je voudrais renommer tous les fichiers se trouvant dans un répertoire déterminé. Le nouveau nom
Renommer fichier dans un filelistbox ou autres sous VB6 [ par micmond ]
Bonjour,J'ai Visual Basic 6.01. Renommer un fichier sous l'application Visual Basic J'ai une filelistbox qui affiche une liste de fichiers d'une direc
Lister les fichiers d'un répertoire. [ par Neotaxi ]
Bonjour, j'ai cherché toute la journé comment faire une fonction browse.J'ai trouvé comment faire un browse avec une folderbrowsedialog, Mais elle ne
Lister les fichiers dans un répertoire sous VB2005 [ par PHILOUVB ]
Bonjour,J'ai un répertoire (C:\Répertoire) qui contient un certain nombre de fichiers.J'aimerais savoir comment je peux connaitre le nombre total de f
Transformer une extention de fichier [ par Konyl ]
Bonjour, Je cherche le moyen de renomer des fichiers dans un répertoire donné via Excel VB. Je souhaites ouvrir des .DBF dans excel puis les enregistr
Changer le répertoire racine.... [ par spike911 ]
Bonjours, je travail en Visual Basic 6, j'utilise des fichiers pour mon programme qui se retrouve dans le même répertoire ou dans un sous répertoire d
|
Téléchargements
Logiciels à télécharger sur le même thème :
|