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 :

Passer une variable à une procédure appelé par onaction


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut Passer une variable à une procédure appelé par onaction
    Bonjour,
    Le titre n 'est certainement pas très claire mais je vais développer.

    Je cherche à passer le nom d ' un objet shape lorsque celui ci est activé
    (déclenchement de "l 'évenement" onaction)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub mise_en_page()
    Dim i As Byte
    Dim j As Byte
    
    Const Rwidth = 45
    Const Rheigth = 43
    For i = 1 To 6
        For j = 1 To 7
           Set Stabl(i, j) = ActiveSheet.Shapes.AddShape(msoShapeOval, Cells(i + 1, j + 3).Left + (Cells(i + 1, j + 3).Height - Rheigth) / 2, Cells(i + 1, j + 3).Top + (Cells(i + 1, j + 3).Width - Rwidth) / 2, Rwidth, Rheigth)
           Stabl(i, j).Name = "t" & i & j
           Stabl(i, j).OnAction = "'ref_col_ligne(j)'"  'ICI 
              Next j
    Next i
    Pour passer par exemple la valeur 4 à la procédure "ref_col_ligne(n)"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Stabl(i, j).OnAction = "'ref_col_ligne(""4"")'"
     
    Sub ref_col_ligne(n)
    MsgBox n
    End Sub

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Déjà la sytnaxe de OnAction est du type OnAction= "MaProcedure".

    Ensuite, j'ai fait quelques tests, et il semblerait que VBA n'aime pas le passage d'arguments:
    Erreur 1004: Cette formule est trop compliquée pour être affectée à un objet
    Vois si tu ne peux pas contourner le problème.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    la syntaxe est celle ci qd il y a 2 arguments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Stabl(i, j).OnAction = "'ref_col_ligne(""4""),(""2"")'"
    donc ds mon cas pour tester la procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    .....
    Stabl(i, j).OnAction = "'ref_col_ligne(""4"")'"
    ou
    Stabl(i, j).OnAction = "'ref_col_ligne (4)'"

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,
    si ton besoin ne couvre pas trop d'objets, tu peux ruser de la manière suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Stabl(i, j).OnAction = "'ref_col_ligne_ij"
    Et dans Ref_col_ligne_ij, tu initialises en dur tes parametres avant d'appeler la procédure originale Ref_col_ligne.

    cela nécessite une procédure d'appel intermédiaire par objet.

    Je vois que tu en as 42, donc c'est jouable.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    ok Godzestla

    par contre je n ai pas trouvé l 'écriture pour appeler les 42 procédures ...
    j ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Stabl(i, j).OnAction = "'ref_col_ligne_" & i & j 
    Stabl(i, j).OnAction = "'ref_col_ligne_ & i & j "
    sans résultat

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    C'est bon j'ai trouvé ton bonheur!
    Testé et ça marche.

    En plus avec ça tu n'as besoin que d'une seule procédure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Stabl(i, j).OnAction = "'ref_col_ligne(""" & j & """)'"

  7. #7
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Citation Envoyé par decondelite Voir le message
    C'est bon j'ai trouvé ton bonheur!
    Testé et ça marche.

    En plus avec ça tu n'as besoin que d'une seule procédure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Stabl(i, j).OnAction = "'ref_col_ligne(""" & j & """)'"
    Génial !!

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bravo

    donc qd vous voulez passer un argument à une procudure déclenché par le onaction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    onaction = "'ref_col_ligne(""" & i & j & """)'"
    Voici le code complet

    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
     
    Option Explicit
     
    Dim Stabl(1 To 6, 1 To 7) As Shape
     
    Sub mise_en_page()
    Dim i As Byte
    Dim j As Byte
     
    Const Rwidth = 45
    Const Rheigth = 43
    For i = 1 To 6
        For j = 1 To 7
           Set Stabl(i, j) = ActiveSheet.Shapes.AddShape(msoShapeOval, Cells(i + 1, j + 3).Left + (Cells(i + 1, j + 3).Height - Rheigth) / 2, Cells(i + 1, j + 3).Top + (Cells(i + 1, j + 3).Width - Rwidth) / 2, Rwidth, Rheigth)
           Stabl(i, j).Name = "t" & i & j
           Stabl(i, j).OnAction = "'ref_col_ligne(""" & i & j & """)'"
        Next j
    Next i
     
     
    End Sub
    Sub ref_col_ligne(n)
    MsgBox " vous activer le bouton " & n
    End Sub
    Ceci permet de distniguer quel bouton a été actionné et d ' orienter le programme .

    MERCI

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Si tu veux utiliser 2 arguments distincts ça donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Stabl(i, j).OnAction = "'ref_col_ligne(""" & i & """),(""" & j & """)'"
    Ce que tu as donné concatène tes 2 caleurs en un seul argument: ce n'est peut-être pas l'idéal, et il se peut que tu aies besoin de les avoir séparés.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    Je veux concaténer les deux arguments

    merci

  11. #11
    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 : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Pour info, si l'on veut savoir quelle est la forme qui a appelé la procédure, on peut également utiliser ceci :


    Cdlt

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/07/2007, 23h45
  2. [SQL] Comment utiliser dans une requête une variable passée par URL
    Par foffa dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/08/2006, 12h27
  3. Réponses: 6
    Dernier message: 12/03/2006, 17h30
  4. [VB6]Passer une variable à une procédure évennementielle
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/12/2005, 19h19
  5. Réponses: 2
    Dernier message: 23/10/2005, 18h05

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