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 :

Command button et forme sélectionnée [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut Command button et forme sélectionnée
    Bonjour,

    XL2007 et postérieures

    Un interlocuteur attire mon attention sur un comportement surprenant (pour moi) des command buttons. Le but est de modifier la couleur de la forme sélectionnée en appuyant sur un command button. Le code va donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10

    sauf que, à l'exécution ligne à ligne, avant d'exécuter celle-ci (qui est la première ligne), dans la fenêtre d'exécution,

    renvoie $B$14

    donc un range et l'exécution de la ligne citée provoque une erreur 438 (logique). Apparemment toujours B14, même si on déplace le command button, mais variable d'un classeur à l'autre.
    Le bouton des contrôles de formulaire, lui, fonctionne.

    Quelqu'un a-t-il un début d'explication ? Merci d'avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Le contrôle ActiveX nécessite qu'on lui fournisse la Shape à traiter. Ce n'est donc pas la sélection de la Shape qui va le renseigner alors que c'est ce qu'il faut faire avec un contrôle de Formulaire. Voir l'exemple fourni qui comporte 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
    Sub aa()
    Dim A$
    Dim SH As Shape
    '---
    On Error Resume Next
    A$ = Application.Caller
    If Err = 0 Then
      '--- Contrôle de formulaire ---
      Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
    Else
      '--- Contrôle ActiveX ---
      'il faut identifier la Shape (ce n'est pas la sélection qui compte)'
      Set SH = ActiveSheet.Shapes("Ellipse 1")  'OU PAR SON INDEX ActiveSheet.Shapes(1)
      SH.Fill.ForeColor.SchemeColor = 30
    End If
    On Error GoTo 0
     
    '''suite du traitement
     
    End Sub
    Fichiers attachés Fichiers attachés

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Merci de ta réponse. Ca confirme ce que je constate. Est-ce que tu as une idée de pourquoi une cellule est sélectionnée ? Parce qu'il en faut une ? Sinon, merci pour l'exemple. Mon interlocuteur,, ayant beaucoup de shapes, a opté pour un bouton dans la barre d'outils accès rapide.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Pourquoi une cellule est sélectionnée ?
    L'ActiveX considère comme Selection la dernière cellule (ou plage) qui a été sélectionnée.

    On peut toutefois sélectionner la Shape tout en exécutant le code de l'ActiveX mais je ne vois pas l'intérêt, pour ce faire remplacer le code de mon exemple par celui-ci :
    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
    25
    26
    27
    28
    29
    30
    31
    Option Explicit
     
    Sub aa()
    Dim A$
    Dim SH As Shape
    '---
    On Error Resume Next
    A$ = Application.Caller
    If Err = 0 Then
      '--- Contrôle de formulaire ---
      Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
    Else
      '--- Contrôle ActiveX ---
      'il faut identifier la Shape (ce n'est pas la sélection qui compte)'
      Set SH = ActiveSheet.Shapes("Ellipse 1")  'OU PAR SON INDEX ActiveSheet.Shapes(1)
      SH.Fill.ForeColor.SchemeColor = 30
     
    '###
    Dim i&
    For i& = 1 To 20: DoEvents: Next i&   'boucle pour le rafraîchissement
    SH.Select
    MsgBox "On sélectionne maintenant la Shape par code"
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 20  'l'instruction se réfère à l'objet Selection
    '###
     
    End If
    On Error GoTo 0
     
    '''suite du traitement
     
    End Sub

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Merci, ma problématique est de ne pas utiliser le nom ou l'index de la forme.

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

Discussions similaires

  1. OLE commander par un command button
    Par drogba-11 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/07/2007, 21h24
  2. numéro de commande sous la forme 200700001
    Par Satch dans le forum Modélisation
    Réponses: 1
    Dernier message: 21/06/2007, 10h44
  3. faire bouger 2 command button simultanement
    Par Namson dans le forum VB.NET
    Réponses: 6
    Dernier message: 23/05/2007, 09h43
  4. Apparence des boutons de commande sur les forms
    Par azopei dans le forum Access
    Réponses: 2
    Dernier message: 17/02/2006, 14h19

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