Afficher image de la feuille dans userform via listbox

Lilijuju

XLDnaute Nouveau
Bonjour,

Je persiste depuis des semaines à chercher une solution...
J'ai une base de données de personnel (Nom,Prénom, adresse, etc...) avec leur photo sur une feuille "Base".
Je souhaiterais via l'userform afficher leur photo en même temps que leurs données.

J'ai tenté plusieurs méthodes, parcouru le net et je ne suis pas arrivé à "l'adapter" à mon cas.

Est-ce qu'une personne pourrait me diriger sur la partie afficher photo ;-)
Merci par avance.
PS : fichier joint
 

Pièces jointes

  • Liste lilijuju.xlsm
    336.6 KB · Affichages: 103

Paf

XLDnaute Barbatruc
bonjour Lilijuju, Lolote83

dans Private Sub ListBox1_Click(), juste après With Sheets("Base") insérer ce code adapté du site de J.BOISGONTIER:

VB:
'images
For Each s In .Shapes
     If s.TopLeftCell.Row = adres Then
        Set Img = .Shapes(CStr(s.Name))
        Img.CopyPicture
        .ChartObjects.Add(0, 0, s.Width, s.Height).Chart.Paste
        .ChartObjects(1).Chart.Export Filename:="monimage.jpg"
        .Shapes(.Shapes.Count).Delete
        Me.Image1.Picture = LoadPicture("monimage.jpg")
        Kill "monimage.jpg"
        Exit For
    End If
Next s

A+
 

Lilijuju

XLDnaute Nouveau
bonjour Lilijuju, Lolote83

dans Private Sub ListBox1_Click(), juste après With Sheets("Base") insérer ce code adapté du site de J.BOISGONTIER:

VB:
'images
For Each s In .Shapes
     If s.TopLeftCell.Row = adres Then
        Set Img = .Shapes(CStr(s.Name))
        Img.CopyPicture
        .ChartObjects.Add(0, 0, s.Width, s.Height).Chart.Paste
        .ChartObjects(1).Chart.Export Filename:="monimage.jpg"
        .Shapes(.Shapes.Count).Delete
        Me.Image1.Picture = LoadPicture("monimage.jpg")
        Kill "monimage.jpg"
        Exit For
    End If
Next s

A+
Merci !!!
J'ai bien ajouté votre code à l'endroit indiqué mais il me met un message d'erreur que "s" est une variable non défini ainsi que "img"
Comment je lui indique ces variables ?
 

Lilijuju

XLDnaute Nouveau
Re,

trop tard mais:


il suffit de les déclarer à l'aide de l'instruction Dim. voir le classeur de Lolotte83 et l'aide Excel.

A+
Vaut mieux une réponse tard que rien du tout ;-)
Aurais-tu une solution :
Par exemple j'ai 2 Mr DUPONT mais prénom différent la recherche est ok mais que j'ai qu'un seul Mr DURAND la recherche plante et me dit : "variable objet ou with non défini"
Je vois pas comment le rédiger.
Pourrais-tu regarder mon problème de recherche ?
Merci par avance
 

Paf

XLDnaute Barbatruc
re,

pas mis l'erreur en évidence avec le classeur du post 1.

Quelles sont les manip effectuées pour arriver à cette erreur?

La recherche par saisie en TextBox143 doit elle se faire sur l'ensemble de la plage définie ou seulement sur la colonne J ?

Par ailleurs il y aurait lieu de modifier la limite de plage puisqu'actuellement elle s'étend jusqu'à la dernière ligne du tableur.

Des propositions en fonction des réponses ....

A+
 

Lilijuju

XLDnaute Nouveau
1)C'est une recherche intuitive via textbox143. cette recherche se fait ligne par ligne (je peux avoir 2 personnes du même nom mais pas le même prénom ). Donc les "doublons" s'affichent (tout est OK).
Cependant, lorsque la recherche se termine par un résultat unique il met le message d'erreur. En arrière plan la listbox m'affiche bien la ligne unique.... je comprends pas...

2)La recherche doit se faire sur toute la plage car toute donnée est source de recherche.

En résumé, je veux pouvoir rechercher/filtrer dans tous les cas (résultat unique, résultats multiples ou encore aucun résultat).

Merci par avance de ton retour.
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re,

J'ai essayé de simplifier. A tester :
VB:
Private Sub TextBox143_Change()
Dim WS As Worksheet, Plage As Range, c As Range
Dim Lig As Long, i As Long, Recherche As String, adres As Integer

Me.ListBox1.Clear
Recherche = TextBox143.Value
Set WS = Worksheets("Base")
If Recherche <> "" Then
    Lig = WS.Cells(Rows.Count, "J").End(xlUp).Row
    For i = 2 To Lig
        Set Plage = WS.Range("A" & i & ":AJ" & i)
        Set c = Plage.Find(Recherche, , , xlPart)
        If Not c Is Nothing Then
            With Me.ListBox1
            adres = Val(c.Row)
            .AddItem WS.Cells(adres, 2).Value
            .Column(1, .ListCount - 1) = Format(WS.Cells(adres, 10), "00000") 'pourquoi ce format ?
            .Column(2, .ListCount - 1) = WS.Cells(adres, 11)
            .Column(3, .ListCount - 1) = WS.Cells(adres, 3)
            .Column(4, .ListCount - 1) = adres
            End With
        End If
    Next
End If
End Sub

A+
 

Lilijuju

XLDnaute Nouveau
Re,

J'ai essayé de simplifier. A tester :
VB:
Private Sub TextBox143_Change()
Dim WS As Worksheet, Plage As Range, c As Range
Dim Lig As Long, i As Long, Recherche As String, adres As Integer

Me.ListBox1.Clear
Recherche = TextBox143.Value
Set WS = Worksheets("Base")
If Recherche <> "" Then
    Lig = WS.Cells(Rows.Count, "J").End(xlUp).Row
    For i = 2 To Lig
        Set Plage = WS.Range("A" & i & ":AJ" & i)
        Set c = Plage.Find(Recherche, , , xlPart)
        If Not c Is Nothing Then
            With Me.ListBox1
            adres = Val(c.Row)
            .AddItem WS.Cells(adres, 2).Value
            .Column(1, .ListCount - 1) = Format(WS.Cells(adres, 10), "00000") 'pourquoi ce format ?
            .Column(2, .ListCount - 1) = WS.Cells(adres, 11)
            .Column(3, .ListCount - 1) = WS.Cells(adres, 3)
            .Column(4, .ListCount - 1) = adres
            End With
        End If
    Next
End If
End Sub

A+
Pour le format c'était suite à un copier coller qui n'a effectivement pas lieu d'être...
Encore merci et permettez moi je vous kiffe !!!
Je vais pouvoir dormir sereinement ;-)
 

Lilijuju

XLDnaute Nouveau
Pour le format c'était suite à un copier coller qui n'a effectivement pas lieu d'être...
Encore merci et permettez moi je vous kiffe !!!
Je vais pouvoir dormir sereinement ;-)
Bonjour
Arrivé ce matin j'ai voulu utiliser mon outil sur Windows 10.
Il y a un message d'erreur par rapport au format des textbox.
Est ce que c'est à cause de Windows 10 ou autre ?
Pourriez vous m'indiquer pourquoi ça ne fonctionne plus d'un poste à un autre.
Merci de votre réponse.
 

Discussions similaires

Statistiques des forums

Discussions
312 199
Messages
2 086 160
Membres
103 147
dernier inscrit
tubaman