Alimenter une banque d'images automatiquement
Par Hervé Inisan le lundi 6 avril 2009, 11:40 - Formulaires - Images - Lien permanent
Cet article fait suite à l'article Gérer une banque d'images, dans lequel vous avez pu voir comment stocker une liste d'images dans une table, pour l'afficher ensuite dynamiquement sur un formulaire ou sur un état. Mais pourquoi alimenter la table manuellement, alors qu'on peut le faire à l'aide d'un peu de VBA ?
Le code VBA
Commencez par recopier tout le code VBA ci-dessous, dans un module standard de votre base Access (la banque de données que vous avez construite dans le précédent article, et qui contient la table tblImages).
' CHARGER TOUTES LES IMAGES D'UN DOSSIER DANS LA BASE
' ---
' Entrée : strDossier <- Nom du dossier à parcourir.
' strExtension <- Extension des fichiers images.
'
Sub ChargerImages( _
ByVal strDossier As String, _
Optional ByVal strExtension As String = "*.jpg")
Dim rst As DAO.Recordset
Dim strFichier As String
Dim intImages As Integer
' Ajouter un \ à la fin du dossier, si nécessaire
strDossier = AddBackslash(strDossier)
' Ouvrir la table
Set rst = CurrentDb.OpenRecordset("tblImages", dbOpenDynaset)
' Lecture des images du dossier
intImages = 0
strFichier = Dir(strDossier & strExtension, vbNormal)
While strFichier <> ""
' Ajouter l'image dans la table
rst.AddNew
rst("Nom Image") = FileNameWithoutExt(strFichier)
rst("Nom Fichier") = strFichier
rst("Dossier") = strDossier
rst.Update
intImages = intImages + 1
' On passe au fichier suivant
strFichier = Dir
Wend
' On ferme !
rst.Close
Set rst = Nothing
MsgBox "Opération terminée !" & _
vbCrLf & intImages & " ajoutée(s)", _
vbInformation
End Sub
D'autres fonctions utiles
Le code qui précède fait appel à d'autres fonctions publiées sur ce blog, notamment en ce qui concerne la gestion des fichiers et des dossiers. Consultez les articles qui suivent (et recopiez les bouts de code que vous y trouverez !) :Utiliser le code VBA
Pour "indexer" toutes les images d'un dossier, faites ceci :
- Faites apparaître la fenêtre Debug (
CTRL+G). - Tapez dans cette fenêtre quelque chose comme :
ChargerImages "C:\Users\Hervé\Pictures", "*.jpg"
- Le premier paramètre transmis est le dossier à inspecter (ici : façon Vista ; à vous d'aménager selon votre système).
- Le second paramètre donne le type d'images à indexer (l'extension, donc). Vous pouvez omettre ce paramètre, dans ce cas, ce sont les images JPG qui sont prises en compte.
Bien sûr, l'indexation n'est pas aussi fine qu'une indexation manuelle. Si votre image s'appelle Nénuphars.jpg, sa description automatique devient Nénuphars. Mais rien ne vous empêche de changer ça après !
Dans un prochain article, on verra comment ajouter une boîte de sélection de dossier, pour améliorer encore tout ça !
Pour plus de détails sur les références, consultez cette page.




Nouveau !
Commentaires
Bonjour et merci pour ce code qui fonctionne à merveille.
J'ai cependant une petite requête : serait-il possible d'y ajouter une fonction capable de n'indexer que les nouvelles images. Une bribe de code qui exluerait les fichiers déjà dans la table ? Et si oui, quel pourrait être ce code ?
Merci d'avance de votre aide et meilleures salutations.
TINTIN
Tintin > Oui, c'est possible. Dès que j'ai un moment, j'ajouterai sur le blog le bout de code qui va bien.
tout comme tintin ce bout de code m interesse beaucoup pour infos j utilise la bq image pour la gestion des mails entrant au lieu d indexer du .jpg elle indexe du .eml