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

Macros et VBA Excel Discussion :

Erreur : insertion d'une image dans un userform en fonction de la valeur d'une textbox (controle image) [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Consultant en sécurité
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Erreur : insertion d'une image dans un userform en fonction de la valeur d'une textbox (controle image)
    Bonjour à tous,

    J'ai cherché partout sur internet mais je ne trouve aucune solution à mon problème.
    J'ai un classeur avec plusieurs feuilles. Sur chaque feuille il y a des noms d'objets, les photos (insérées par des controles image) et diverses explications (type base de données).
    J'ouvre une userform par un bouton sur la première feuille, il contient une combobox1 qui correspond aux noms des feuilles, une textbox dans laquelle l'utilisateur tape le nom de l'objet recherché et un controle image qui doit donc afficher la photo ayant le même nom que la valeur tapée dans la textbox après un clic sur un bouton. J'ai une erreur lorsque je clic sur mon bouton apercu "erreur 438, propriété ou méthode non gérée par cet objet. Mon code s'arrête sur la ligne "UserForm2.Image1.Picture = Sheets(ComboBox1.Value).pht.picture " mais si je remplace "pht.picture" par le nom de l'objet cherché tout fonctionne. Le debogueur trouve pourtant la bonne valeur pour "pht". Pouvez vous me dire ce qui ne va pas svp?

    Merci d'avance

    DlouJ


    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
    Private Sub Apercu_Click()
    Dim photo As Variant
    Dim pht As Range
    photo = TextBox2.Value
    With Sheets(ComboBox1.Value).Range("C:C")
            Set pht = .Find(photo, LookIn:=xlValues, LookAt:=xlPart)
     
    If pht Is Nothing Then
     
             MsgBox "Aucun résultat"
            Exit Sub
            Else
     
            UserForm2.Image1.Picture = Sheets(ComboBox1.Value).pht.picture
            End If
            End With
    End Sub

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Cela fait bien longtemps que je n'ai pas "joué" avec le contrôle image de VBA. Mais, après avoir jeté un œil dans l'aide, il me semble que le seul moyen de mettre une image dans un contrôle Image est de passer par LoadPicture et d'utiliser in fichier du disque et non une image dans un classeur.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Consultant en sécurité
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour clementmarcotte,

    Merci pour votre réponse mais non le controle image fonctionnne, le LoadPicture n'est pas obligatoire. D'ailleurs, si je remplace ma variable "pht" par le nom exact du controle image placé dans la feuille cela fonctionne parfaitement, c'est bien ça que je ne comprend pas... c'est à s'en arracher les cheveux!

  4. #4
    Membre habitué
    Homme Profil pro
    Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 169
    Points
    169
    Par défaut
    Bonjour,

    Je me trompe peut-être mais tu déclare ta variable pht en tant que Range.
    Une range n'a pas de méthode Picture à ma connaissance.

    Sinon, pourquoi ne pas utiliser un contrôle ImageList plutôt que d'avoir les images directement dans une feuille du classeur ?

    Cordialement,

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Consultant en sécurité
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour à tous,

    Merci pour vos réponses. Chtik j'ai essayé l'imageList mais ça ne fonctionnait pas comme je le souhaitais.
    J'ai finalement trouvé la réponse en poursuivant mes recherches donc si ça peut en intéresser certains:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Set F = Sheets(ComboBox1.Value)
    On Error GoTo Err_photo
      Set s = F.Shapes(CStr(Me.ListBox1))
      s.CopyPicture
     
      F.ChartObjects.Add(0, 0, s.Width, s.Height).Chart.Paste
      F.ChartObjects(1).Chart.Export Filename:="monimage.jpg"
      F.Shapes(F.Shapes.Count).Delete
      Me.Image1.PictureSizeMode = fmPictureSizeModeZoom
      Me.Image1.Picture = LoadPicture("monimage.jpg")
      Kill "monimage.jpg"
    Cordialement

  6. #6
    Candidat au Club
    Profil pro
    Autre
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autre
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    ou alors on utilise pas de disque du tout, on passe par le clipboard en fesant s.copy, puis Me.Image1.Picture = PastePicture.
    ça doit quand même être plus rapide...
    PastePicture est une fonction d'un module à ajouter à votre projet. (http://www.developpez.net/forums/d11...ormat-jpg-bmp/)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/11/2011, 23h28
  2. Insertion d'une image dans un UserForm
    Par babylone_59 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/09/2008, 19h37
  3. Réponses: 3
    Dernier message: 26/11/2007, 06h06
  4. rechercher dans un tableau en fonction de la valeur d'une cellule
    Par jefe.k dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/06/2007, 10h04
  5. [VBA-E] Lien hypertexte relié à une image dans un userform
    Par sebek_2000 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/02/2007, 05h43

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