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 :

Détecter s'il y a un bouton dans une feuille


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien méthodes métrologie sur site
    Inscrit en
    Novembre 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien méthodes métrologie sur site
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2010
    Messages : 107
    Par défaut Détecter s'il y a un bouton dans une feuille
    Re-bonjour à tous !
    Vous auriez raison de dire que j'abuse moi même je le trouve.
    Hélas je débute et on m'a collé un gros truc sur le dos.
    Ma macro à ce stade transfert des feuilles et des macros d'un fichier1 à un fichier2.
    Dans ces feuilles transferées des fois il y a des boutons associées à des macros transferées elles aussi.
    Comment faire pour sonder s'il y a des boutons dans les feuilles et modifier la macro à laquelle elles font référence (étant donné qu'elle changent de place il les perds il faut donc leur redonner le bon chemin)?
    Un grand merci pour l'aide que vous m'apporterez.

  2. #2
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Re-Bonjour :-)

    La collection pour accéder aux objets d'une feuille est Shapes. Les objets peuvent être de différents types, mais si tu n'as que des boutons c'est plus simple.
    Par exemple, pour savoir si une feuille "Feuil1" en contient, il suffit de tester Sheets("Feuil1").Shapes.Count.

    Je ne sais pas avec quelle méthode tu copie tes feuilles, mais le lien entre le bouton et la macro se fait dans le nom des procédures évènementielles.
    Par exemple, avec un bouton nommé Command1, l'évènement Click déclenche la procédure Command1_Click.
    Si tu arrives à redonner les mêmes noms aux boutons copiés (en modifiant Workbook("Destination").Sheets("Feuil1").Shapes(x).Name avec Workbook("Source").Sheets("Feuil1").Shapes(x).Name), le code fonctionnera correctement dans la feuille destination. Sinon, tu dois renommer les procédures selon les nouveaux noms de boutons.

    Voilà, j'espère que ce n'est pas trop confus

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien méthodes métrologie sur site
    Inscrit en
    Novembre 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien méthodes métrologie sur site
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2010
    Messages : 107
    Par défaut
    Excellent merci beaucoup pour ta réponse.

    Il me reste une petite question.
    Quelqu'un connait-il la fonction pour récupérer le chemin de la macro affectée au bouton et le modifier.
    Je suppose que c'est un Shapes.????, ou bien Shape.???? je n'ai pas compris la différence entre les deux, mais je n'ai pas trouvé laquelle.

    J'ai tenté cela. Hélas ca ne fonctionne pas. Il ne trouve pas l'ancien chemin de la macro.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    If (ActiveSheet.Shapes.Count > 0) Then
                        'Pour chaque bouton dans le classeur xls
                        For Each bouton In ActiveSheet.Shapes
                        nom_macro = bouton.OnAction
                        MsgBox (nom_macro)
                        If (nom_macro <> "") Then
                        nom_macro = Mid(nom_macro, InStrRev(nom_macro, "!") + 1)
                        nom_macro = ThisWorkbook.FullName & "!" & nom_macro
                        bouton.OnAction = nom_macro
                        End If
                        Next bouton
    End If

  4. #4
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,

    Tout dépend du type bouton
    Si le bouton est de type formulaire, bouton.Type = 8 (msoFormControl) alors il s'agit d'un bouton pour lequel on attribue une macro et c'est la propriété OnAction qui contient son nom.
    Si le bouton est de type ActiveX, bouton.Type = 12 (msoOLEControlObject) alors il n'y a pas de macro attribuée, la propriété OnAction est vide et c'est la procédure bouton_Click qui s'exécute toujours lorsqu'on clique dessus.


    Le type Shapes désigne la collection de tous les objets sur une feuille. On connait leur nombre par Shapes.Count, et on en désigne un en particulier par Shapes(n) pour le nième objet ou Shapes("toto") pour l'objet qui s'appelle "toto".
    Le type Shape désigne un seul objet. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim objTest as Shapes
    Set objTest = ActiveSheet.Shapes(2)
    Voilà, bonne continuation

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien méthodes métrologie sur site
    Inscrit en
    Novembre 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien méthodes métrologie sur site
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2010
    Messages : 107
    Par défaut
    Ok !
    Les boutons contenus dans mes feuilles sont des boutons créés via l'outil dessin rectangle auquel via clic droit a été affecté une macro.

    oh oh !
    Bouton type 4
    Ca doit pas être très conventionnel la manière donc a été créé ce bouton
    Que faire dans ce cas là ?

  6. #6
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Re-bonjour,
    Je ne sais pas comment sont tes boutons, moi quand je fais la même manip, j'ai un type 1...

    Est-ce que tu peux mettre ton fichier en pièce jointe ?

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

Discussions similaires

  1. [XL-2007] Lien code - bouton dans une feuille
    Par khaourantin dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/04/2012, 22h01
  2. insérer un bouton dans une feuille excel lié à une fonction vba
    Par thierry_b dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/06/2009, 12h14
  3. Détecter un bouton dans une fenêtre
    Par france38 dans le forum Windows
    Réponses: 17
    Dernier message: 03/02/2009, 11h10
  4. Ajout d'un bouton dans une feuille excel avec vba
    Par nsqualli dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/11/2008, 15h35
  5. affecter une macro à un bouton dans une feuille
    Par gu000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/10/2007, 14h04

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