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 plusieurs procédures à une shape


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut Affecter plusieurs procédures à une shape
    Bonjour à toutes et à tous,


    J'ai 4 formes (base1, base2, base3, base4) :

    Nom : forme.jpg
Affichages : 159
Taille : 22,8 Ko

    J'ai affecté à chacune des 4 formes une procédure commune qui fait apparaître des stimuli (ex : le X jaune) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Procedure_commune()
     
       Dim i as Byte
     
       i = i + 1
     
       Worksheets("BD").Shapes("forme" & i).Copy : Worksheets("Test").Paste
     
    End Sub
    Est-il possible d'affecter une autre procédure à chacune des formes (qui sera différente pour chaque forme) ?

    J'ai essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Worksheets("Test").Shapes("base1").OnAction = "Procedure_base1"
    Worksheets("Test").Shapes("base2").OnAction = "Procedure_base2"
    ....
    mais cela écrase la procédure commune...


    Si quelqu'un a une petite idée

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Je ne vois pas le rapport entre les 2 codes.
    D'autre part, dans le premier, à quoi sert la variable i? Aucune boucle n'est gérée.
    Peux-tu nous en dire davantage?

    Plus généralement, j'ai une préférence pour les contrôles ActiveX boutons de commande.
    Mais c'est un choix.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    Bonjour Marcel merci à toi,


    La variable i permet d'incrémenter les différentes formes que je vais copier dans la base de données ("BD").

    Pour être plus clair j'ai essayé ceci avec 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Sub Procedure_commune()
     
       Dim i as Byte
     
       i = i + 1
     
       Worksheets("BD").Shapes("forme" & i).Copy : Worksheets("Test").Paste
     
       Worksheets("Test").Shapes("base1").OnAction = "Proc_Base1"
       Worksheets("Test").Shapes("base2").OnAction = "Proc_Base2"
     
    End Sub
     
     
    Sub Proc_Base1()
    ......
    End Sub
     
     
    Sub Proc_Base2()
    .......
    End Sub

    Mais les secondes procédures (Proc_Base1 et 2) viennent écraser la procédure commune.

    Pour les contrôles active X, je suis d'accord avec toi mais les formes (base1, base2 etc) sont un peu plus complexes que celles que je présente ici et je ne sais pas s'il est possible d'insérer des formes personnalisées dans des contrôles active X?

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    La variable i permet d'incrémenter les différentes formes
    Là non. i reste figé à 1.

    Pourrais-tu retourner le code complet des procédures Proc_base1 et Proc_base_2, s'il te plaît.

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    La variable i permet d'incrémenter
    Que nenni, puisqu'elle est déclarée en début de procédure et donc = 0 à ce moment, puis 1 (toujours) à la suite de l'ajout de 1 ...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut


    Au temps pour moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Public i As Byte
    En début de code...

    Au lieu de :
    Sinon voici le style de procédures simplettes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Proc_Base1()
     
       Worksheets("Cotation").Range("C4").Value = "base1"
     
    End Sub
     
     
    Sub Proc_Base2()
     
       Worksheets("Cotation").Range("C4").Value = "base2"
     
    End Sub

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour à tous,

    il faut des simples cotes quotes en plus (il me semblait bien trouver qq chose bizarre en validant mon post, mais impossible de mettre le doigt dessus :-) ) :
    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
    Sub test()
        ActiveSheet.Shapes("base1").OnAction = "'Procedure_commune 1'"
        ActiveSheet.Shapes("base2").OnAction = "'Procedure_commune 2'"
    End Sub
     
    Sub Procedure_commune(param As Long)
    Debug.Print param
        'code commun
        '...
        Select Case param
        Case 1: Procedure_base1
        Case 2: Procedure_base2
        End Select
        'code commun
        '...
    End Sub
    eric

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

Discussions similaires

  1. affecter plusieurs valeurs à une variable
    Par khamett dans le forum VBScript
    Réponses: 2
    Dernier message: 19/06/2013, 11h14
  2. affecter plusieur clé dans une table de hachage
    Par washh dans le forum Langage
    Réponses: 1
    Dernier message: 22/07/2008, 11h30
  3. Réponses: 3
    Dernier message: 13/10/2007, 16h31
  4. Affecter plusieurs style à une police.
    Par thib42 dans le forum VB.NET
    Réponses: 3
    Dernier message: 14/08/2007, 12h19
  5. Réponses: 3
    Dernier message: 22/03/2006, 15h38

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