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 :

Affecter une macro à une image créée en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut Affecter une macro à une image créée en VBA
    Bonjour à toutes et à tous,

    je sollicite l'aide précieuse de la communauté pour le problème suivant:

    -par macro, je copie-colle une image qui me sert de bouton de navigation dans une feuille Excel;
    -après avoir créée et positionnée cette image comme souhaité dans la feuille Excel, je souhaite affecter une macro appelée ola qui soit activée quand on clique sur l'image.

    les images sont créées dynamiquement d'où l'utilisation d'un compteur "j"

    j'ai essayé avec .OnAction comme ci-dessous mais je récuère une erreur 1004
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Shapes("Image" & j).OnAction = "ola"
    A l'aide !! je ne trouve pas de solution à mon problème

    Merci d'avance

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Ci dessous une solution, mais en utilisant l'objet image (activeX) et non shape

    J'utilise VBComponent pour créer la macro évènement click de l'objet image

    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
    Sub AjouteMacro(NomObject As String)
     
     
    Dim VbMod As VBComponent
     
    Dim i As Integer
     
    Set VbMod = ThisWorkbook.VBProject.VBComponents.Item("Feuil1")
     
     
                                    '#################
                                    '### Ajoute le code ###
                                    '#################
     
     
    With VbMod.CodeModule
        i = .CountOfLines
        .InsertLines i + 1, "Private Sub " & NomObject & "_Click()"
        .InsertLines i + 2, "   Call Feuil1.m1 "
        .InsertLines i + 3, "End Sub"
    End With
     
    End Sub
    On appel cette macro en lui fournissant le nom de l'objet

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir,

    Ce qui plus bas fonctionne chez moi (Excel 2007), le nom du Shape est passé en argument. Je vois que tu n'as pas mis d'espace entre "Image" et le numéro, c'est peut être de là que vient l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveSheet.Shapes("Image" & j).OnAction = "ola"
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveSheet.Shapes("Image " & j).OnAction = "ola"
    Teste ceci :
    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
     
    Sub Image()
     
        Dim Shp As Shape
        Dim I As Integer
     
        I = 1
        Set Shp = ActiveSheet.Shapes("Image " & I)
     
        Shp.OnAction = "'AfficherNom""" & Shp.Name & "'"
     
    End Sub
     
     
    Sub AfficherNom(NomShape As String)
     
        MsgBox NomShape
     
    End Sub
    Hervé.

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Quel est ton code de création d'image .?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut
    rebonjour à tous les 3,

    merci beaucoup pour vos messages et vos suggestions de solutions.

    Pour répondre à la question de bbil,
    je copie colle une image (Contrôle ActiveX) préexistante dans la feuille et je la positionne par code VBA à l'endroit souhaité dans la feuille.

    J'ai essayé les codes de JP et Theze.

    -Pour la proposition de code de jpfontaine :

    j'ai du au préalable activer "Microsoft Visual Basic for Applications Extensibility 5.3."
    Y-a-t-il d'autres références à activer ?"
    J'ai copié-collé le code dans un Module mais la ligne de code suivante pose problème
    Set VbMod = ThisWorkbook.VBProject.VBComponents.Item("Feuil1")

    comme test, j'ai essayé un Msgbox pour récupérer la propriété Name de ThisWorkbook.VBProject.VBComponents.Item("Feuil1")
    mais ca ne marche pas.

    Des suggestions jp ?

    -Pour la proposition de Thèze,

    j'ai essayé d'intégrer ton code mais je récupère une erreur 1004.

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Je te joint un fichier exemple
    Affecter une macro par code (VBCOMPONENT).xls

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par lamina008 Voir le message
    ....
    Pour répondre à la question de bbil,
    je copie colle une image (Contrôle ActiveX) préexistante dans la feuille et je la positionne par code VBA à l'endroit souhaité dans la feuille.
    ...
    on as pas vu ce code VBA ....
    toutes tes images doivent-elles appeler le même code ?

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Au début tu parle de Shape avec OnAction et maintenant tu parle de contrôle ActiveX, ce n'est pas la même chose.
    En double cliquant sur ton image, tu te retrouve dans le module de la feuille où se trouve le contrôle image avec le squelette de l'évènement Click.
    Il te suffit de "pré écrire" le code dans le module et une fois l'image collée, si tu clique sur cette dernière la proc évènementielle sera exécutée.

    Hervé.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Par défaut
    rebonjour,

    et merci de vos précédentes réponses:

    Pour Jérôme, j'ai essayé de faire la macro du fichier que tu m'as envoyé et ça n'a pas marché sur mon poste !
    bug au meme endroit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set VbMod = ThisWorkbook.VBProject.VBComponents.Item("Feuil1")
    Y-at-il des références autres que Microsoft Visual Basic for Applications Extensibility 5.3. à activer ???

    Pour Thèze,

    je ne suis pas expert enVBA malheureusement, et j'ai encore des soucis pour définir proprement les objects que je manipule, dsl!
    Pour ta proposition de "pré-écriture" du code, ca ne répond pas à mon problème car je ne sais pas combient d'images seront crées par l'utilisateur lors de l'utilisation du workbook.

    Si vous avez d'autres suggestions, je suis preneur !

  10. #10
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Juste pour etre sur.

    Ce code fait référence à la Feuil1. as tu une feuille de ce nom?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set VbMod = ThisWorkbook.VBProject.VBComponents.Item("Feuil1")

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

Discussions similaires

  1. [XL-2007] affecter en VBA une macro à des images
    Par pelerin98 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/06/2015, 17h49
  2. Codage pour affectation d"une macro à une image
    Par pelerin98 dans le forum Excel
    Réponses: 5
    Dernier message: 08/05/2015, 09h41
  3. [WD-2007] Affecter une macro à une image
    Par babybell dans le forum Word
    Réponses: 2
    Dernier message: 02/10/2013, 00h40
  4. [WD-2007] Affecter une macro à une image
    Par aperrottet dans le forum VBA Word
    Réponses: 2
    Dernier message: 02/02/2011, 23h48
  5. [E-07] Comment affecter par macro une macro à un objet
    Par BATISSEUR dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2009, 09h49

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