formateur informatique

Redimensionner des images sur un formulaire Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Redimensionner des images sur un formulaire Access
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
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.

Visionneuse d-images VBA Access avec attributs de fichiers

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,
Modifier les dimensions des images par le code VBA Access

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.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn