IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

VBA pour afficher une image sur un formulaire de recherche [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Directeur technique
    Inscrit en
    Octobre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 40
    Points : 20
    Points
    20
    Par défaut VBA pour afficher une image sur un formulaire de recherche
    Bonjour,
    Malgré mes recherche suite au développement d'une base de donnée sur le theme de la collection, pour laquelle je suis presque au bout, j'ai besoin de votre aide pour la visualisation d'une image liée a un formulaire de recherche multicritères. (F_Recherche)
    La recherche se passe bien et les résultats sont affiches dans un cadre ( lstResultat )sous forme de tableau qui reproduit l'architecture de la table sur laquelle ont a execute la recherche.
    Pour exemple, pour les résultats sur la table des monnaies (T_Monnaie) apparaissent dans les colonnes correspondantes aux champs :
    ID_Monnaie
    Attribution
    Catégorie
    Nom_Image

    ....
    Si je fais un double clic sur une des lignes, j'ouvre bien le formulaire en question, ca ca fonctionne bien aussi, quel que soit la table sur laquelle j'effectue la recherche.

    Je voudrais visualiser l'image sur un clic, c'est la que le bat blesse.
    J'ai créer un cadre pour la visualisation de l'image (imgImage)
    L'image n'est pas intégrée dans le fichier, elle est liée et pour pouvoir la visualiser je dois d'une, récupérer les informations Attribution, Catégorie et Nom_Image pour reconstruire le chemin qui est de la forme :
    CheminImage = CurrentProject.Path \Monnaies\Catégorie\Attribution\Nom_Image

    J'ai essaye de passer avec une fonction Recordset (en suivant les Tutos) et Select From mais ca coince vraiment depuis un moment... Je ne réussis qu'a récupérer le (bon) numéro d'ID_Monnaie et pas le reste...


    Merci d'avance pour votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Si toutes les infos sont dans ta table T_Monnaie, ca devrait etre quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function LireInfoImage(prmID_Monnaie as long) as string
        dim result as string
        dim db as dao.database:set db=currentdb
        dim r as dao.recordset:set r=db.OpenRecordset("T_Monnaie",dbOpenSnapshot)
        call r.findfirst("ID_Monnaie=" & prmID_Monnaie)
     
        If not r.nomatch then
            result=CurrentProject.Path & "\Monnaie\" & r![Catégorie] & "\" & r![Attribution] & "\" & r![Nom_Image]
        end if
     
        r.close:set r=nothing
        db.close:set db=nothing
    end function
    A l'utilisation c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.TonControleImage.Picture=LireInfoImage(IciUnIDValide)
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Directeur technique
    Inscrit en
    Octobre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Bonsoir Marot,
    Merci pour ton aide,
    Je comprends le principe et j’étais totalement a l'ouest avec mon idée .
    Je vais essayer ca de suite et la decliner pour les deux autres Tables qui peuvent également faire partie d'une recherche dans le meme formulaire.
    Je reviendrai pour le résultat
    Merci encore
    Strig

  4. #4
    Membre à l'essai
    Homme Profil pro
    Directeur technique
    Inscrit en
    Octobre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Re- bonsoir
    J'ai fait plusieurs manips, malheureusement ca ne fonctionne pas.

    Pour avancer, j'ai vérifier plusieurs choses :
    Que les references DAO sont bien presentes, a priori oui, meme si je ne peux cocher Microsoft DAO 3.6 Object Library, je reçois un message "Nom de module,... déjà utilise!" J'ai aussi un bout de code qui me remplit des champs en automatique avec DAO.
    J'ai vérifier que mon cadre imgImage fonctionne bien avec une image imposée par le code et ouvert quelques box et placer quelques Debug.Print pour voir ce qu'il se passe.

    Je vais essayer de reformuler pour voir si on s'est bien compris...
    Voici une capture d’écran du Formulaire recherche Nom : Capture.PNG
Affichages : 794
Taille : 101,5 Ko
    Le cadre en haut a droite est pour avoir une image de la monnaie., je souhaite qu'elle s'affiche quand je clique un des résultats du tableau. L'image a afficher est donc fonction du clic. Ce tableau s'appelle lstResultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub lstResultat_Click()
     
     
        ' Gestion des erreurs
    On Error GoTo Catch02
     
    Dim stLinkCriteria As String
    Dim CheminImage As String
        If Me.lstResultat.ListCount = 1 Then
            MsgBox "Aucune donnée à imprimer", vbInformation + vbOKOnly, "Impression des résultats"
        Else
     
            If Me.cboTable = "T_Monnaie" Then
     
                stLinkCriteria = Me.lstResultat
                Me.ID_MonnaieObjet.Value = stLinkCriteria
     
                Debug.Print Me.imgImage.Picture = LireInfoImage(10)
     
                'Me.imgImage.Picture = Application.CurrentProject.Path & "\Personnages\Blank.jpg"
     
                'MsgBox "Champagne!!!!"
                'Me.imgImage.Picture = ""
    End If

    Le remplissage de la Box ID_MonnaieObjet me permet de verifier que l'ID (Cle primaire numerique) est bien celui de la ligne selectionnee.
    J'ai essaye de remplacer LireInfoImage (tonIDvalide) par stLinkCriteria mais la j'ai un message que les ByRef ne sont pas autorise. C'est pourquoi, j'ai mis une valeur 10... pas de blocage de code ou d'erreur mais pas de résultat non plus.
    Du coup j'ai change le code de la fonction en passant LireInfoImage(prmID_Monnaie As String) et en completant le chemin vers l'image par "Application." pour que le chemin soit identique a ce qui fonctionne pour le formulaire F_Monnaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function LireInfoImage(prmID_Monnaie As String) As String
        Dim result As String
        Dim db As dao.Database: Set db = CurrentDb
        Dim r As dao.Recordset: Set r = db.OpenRecordset("T_Monnaie", dbOpenSnapshot)
        Call r.FindFirst("ID_Monnaie=" & prmID_Monnaie)
     
        If Not r.NoMatch Then
           Debug.Print result = Application.CurrentProject.Path & "\Monnaie\" & r![Catégorie] & "\" & r![Attribution] & "\" & r![Nom_Image]
        Me.CheminImage.Value = result
        End If

    Pas plus de resultats....

    Je continuerai demain, il est temps d'aller dormir pour moi...

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    J'ai oublie une instruction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       LireInfoImage=result
    end function
    Il faut assigner une valeur au nom de la function pour qu'elle retourne cette valeur.

    Desole.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Et tu peux tester la function avec quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private sub Test_LireInfoImage()
       debug.print LireInfoImage(10)
    end sub
    Cela te permet de valider qu'elle retourne bien le resultat attendu en dehors de tout autre programme qui pourrait pertube ton test.

    Attention, cela ne marche que si LireInfoImage est dans un module.
    Si elle est dans un formulaire, il faut que le formulaire soit ouvert et que tu l'appelles avec un bouton ou quelque chose comme cela.
    On ne peut pas executer manuellement une procedure dans un formulaire ouvert.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Directeur technique
    Inscrit en
    Octobre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Bonsoir Marot,
    Alleluia, j'ai réussis moyennant quelques petites modifications a faire fonctionner le code VBA pour afficher les images sur le clic d'un résultat pour les tables Monnaies et Objets.
    Nom : Antonin.PNG
Affichages : 673
Taille : 169,2 Ko
    Avec le code suivant pour la fonction insérée dans un Module a part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Function LireInfoImage(prmID_Monnaie As String) As String
        Dim result As String
        Dim db As dao.Database: Set db = CurrentDb
        Dim r As dao.Recordset: Set r = db.OpenRecordset("T_Monnaie", dbOpenSnapshot)
        Call r.FindFirst("ID_Monnaie=" & prmID_Monnaie)
     
        If Not r.NoMatch Then
        'result = Application.CurrentProject.Path & "\Monnaie\" & r![Catégorie] & "\" & r![Attribution] & "\" & r![Nom_Image] est remplace par
        result = Application.CurrentProject.Path & "\Monnaies\" & r![Catégorie] & "\" & r![Attribution] & r![Nom_Image]
     
        End If
     LireInfoImage = result
     
        r.Close: Set r = Nothing
        db.Close: Set db = Nothing
    End Function
    et une partie du code sur clic sur un des résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Private Sub lstResultat_Click()
     
     
        ' Gestion des erreurs
    On Error GoTo Catch02
     
    Dim stLinkCriteria As String
    Dim CheminImage As String
     
        'Si on a fait une recherche sur la Table Monnaie
        If Me.cboTable = "T_Monnaie" Then
            'StLinkCriteria est egal au resultat clique dans la fenetre Liste
            stLinkCriteria = Me.lstResultat
            'On defini le cheminImage en faisant appel a la fonction LireInfoImageMonnaie du module ModLireImg
            CheminImage = LireInfoImage(stLinkCriteria)
        End If
     
     
     
        'Si on a fait une recherche sur la Table Objet
        If Me.cboTable = "T_Objet" Then
            'StLinkCriteria est egal au resultat clique dans la fenetre Liste
            stLinkCriteria = Me.lstResultat
            'On defini le cheminImage en faisant appel a la fonction LireInfoImageObjet du module ModLireImg
            CheminImage = LireInfoImageObjet(stLinkCriteria)
        End If
    La fonction LireInfoImageObjet est adaptée de la fonction LireInfoImage comme la construction du chemin prend d'autres variables.

    ............. Merci beaucoup, ton aide m'a précieusement aidée mais.........

  8. #8
    Membre à l'essai
    Homme Profil pro
    Directeur technique
    Inscrit en
    Octobre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    ..... J'ai une troisième table pour laquelle ca coince pour l'instant, la table des Personnages : T_Personnage

    Voici le code de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Si on a fait une recherche sur la Table Personnage
        If Me.cboTable = "T_Personnage" Then
            'StLinkCriteria est egal au resultat clique dans la fenetre Liste
            stLinkCriteria = Me.lstResultat
            'Test pour verifier qu'on a bien le bon dossier Personnage
            Me.ID_MonnaieObjet = stLinkCriteria
            'On defini le cheminImage en faisant appel a la fonction LireInfoImagePerso du module ModLireImg
            CheminImage = LireInfoImagePerso(stLinkCriteria)
            MsgBox "Champagne...."
        End If
    Voici le code de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Function LireInfoImagePerso(prmID_Personnage As String) As String
        Dim result As String
        Dim db As dao.Database: Set db = CurrentDb
        Dim r As dao.Recordset: Set r = db.OpenRecordset("T_Personnage", dbOpenSnapshot)
        MsgBox "avant appel...."
        Call r.FindFirst("ID_Personnage=" & prmID_Personnage)
     MsgBox "Appel reussi...."
        If Not r.NoMatch Then
        result = Application.CurrentProject.Path & "\Personnages" & r![Nom_Image]
     
        End If
     LireInfoImagePerso = result
    MsgBox "Super...."
        r.Close: Set r = Nothing
        db.Close: Set db = Nothing
    End Function
    avec mes investigations, l'ID_Personnage est bien récupérer et apparaît dans la Box sous la forme ALEXANDRE SEVERE (222-235) par exemple.
    ID_Personnage est du texte et pas un numero, je pense que c'est de la que vient le souci sur la syntaxe de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call r.FindFirst("ID_Personnage=" & prmID_Personnage)
    J'ai bien évidemment essayé mais sans succes donc j'ai remis la version de base... une idée?

    Merci d'avance
    Strig

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Si ton ID est un texte, il faut mettre des guillemets (") autours et comme ton guillemet est dans une chaine, il faut le doubler.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call r.FindFirst("ID_Personnage=""" & prmID_Personnage &"""")
    Note que tu peux aussi utiliser une apostrophe (') a la place du guillemet mais en francais elles sont frequentes et donc peuvent poser des problemes d'interpretation.

    Et si ton champ est une date, il faut mettre un diese (#) et il est prudent de formater ta date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call r.FindFirst("UnChampDate=#" & Format(undate, "yyyy\mm\dd") & "#")
    Le format interne de Access est MM/JJ/AAAA mais je n'aime pas ce format car il peut provoquer la confusion entre le mois et le jour.
    Quand tu vois 01/02/2018, tu ne sais pas si c'est le 1er fevrier ou le 2 janvier.
    Quand tu as 2018/02/01, il n'y a selon moi plus de risque.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Directeur technique
    Inscrit en
    Octobre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Bonsoir Marot,
    J'ai corrige mais je n'avais pas vu la ligne complete sur mon portable, finalement, j'ai fini comme...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call r.FindFirst("ID_Personnage='" & prmID_Personnage & "'")
    Ca fonctionne parfaitement pour mes 3 tables comportant des images.

    Un grand merci pour ton aide très précieuse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/04/2016, 14h55
  2. Afficher une image sur un formulaire à partir d'une base de données
    Par abiking dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 07/12/2015, 21h56
  3. C# VS2003 Pb pour afficher une image sur un siteWeb
    Par calinou dans le forum ASP.NET
    Réponses: 2
    Dernier message: 07/09/2007, 16h57
  4. Réponses: 13
    Dernier message: 23/12/2004, 18h01
  5. Comment faire pour afficher une image ds une dbgrid
    Par totomaze dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/10/2004, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo