Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Renommer plusieurs fichiers ensemble
Nous poursuivons la découverte des actions qu'il est possible d'entreprendre sur les
fichiers et
dossiers du disque, grâce au
code VBA. N'avez-vous jamais souhaité pouvoir renommer en masse des photos de vacances, prises avec un appareil numérique. Dans ces conditions, elles sont souvent toutes dotées d'intitulés codés avec des chiffres par exemple. Lorsqu'elles correspondent à une même thématique, il est intéressant et productif de pouvoir leur attribuer un préfixe textuel explicite avec un suffixe automatiquement incrémenté à l'aide de chiffres. C'est l'application que nous proposons de monter ici en laissant à l'utilisateur la possibilité de désigner
plusieurs fichiers à renommer, par le biais d'une
boîte de dialogue Office standard.
Base de données Access à télécharger
Pour développer cette solution, nous suggérons d'appuyer les travaux sur un
formulaire Access accueillant un
bouton destiné à désigner des
fichiers à renommer dans un
dossier.
- Télécharger le fichier compressé renommer-fichiers-ensemble.rar en cliquant sur ce lien,
- Le décompresser dans le dossier de votre choix,
- Double cliquer sur le fichier résultant pour l'ouvrir dans Access,
- Puis, cliquer sur le bouton Activer le contenu du bandeau de sécurité,
- Dans le volet de navigation, double cliquer sur le formulaire fExport pour l'exécuter,
Ce
formulaire est doté d'un bouton et d'une zone de texte. La zone de texte doit être utilisée pour définir le préfixe commun à attribuer aux fichiers à désigner. Et précisément, le bouton à l'icône du dossier doit offrir à l'utilisateur une
boîte de dialogue lui permettant de sélectionner
plusieurs fichiers à la fois. A validation, ces fichiers doivent être renommés avec ce même préfixe mais tous suffixés d'un numéro incrémenté pour les différencier.
Certes, il existe une méthode de présélection des fichiers et de renommage massif (F2) avec l'explorateur Windows. Mais le numéro incrémenté entre parenthèses est disgracieux. Nous souhaitons maîtriser ces noms pour attribuer des suffixes que nous pourrions personnaliser à souhait.
Les variables
Pour débuter le développement, nous avons besoin de
trois variables. La première, un objet, doit offrir cette
boîte de dialogue de multi sélection. La deuxième doit représenter un fichier au sens large pour parcourir ceux sélectionnés. La dernière doit être un compteur de boucle pour l'incrémentation.
- A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
- Dans les propositions, choisir le mode création,
- Sur le formulaire en conception, cliquer sur le bouton à l'icône du dossier,
- Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
- Cliquer sur le petit bouton associé à son événement Au clic,
- Dans la boîte de dialogue qui suit, choisir le Générateur de code et valider par Ok,
Nous basculons ainsi dans l'
éditeur VBA Access entre les bornes de la
procédure événementielle cible_Click.
cible est le nom du bouton. Ce code se déclenchera donc au clic sur ce bouton. Remarque : la référence à Microsoft Office a déjà été ajoutée au projet pour les boîtes de dialogue.
...
Dim boite As FileDialog
Dim leFichier As Variant: Dim compteur As Byte
...
L'objet de type
FileDialog doit servir à instancier la classe permettant de piloter les
boîtes de dialogue Office standard. La
variable leFichier prendra son type dans une
boucle For Each pour parcourir tous les fichiers sélectionnés par l'utilisateur par le biais de la
boîte de dialogue Office. La
variable compteur, typée comme un
entier court, doit suivre le processus de renommage pour attribuer des numéros incrémentés à ces noms de fichiers modifiés.
Tester le préfixe
La suite du traitement ne peut être entreprise que dans la mesure où l'utilisateur a bien saisi un nom commun à attribuer aux fichiers sélectionnés. En d'autres termes, si la zone de texte qui est nommée
prefixe est vide, le processus doit être avorté et l'utilisateur doit en être notifié.
- A la suite du code, ajouter les instructions VBA suivantes :
...
If prefixe.Value = "" Or IsNull(prefixe.Value) Then
MsgBox "Vous devez définir un nom global pour renommer tous les fichiers à sélectionner."
Exit Sub
End If
...
Si la zone de texte est vide ou non renseignée (prefixe.Value = "" Or IsNull(prefixe.Value)), nous en avertissons l'utilisateur par le biais d'une boîte de message grâce à la
fonction MsgBox. Dans l'enchaînement, nous coupons l'exécution en mettant fin au programme (Exit Sub).
Boîte de dialogue multi-sélection
Nous devons maintenant instancier la
classe des boîtes de dialogue pour que notre
objet boite hérite des propriétés et méthodes permettant de les manipuler.
- A la suite du code, ajouter les instructions VBA suivantes :
...
Set boite = Application.FileDialog(msoFileDialogFilePicker)
boite.AllowMultiSelect = True
boite.Show
...
Avec le
paramètre msoFileDialogFilePicker passé à la
méthode FileDialog de l'
objet Application, nous initialisons une
boîte de dialogue Office pour
manipuler les fichiers. Dès lors, l'
objet boite ainsi engagé hérite de la
propriété AllowMultiSelect que nous réglons Ã
True. C'est ainsi que nous permettons à l'utilisateur de désigner
plusieurs fichiers à la fois. Dans l'enchaînement, nous exploitons sa
méthode héritée Show pour afficher cette boîte de dialogue à l'écran.
Parcourir les fichiers sélectionnés
Après validation de la boîte de dialogue, c'est la
collection SelectedItems de l'
objet boite qui renseignera sur les fichiers sélectionnés par l'utilisateur. Nous devons donc
parcourir cette collection pour traiter ces fichiers les uns après les autres. Et pour cela, une
boucle For Each est nécessaire.
- A la suite du code VBA, initialiser la boucle For Each comme suit :
...
compteur = 1
For Each leFichier In boite.SelectedItems
compteur = compteur + 1
Next leFichier
...
Nous initialisons tout d'abord la
variable compteur sur l'indice 1. Dès lors, grâce à l'
objet leFichier, nous parcourons (For Each) la
collection des fichiers choisis. Pour l'instant, nous n'opérons aucun traitement dans cette boucle. Nous nous contentons d'
incrémenter la variable compteur à chaque passage. C'est elle que nous utiliserons pour différencier chaque fichier renommé avec le même préfixe.
Renommer chaque fichier sélectionné
C'est la
commande Name en VBA qui permet de renommer un fichier.
- Dans la boucle For Each, avant l'incrémentation, ajouter la ligne VBA suivante :
...
Name leFichier As Replace(prefixe.Value, " ", "-") & "-" & compteur & ".png"
...
C'est l'opérateur As qui indique comment renommer le fichier désigné. Nous lui passons le préfixe commun inscrit par l'utilisateur sur le formulaire dans la zone de texte nommée prefixe. Notez l'emploi de la
fonction Replace pour remplacer tous les espaces par des tirets. Après un tiret supplémentaire, nous associons le numéro incrémenté suivi de l'extension des fichiers.
Pour terminer, il ne nous reste plus qu'à libérer la mémoire en détruisant les deux variables objets que nous avons utilisées.
- A la fin de la procédure, ajouter les deux instructions VBA suivantes :
...
Set boite = Nothing
Set leFichier = Nothing
...
- Revenir sur le formulaire en conception (ALT + Tab) et l'exécuter (F5),
- Dans la zone préfixe, taper un texte comme : Les Alpes de Haute Provence, pour nous ici,
- Cliquer alors sur le bouton à l'icône du dossier,
- Dans la boîte de dialogue qui suit, ouvrir un sous dossier contenant des images,
- Avec la touche CTRL, sélectionner plusieurs fichiers,
- Puis, cliquer sur le bouton Ouvrir de la boîte de dialogue,
De retour sur le formulaire, rien ne s'est produit, mais en apparence seulement. Si vous ouvrez le dossier cible dans l'explorateur Windows, vous constatez avec plaisir que tous les fichiers image sélectionnés ont parfaitement été renommés avec le même préfixe et un suffixe incrémenté.