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

  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 : 34
    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
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    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 : 34
    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
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    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 : 34
    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
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    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 ?

  7. #7
    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 : 34
    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
    Si j'ai bien compris quand je fais mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    For Each bouton In ActiveSheet.Shapes
    Shapes étant des "objets" il se peut qu'il ne prenne pas que des boutons.

    Je mets mon fichier. Merci pour ton aide.

    Je ne sais pas s'il te sera très utile.
    D'autant que le bouton que je veux modifier n'est pas dans ce fichier là.
    Ca c'est la macro qui le modifiera.

  8. #8
    Membre Expert
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Ton raisonnement est juste à propos des "Shapes".
    Je regarde ton fichier et te réponds dans un moment.
    A+

  9. #9
    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 : 34
    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
    Tu as raison je trouve 1 aussi comme type de bouton.
    J'ai fait un test dans un fichier autre que le définitif.
    Dans mon fichier définitif il doit donc y avoir un autre objet que je n'avait pas vu.
    Il me reste donc à faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(shape.type=1)then
    Merci pour ton aide.

  10. #10
    Membre Expert
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Je ne trouve aucun objet dans le fichier que tu as joint, je ne peux donc pas en faire grand chose.
    Bonne suite...

  11. #11
    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 : 34
    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 Correction bug !
    Bon j'ai réussi à me débrouiller pour la suite.
    Me reste un bug que je trouve assez exceptionnel le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                        nom_macro = rep3 & fic3 & "!" & nom_macro
                        bouton.OnAction = nom_macro
    A savoir dans nom_macro il y a exactement ce que je veux.
    Mais après la ligne bouton.OnAction = nom_macro bouton.OnAction ne prend pas exactement la valeur de nom_macro. Voici leurs valeurs respectives :
    nom_macro="C:\TEMP\A0FZ2005LAD!\SOLMIFA_PT100_TEMPERATURE"
    bouton.OnAction="C:"M:\TEMP\A0FZ2005LAD"!SOLMIFA_PT100_TEMPERATURE"

    J'ai testé d'autres choses, même topo !
    Si je mets uniquement le nom du fichier xls suivi de !et le nom de la macro il me rajoute tout seul "M:\Docs\nom du fichier!nom de la macro"
    si je mets le chemin entier ex(c:\temp\nom du fichier!nom de la macro)
    il met "C:\"M:\temp\nom du fichier!nom de la macro""
    Une idée ?

  12. #12
    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 : 34
    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
    Personne n'a d'idée ?
    Une petite explication qui peut aider : M est un disque perso sur le réseau
    Or tous les fichiers xls utilisés dans cette macro sont sur D je ne comprend donc absolument pas pourquoi il me rajoute systématiquement un M:\

  13. #13
    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 : 34
    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
    Bon voilà je pense avoir trouvé.
    Si on veut mettre un chemin dans bouton.OnAction il faut mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bouton.OnAtion="'" & chemin_complet_du_fichhier & "!" & nom_macro

+ 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, 23h01
  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, 13h14
  3. Détecter un bouton dans une fenêtre
    Par france38 dans le forum Windows
    Réponses: 17
    Dernier message: 03/02/2009, 12h10
  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, 16h35
  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, 15h04

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