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] Insérer une image via une donnée elle même insérée par une autre


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] Insérer une image via une donnée elle même insérée par une autre
    Bonjour !
    Derrière ce titre assez étrange se cache quelque chose qui pourrait détruire le monde...

    Bref, pour résumer mon problème :

    J'ai une liste déroulante de "nom", quand on choisis un "nom" celà fait apparaitre un "identifiant" (série de chiffres) en B6...
    Je voudrais que cet "identifiant" une fois appelé, appel une image en B7 par exemple...


    En gros : [Nom] appel l'[Identifiant] qui appel l'[image].

    J'y suis presque, arrivé avec ce code :
    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
    Private Sub Worksheet_Change(ByVal Target As Range) 
     
     If Target.Address = "$B$6" Then ' cellule ou l'identifiant apparaitra
       On Error Resume Next
       ActiveSheet.Shapes("monimage").Delete 
       rep = "C:\Documents and Settings\******\Images_pieces"
       nomimage = rep & "\" & Target & ".jpg" 
       [B7].Select 'cellule ou l'image apparaitra
       ActiveSheet.Pictures.Insert(nomimage).Select
       Selection.Name = "monimage" 
          With ActiveSheet.Shapes("monimage") 
             .Top = Range("B7").Top 
             .Left = Range("B7").Left 
             .Height = Range("B7").Height 
             .Width = Range("B7:G7").Width 
          End With
       [b6].Select 
       On Error GoTo 0
     End If
     
    End Sub
    Le problème c'est que je suis obligé d'aller sur la cellule de l'identifiant et d'appuyer sur ENTRER pour que l'image apparaisse...


    Merci de votre aide .

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Je ne comprends pas pourquoi la validation de la cellule est nécessaire mais as-tu essayé un Sendkey$
    Pour ma part j'ai testé ainsi, sans sélection et sans problème
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Address = "$B$6" Then ' cellule ou l'identifiant apparaitra
       On Error Resume Next
       ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Delete
       rep = "C:\Documents and Settings\******\Images_pieces"
       nomimage = rep & "\" & Target & ".jpg"
       ActiveSheet.Pictures.Insert(nomimage)
       DoEvents 'ne change rien
          With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
             .Top = Range("B7").Top
             .Left = Range("B7").Left
             .Height = Range("B7").Height
             .Width = Range("B7:G7").Width
          End With
       On Error GoTo 0
     End If
     
    End Sub
    Edit
    Je viens de comprendre ton problème
    En effet, pour que l'événement change ait lieu, tu dois quitter la cellule, c'est normal.
    Ce qui n'empêche que tu peux simplifier le code

  3. #3
    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
    Bonjour,

    un Sendkey$ ? J'ai jamais utilisé cette instruction, elle fait quoi exactement ? Je la place où ?


    Sinon, bizarre que chez toi ça insère l'image direct...

    Tu as bien fait le même cas de figure que moi à savoir une liste déroulante constituée de "noms", qui apellent un "identifiant" (depuis une colonne située sur une autre page), cet "identifiant" appel lui même une image via le code que j'ai mis.

    Si oui, tu 'apelle l'Identifiant avec un =SI(ESTNA(RECHERCHEV....) ?


    Edit : ha ok... c'est normal, mais y'a pas un moyen de faire en sorte que cela se fasse directement ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Petite suggestion: utilise l'évènement Worksheet_Change sur ta cellule de nom plutôt que sur ta cellule d'identifiant.

    Ainsi, lorsque tu valides le nom, cela va en même temps mettre ton identifiant et ton image.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello decondelite,
    L'inconvénient de la méthode que tu proposes est qu'elle masque le nom (et un grand nombre de cellules inhérent à l'affichage de l'image). Or pour supprimer l'image, dans la suggestion de Blop le bricoleur (que je trouve très astucieuse) il suffit de supprimer le nom. Ce qui n'est plus aussi facile si la cellule est masquée
    Juste pour dire

    Edit
    @Blop le bricoleur
    Tu n'aurais pas un bout de fichier pour nous éviter de créer une liste de nom, d'écrire la procédure de récupération, ... etc. qu'on puisse voir ça sur le tas ?

  6. #6
    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
    Voilà un morceau de mon fichier, j'ai du effacer les 3/4 des éléments (pour rendre le plus lisible possible) mais tout ce qui concerne mon problème est là .
    Fichiers attachés Fichiers attachés

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    @ouskel'n'or:
    Je n'ai rien compris, désolé il y a un truc qui m'échappe. Pourquoi un Worksheet_Change masquerait des cellules?!

    @blop le bricoleur:
    J'ai des soucis de références manquantes avec ton classeur.

  8. #8
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    En effet, pour que l'événement change ait lieu, tu dois quitter la cellule, c'est normal.
    Pas si la cellule contient une Validation par liste, le changement sera bien repéré à chaque changement de sélection dans la liste
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  9. #9
    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
    Citation Envoyé par decondelite Voir le message
    @ouskel'n'or:
    Je n'ai rien compris, désolé il y a un truc qui m'échappe. Pourquoi un Worksheet_Change masquerait des cellules?!

    @blop le bricoleur:
    J'ai des soucis de références manquantes avec ton classeur.
    Ha bon ?
    Ca devrait marcher pourtant :/

    Pas si la cellule contient une Validation par liste, le changement sera bien repéré à chaque changement de sélection dans la liste
    Oui, sauf que là c'est pas à partir de la cellule contenant la liste mais d'une des cellules remplie grâce à la liste (enfin, je pense pas me gourer la dessus ).

  10. #10
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Le petit fichier ci-joint pourra peut-être t'inspirer
    (Met les 4 fichiers dans le même répertoire)

    Pièce jointe 37270
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    @ouskel'n'or:
    Ah je viens enfin de comprendre.
    Moi j'avais compris une liste dans une cellule.
    Faut dire, chez moi les listes dans un formulaire ça s'appelle Listbox ou Combobox.

    Ben dans ce cas faut tout faire depuis le Combobox_Change, ainsi que lors du clic sur les autres boutons du userform.

  12. #12
    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
    J'ai essayé ton fichier en ajoutant une colonne de donnée pour que la liste renvoie une donnée quelconque dans une case.

    J'ai ensuite modifié le code pour que l'image s'insère en fonction de cette nouvelle donnée et non directement de la liste... et ça à l'air de marcher !

    Je vais implémenter ça dans mon code et voir si tout marche .

    Je vous préviendrais si tout se passe bien.
    Merci !

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    De mon côté, j'ai ajouté MsgBox Target.Address dans l'événement Change de la feuille et j'obtiens "$G$3", donc ta procédure ne n'exécute jamais.
    J'essaie de comprendre pourquoi.
    A+

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Voilà, un bricolage qui fonctionne
    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
    Private Sub Worksheet_Change(ByVal Target As Range) 'fonction pour inserer une image
     If Target.Address = "$G$3" Then
       On Error Resume Next
       ActiveSheet.Shapes("monimage").Delete
       rep = "C:\Documents and Settings\p051274\Desktop\Dossier_VFR_version2\Images_pieces"
       nomimage = rep & "\" & [B6].Value & ".jpg"
       ActiveSheet.Pictures.Insert(nomimage).Select
       Selection.Name = "monimage"
          With ActiveSheet.Shapes("monimage") '
             .LockAspectRatio = msoFalse
             .Top = Range("B7").Top
             .Left = Range("B7").Left
             .Height = Range("B7").Height
             .Width = Range("B7:G7").Width
          End With
       On Error GoTo 0
     End If
    End Sub
    Tu testes pour savoir s'il n'y a pas d'incidence "ailleurs"
    Tu dis

  15. #15
    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 ouskel'n'or, ça marche ! Tout comme le code de fring -->

    dans la feuil1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 And Target.Address = "$G$3" Then proc_test
    End Sub
    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
    Sub proc_test()
    Dim Chemin As String, Pic As Shape
     
    On Error Resume Next
    ActiveSheet.Pictures("ImgTemp").Delete
     
    Chemin = ThisWorkbook.Path & "\" & [B6] & ".jpg"
     
    With ActiveSheet.Pictures.Insert(Chemin)
        .Name = "ImgTemp"
        .LockAspectRatio = msoFalse
             .Top = Range("B7").Top
             .Left = Range("B7").Left
             .Height = Range("B7").Height
             .Width = Range("B7:G7").Width
    End With
     
    End Sub
    Encore merci !

    J'aurais une dernière question à vous poser en rapport avec l'exemple du code ci-dessus, si je veux par exemple faire un "proc_test2" qui soit lancé en même temps que le "proc_test", comment l'inclure dans le worksheet_change ? (j'ai essayé plusieurs petits mots de liaison mais sans succès).

    Après j'arreterais de vous embêter, promis...

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    trois solutions : Ou tu ajoutes un paramètre que tu peux régler dans
    Worksheet_Change -> Then proc_test paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub proc_test(paramètre)
    Ce paramètre répondant à une condition
    Ou tu ajoutes l'appel proc_test2 en fin de procédure proc_test
    Ou tu mets ça dans Worksheet_Change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Target.Count = 1 And Target.Address = "$G$3" Then
          proc_test
          proc_test2
    Endif
    Ou... il nous manque des éléments pour te répondre

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Il voulait l'exécution des 2 en même temps.

    Perso je sais pas comment on fait, peut-être avec l'utilisation d'un évènement...

  18. #18
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Ou tu mets ça dans Worksheet_Change 
    If Target.Count = 1 And Target.Address = "$G$3" Then
          proc_test
          proc_test2
    Endif 
     
    Ou... il nous manque des éléments pour te répondre ;)
    Ca me lance la 1ere mais pas la 2eme...

    Nan c'est bon c'est ok !

    J'avais "oublié" de renomer "imgtemp" dans la 2eme fonction

    Tout fonctionne pour le mieux, un grand merci à vous d'avoir utilisé votre temps pour m'aider .

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

Discussions similaires

  1. Insérer une image via une adresse http
    Par lenoil dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/09/2008, 15h43
  2. Insérer une image via ActionScript
    Par georges_jung dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 06/06/2008, 09h38
  3. Réponses: 6
    Dernier message: 13/11/2007, 10h59
  4. Réponses: 1
    Dernier message: 05/09/2007, 12h47
  5. Réponses: 11
    Dernier message: 14/08/2007, 18h20

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