Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Redimensionner des images en VBA Access
A l'occasion du volet précédent, nous avons appris à récolter les
propriétés de fichiers images sur une
visionneuse de photos, depuis un
formulaire Access. Avec cette nouvelle étape, sur la base de la même classe et d'une nouvelle, nous allons voir comment
redimensionner automatiquement les
images du disque, selon la volonté de l'utilisateur.
Base de données Access à télécharger
Pour poursuivre les travaux, nous devons tout d'abord récupérer la
base de données de la
visionneuse d'images permettant de récolter les attributs des fichiers affichés à l'écran.
- Télécharger le fichier compressé redimensionner-images.rar en cliquant sur ce lien,
- Double cliquer sur le fichier réceptionné pour l'ouvrir dans Access,
- Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
- Dans le volet de navigation sur la gauche, double cliquer sur le formulaire nommé visionneuse,
- Sur le formulaire, cliquer sur le bouton matérialisé par l'icône d'une loupe,
- Dans la boîte de dialogue, ouvrir un dossier contenant des images,
- Puis, cliquer sur le bouton Ok, en bas de la boîte de dialogue, pour revenir sur le formulaire,
La première photo du dossier s'affiche au centre de la visionneuse. Elle est accompagnée de ses attributs dans la zone horizontale du dessous. On y trouve notamment les informations sur sa
résolution, sa
largeur et sa
hauteur. Les autres images sont restituées sur la droite du formulaire, sous forme de miniatures. Le fait de cliquer sur l'une d'entre elles l'affiche en grand format au centre de l'écran, avec ses attributs actualisés dans la zone horizontale. Il est aussi possible d'utiliser les boutons matérialisés par des flèches pour les faire défiler.
En haut à droite du formulaire, vous notez la présence d'une zone nommée
Retailler. L'utilisateur doit y inscrire les nouvelles dimensions souhaitées pour la photo active sur le formulaire. Dès lors, un clic sur le
bouton Transformer doit modifier l'image pour lui attribuer ces nouvelles côtes.
La procédure VBA
Nous devons commencer par créer la procédure de code à déclencher au clic sur le bouton intitulé
Transformer.
- 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 Transformer pour le sélectionner,
- 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, choisir le Générateur de code et valider par Ok,
C'est ainsi que nous basculons dans l'
éditeur VBA Access, entre les bornes de la
procédure événementielle transformer_Click. Son code se déclenchera au clic sur ce bouton.
Comme vous pouvez le voir, de nombreuses lignes de code existent déjà . Il s'agit du fruit des travaux sur une formation passée ayant consisté à bâtir une
visionneuse d'images en VBA Access. Mais il s'agit aussi du fruit du développement précédent pour récupérer les propriétés des images consultées.
- Dans les bornes de cette procédure, ajouter les déclarations et affectations suivantes :
Private Sub transformer_Click()
Dim objImg As Object: Dim imgOp As Object
Set objImg = CreateObject("WIA.ImageFile")
Set imgOp = CreateObject("WIA.ImageProcess")
End Sub
Nous déclarons deux
variables objets. La première est nommée
objImg. Comme précédemment, son rôle est d'instancier la
classe WIA.ImageFile grâce à la
fonction VBA CreateObject. C'est cette classe qui permet de récolter les attributs des fichiers images. Puis, nous déclarons la
variable imgOp pour instancier la classe complémentaire
WIA.ImageProcess. C'est elle qui permet d'entreprendre des opérations de transformation sur les photos désignées.
Retailler des images
Grâce à l'instanciation de cette seconde classe, nous allons maintenant pouvoir exploiter l'une de ses
collections. Elle se nomme
Filters. Comme son nom l'indique, elle permet d'engager des
filtres sur ces photos. Comprenez des
opérations de transformation qui diffèrent en fonction du paramètre passé.
- A la suite du code de la procédure, ajouter les instructions VBA suivantes :
...
imgOp.Filters.Add imgOp.FilterInfos("Scale").FilterID 'Opération de redimensionnement
imgOp.Filters(1).Properties("MaximumWidth") = nLarge.Value 'Filtre Largeur
imgOp.Filters(1).Properties("MaximumHeight") = nHaut.Value 'Filtre Hauteur
...
Nous exploitons effectivement la
collection Filters de notre
objet imgOp, avec la
méthode Add pour créer une opération de transformation. Avec le
paramètre Scale de la
propriété FilterInfos, nous indiquons que nous souhaitons agir sur les
dimensions de l'image. C'est ce que nous faisons avec les deux lignes qui suivent. Sur cette base, nous définissons les
propriétés (Properties) à modifier. Il s'agit de la
largeur (MaximumWidth) et de la
hauteur (MaximumHeight) que nous calons sur les valeurs saisies par l'utilisateur dans les
zones de texte qui se nomment respectivement
nLarge et
nHaut.
Appliquer la transformation
Pour appliquer la transformation ainsi définie, nous devons commencer par désigner explicitement l'image concernée, avec son chemin d'accès, grâce à l'
objet objImg et à sa
méthode LoadFile comme nous l'avons fait dans le volet précédent. C'est alors la
méthode Apply de l'
objet imgOp qui va permettre d'agir.
- A la suite, ajouter les instructions VBA suivantes :
...
objImg.LoadFile nom_dossier & "\" & nomF 'Chargement de l'image
Set objImg = imgOp.Apply(objImg) 'On applique le redimensionnement selon les valeurs saisies
Kill nom_dossier & "\" & nomF 'On détruit le fichier source pour le remplacer sans erreur et message
objImg.SaveFile nom_dossier & "\" & nomF
...
Après l'application des transformations (imgOp.Apply) sur l'image en cours (imgOp.Apply), nous détruisons le fichier (Kill) qui la représente pour pouvoir le remplacer par le nouveau (objImg.SaveFile), jusqu'alors redimensionné en mémoire.
Rafraîchir l'affichage
Il n'y a pas que le
code VBA qui travaille en mémoire. C'est aussi le cas du formulaire. Donc, pour visualiser rapidement les transformations opérées, nous devons le rafraîchir. Et pour cela, il suffit d'appeler la
procédure demarrage.
En effet, nous l'avions expliqué à l'occasion du volet précédent. Les informations des images sont stockées dans les tables de cette base de données. La
procédure demarrage s'occupe de les parcourir pour les charger sur le formulaire, mais au dernier indice donc.
- Pour clôturer cette procédure, ajouter les instructions VBA suivantes :
...
Set objImg = Nothing
Set imgOp = Nothing
demarrage
End Sub
...
Nous détruisons tout d'abord les deux objets puisqu'ils ne sont plus utilisés. C'est ainsi que nous les libérons de la mémoire de l'ordinateur. Puis, nous actualisons l'affichage du formulaire en appelant la procédure demarrage.
- Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
- Exécuter ce dernier par exemple avec la touche F5 du clavier,
- Cliquer sur le bouton à la loupe,
- Dans la boîte de dialogue, ouvrir un dossier contenant des images,
- Valider par Ok pour revenir sur le formulaire,
- Naviguer jusqu'à la photo souhaitée,
- Dans les zones de saisie sur la droite, inscrire les nouvelles dimensions,
- Enfin, cliquer sur le bouton intitulé Transformer,
Le formulaire se recharge aussitôt. Si vous revenez sur la photo transformée, en consultant les informations dans la barre horizontale inférieure, nous avez le plaisir de constater que l'image concernée a bien été redimensionnée comme voulu. Vous pouvez néanmoins trouver une différence sur la hauteur. Si vous n'avez pas respecté les proportions, le code VBA, lui le fera.