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 :

Problème de passage de paramètre Macro, sur l'action Shape.Onaction


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Points : 18
    Points
    18
    Par défaut Problème de passage de paramètre Macro, sur l'action Shape.Onaction
    hello les amis,

    Voici mon soucis :

    une Macro créer un objet Shape dans une feuille Excel, je veux affecter à la shape (bouton) une macro qui permet de rediriger l'utilisateur vers une autre feuille Excel (du même fichier Excel), j'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With Feuil1.Shapes.AddShape(msoShapeRoundedRectangle, 10, 50 * i, 200, 40)
                        .Name = blabla
                        .TextFrame.Characters.Text = blabla
                        '.Fill.ForeColor.RGB = blabla
                        .TextEffect.FontSize = 14
                        .TextFrame.HorizontalAlignment = xlHAlignCenter
                        .TextEffect.FontBold = msoCTrue
                        .OnAction = "open_ATA_sheet_ClickButton(ATAValue)"[/B]
    je demande donc d'affecter à ma forme shape (lorsqu'on cliquera dessus) la Macro open_ATA_sheet_ClickButton() qui est présente dans le même module, cette macro a besoin d'un paramètre, ici ATAValue qui correspond simplement au nom de la feuille que je veux ouvrir lors du click.

    Le soucis c'est que quand je passe le paramètre (de type string) j'ai une erreur qui dit :

    [B]Impossible d’exécuter la macro open_ATA_sheet_ClickButton(ATAValue). Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées"

    alors que mon paramètre correspond bien à un Type string, le plus étonnant c'est que cela fonctionne lorsque j'utilise une macro différente qui ne demande pas d'argument.

    Je ne vois donc pas pourquoi le passage d'argument est problématique ici, est-ce-que l'un d'entre vous aurait une idée de l'erreur que j'aurais pu faire ?

    Merci d'avance pour votre aide

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    bonjour
    pour le onaction avec argument il faut instruire son appel
    voici quelques exemple vite fait sur une shapes

    exemple 1
    on inscrit le mot en dur dans l'appel de la (fonction /sub)
    ici j'injecte "toto"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test1()
    'exemple avec 1 argument ecrit en dur dans l'apel
     Sheets(1).Shapes(1).OnAction = "'mamacro " & """toto""" & "'"
    End Sub
     
    Sub mamacro(argument)
    MsgBox argument
    End Sub

    exemple 2 c'est la meme que la première sauf que toto est injecté par une variable ce qui modifie un peu la syntaxe de l'instruction de l'appel a la (fonction/sub)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test1BIS()
    'la meme que la TEST1 mais avec une varaible dans l'apel
     machin = "toto"
     Sheets(1).Shapes(1).OnAction = "'mamacro " & Chr(34) & machin & Chr(34) & "'"
    End Sub
     
    Sub mamacro(argument)
    MsgBox argument
    End Sub
    exemple 3
    un peu plus corsé maintenant injectons plusieurs arguments ecrit en dur dans l'instruction de l'appel a la (fonctions/sub)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test2()
    'exemple avec plusieurs  arguments ecrit en dur dans l'apel
     Sheets(1).Shapes(1).OnAction = "'mamacro2 " & Chr(34) & "toto "","" titi "",""  riffifi ""'"
    End Sub
     
    Sub mamacro2(argument1, argument2, argument3)
    MsgBox argument1 & vbCrLf & argument2 & vbCrLf & argument3
    End Sub
    la meme que la TEST2 mais avec des variables instruit avant et injectées dans l'appel a la (fonction/sub)
    comme tu peux le voir la syntaxe devient hard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test2BIS()
    'LA MEME QUE LA test2 MAIS AVEC DES VARIABLES INSTRUITES AVANT EN ARGUMENT
     machin1 = "toto"
     machin2 = "titi"
     machin3 = "riffifi"
      Sheets(1).Shapes(1).OnAction = "'mamacro2 " & Chr(34) & machin1 & """,""" & machin2 & """,""" & machin3 & "'"
    End Sub
     
    Sub mamacro2(argument1, argument2, argument3)
    MsgBox argument1 & vbCrLf & argument2 & vbCrLf & argument3
    End Sub
    voila tu sais tout

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Super merci beaucoup pour ton aide Patrick

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    Re
    bonjour

    j'en avais oublié une de solution !!!!

    c'est de nommer ta Shape avec un nom contenant le nom du sheets voulue

    et utiliser "Application.Caller"

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test1BIS()
     With Sheets(1).Shapes(1)
     .Name = "SH_" & Sheets(2).Name ' le nom de la shapes est "sh_" + le nom du sheets voulue
     .OnAction = "mamacro "'ici plus d'argument !!!!
    End With
    End Sub
     
    Sub mamacro()
    Sheets(Replace(Application.Caller, "SH_", "")).Activate
    End Sub

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/05/2007, 17h23
  2. Problème de passage de paramètres à une procedure
    Par momo62 dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 22/12/2005, 15h22
  3. [template] problème de passage de paramètres
    Par vinny_the_true dans le forum C++
    Réponses: 2
    Dernier message: 14/12/2005, 01h15
  4. Réponses: 9
    Dernier message: 13/05/2005, 03h13
  5. problème de passage de paramêtre sous mozilla
    Par mat10000 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/09/2004, 10h48

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