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 :

[E-03] Image via liste déroulante.


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 34
    Points : 14
    Points
    14
    Par défaut [E-03] Image via liste déroulante.
    Bonjour,

    Voilà mon cas déséspéré... je dispose de deux feuilles excel :

    La première constituée de deux colonnes (une pour les N°de dossier et l'autre pour les noms).

    La deuxième feuille est constituée d'une liste déroulante contenant les N°de dossier de la 1ere et quand je choisi un N° cela me renvoie le nom dans la cellule d'à coté.

    Jusque là tout est ok


    Le problème qui se pose c'est que je dispose d'un dossier sur mon bureau contenant un bon gros lot d'images en .jpeg, ces images portent le même nom que les N°de dossier (exemple l'image 5896.jpg fait partie du dossier n°5896).

    Je voudrais que quand je séléctionne un N° dans ma liste déroulante, en plus du nom associé, l'image correspondante au dossier s'ouvre aussi sur ma feuille excel...

    J'ai beau avoir pas mal cherché sur le net je n'arrive pas à trouver la "formule magique". Enfin si cela est possible.

    Aux âmes charitables merci de m'aider .

    Ps: je suis sous excel 2003

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour et bienvenue sur le forum Office de DVP.

    D'abord une piste de recherche dans la FAQ Excel : http://excel.developpez.com/faq/inde...InsertionImage

    Tu trouveras un code pour insérer un image dans un feuille Excel, et tu trouveras d'autres idées dans cette superbe FAQ

    Starec

  3. #3
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    Bonjour Bob, Starec

    j'ai dernièrement écrit une fonction personnalisée utilisable avec une formule
    Code à mettre dans un module :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Public Function Image(img_nom As Variant, Optional chemin As String = "") As String
        ' Declaration des variables
        Dim ref As Range, Sh As Shape, drap As Boolean
        ' ref : la cellule qui provoque la fonction
        ' sh : les shapes
        ' Drap : drapeau definissant si la shape est trouvée
        Application.Volatile ' defini une fonction qui se recalcule automatiquement
    ' teste le type de variable soit une cellule soit une valeur alphanumerique
        Select Case TypeName(img_nom)
            Case "Range" ' c'est une reference cellule
                Image = img_nom.Value
            Case "String" ' c'est une valeur alphanumerique
                Image = img_nom
            Case Else ' c'est une erreur
                Image = "#VALEUR"
                Exit Function
        End Select
    ' le chemin est un parametre optionnel, s'il est omis, la valeur est le chemin du classeur
        If chemin = "" Then chemin = ThisWorkbook.Path
    ' le chemin ne se termine pas forcemment par \ je le rajoute
        If Right(chemin, 1) <> "\" Then chemin = chemin & "\"
        Set ref = Application.Caller ' affectaction à ref de la cellule qui lance la fonction
        If ref.MergeCells = True Then Set ref = Range(ref.MergeArea.Address)
        drap = False ' initialisation du drapeau
        For Each Sh In ref.Worksheet.Shapes ' je passe en revue toute les shapes
    ' je teste son nom construite plus bas pour savoir si c'est la bonne shappe
            If "Img-" & ref.Address = Left(Sh.Name, Len(ref.Address) + 4) Then drap = True: Exit For
        Next
        If drap = True Then ' c'est la bonne shape
    ' je teste maintenant si c'est la meme que celle de la formule pour ne pas refaire le traitement
    ' Le gain de temps n'est pas negligeable
           If "Img-" & ref.Address & "-" & Image = Sh.Name Then GoTo fin ' egalité parfaite, je sors
        End If
        On Error Resume Next ' controle d'erreur, si la shape n'existe pas encore, l'instruction suivante provoque une erreur
        Sh.Delete ' je detruits la shap
        If Image = "" Then Exit Function ' la valeur est à "" alors pas de shape à affecter
    ' j'inserre la shape, avec l'image en lui mettant les tailles necessaires pour la cellule
        Set Sh = ref.Worksheet.Shapes.AddPicture(chemin & Image, True, True, ref.Left, ref.Top, ref.Width, ref.Height)
        Sh.Name = "Img-" & ref.Address & "-" & Image ' je definis son nom pour la trouver plus tard
    fin:
        Image = "Img" & ref.Address ' j'affecte un nom pour resultat
    End Function
    utilisation :
    image dans le meme repertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Image("Nomdufichier.GIF")
    Image dans un repertoire différent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Image("Nomdufichier.GIF";"Mon chemin")
    autre formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Si(A1>"";Image( A1 & ".GIF");"")
    autre Formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Si(A1>'''; Image("Img - " & A1 & ".JPG");"")

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Merci Wilfried

    Ton code m'as beaucoup aidé et m'as permis de résoudre en grande partie mon problème !

    Merci aussi à starec, grâce à ton lien j'ai pu améliorer le tout... par exemple en redimensionnant les images automatiquement .

    Sujet résolu donc .

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

Discussions similaires

  1. [Traitement d'image] Insertion d'une image dans liste déroulante?
    Par MikeV dans le forum Webdesign & Ergonomie
    Réponses: 2
    Dernier message: 27/08/2007, 21h03
  2. Réponses: 4
    Dernier message: 04/04/2007, 18h41
  3. Passer paramètres via liste déroulante
    Par Jiraiya42 dans le forum Langage
    Réponses: 8
    Dernier message: 01/04/2007, 11h15
  4. image dans liste déroulante dynamique
    Par maguy27 dans le forum IHM
    Réponses: 5
    Dernier message: 11/08/2006, 10h58
  5. changement d'enregistrement via liste déroulante
    Par rahan_dave dans le forum Access
    Réponses: 3
    Dernier message: 13/10/2005, 18h47

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