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 :

Copie de "bouton de commande" via une Macro [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Copie de "bouton de commande" via une Macro
    Bonjour à tous.

    Je suis un petit nouveau qui a besoin de vous concernant un problème sous Excel. Je voulais tout d'abord que j'ai trouvé votre forum en cherchant pour mon problème, et je me suis dit: "pourquoi pas m'inscrire? Ils ont l'air de donner d'excellentes réponses aux problèmes, donc j'imagine que moi aussi ils vont y arriver."
    J'espère que votre expérience pourra m'aider, car j'en ai bien besoin!!

    Voici mon problème. J'ai un projet sous Excel 2007 à faire dans le cadre de mes études, et la difficulté réside dans le copier/coller d'un bouton de commande vers une nouvelle feuille. Je vous explique ça plus en détail.

    Je possède dans mon classeur Excel, une feuille nommée "Prestations".
    Dans cette feuille j'ai 4 boutons de commandes qui gèrent des macros.
    Dans un des boutons, il y a une macro qui permet de creer une nouvelle feuille via la commande "Sheets.Add".
    Ce que j'aimerais, c'est que lors de la création de cette nouvelle feuille, les 4 boutons soient également créer avec la feuille. C'est cela que je n'arrive pas à executer sous VB. Je précise que je suis novice de chez novice, donc toutes vos explications même les plus simples, je prend!!

    Si jamais quelqu'un sait résoudre mon problème, je l'en remercie d'avance.

  2. #2
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Bonjour et bienvenue,
    Comme ton cas est assez simple et étant donné que tu veux progresser il y a une méthode qui a fait ses preuves et qui consiste à utiliser l'enregistreur de Macro.
    Tu démarre l'enregistreur et tu fais manuellement ce que tu veux, ensuite tu arrête l'enregistreur et tu vas voir le code.
    Tu apprendra ensuite à le 'nettoyer' (avec l'aide du Forum si nécessaire).
    Essaies, si tu bloque, reviens ici...
    A+

  3. #3
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Fvandermeulen

    Bonjour et bienvenue,
    Comme ton cas est assez simple et étant donné que tu veux progresser il y a une méthode qui a fait ses preuves et qui consiste à utiliser l'enregistreur de Macro.
    Tu démarre l'enregistreur et tu fais manuellement ce que tu veux, ensuite tu arrête l'enregistreur et tu vas voir le code.
    Tu apprendra ensuite à le 'nettoyer' (avec l'aide du Forum si nécessaire).
    Essaies, si tu bloque, reviens ici...
    A+
    Merci a toi de m'accueillir sur ce forum.
    Alors j'ai suivi tes conseils en utilisant l'enregistreur de Macro mais cela bloque toujours. En effet, dans la macro permettant de creer une nouvelle feuille je lui ai ajouté la macro_test que je venais de créer. Malheureusement cela ne fonctionne pas, car je pense qu'il y a un conflit au niveau du nom des boutons. J'ai le bouton qui s'affiche, mais je n'ai pas l'ecriture du bouton initial et puis deuxième chose la macro s'arrête.

    Lorsque la macro s'arrête, le message d'erreur est le suivant :
    "L'élement portant ce nom est introuvable" et il me désigne la ligne suivante comme problème (en jaune lors de l'execution de la macro):
    --> ActiveSheet.Shapes("Bouton 8").Select

    J'ai donc essayé de changer le nom du bouton, mais non, rien n'y fait. As-tu ou en lisant mon problème, avez-vous des suggestions?

    Merci encore de prendre de votre temps pour m'aider, ça me fait plaisir

  4. #4
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,
    Malheureusement il manque quelques infos pour savoir exactement ce que tu as fait.
    Sache que les noms de bouton 'changent' automatiquement.
    Toujours avec l'enregistreur tu peux le découvrir en faisant la sélection du bouton collé dans ta nouvelle feuille.
    Imaginons donc que tu as sélectionné le bouton 4 de ta feuille d'origine, en le collant dans ta nouvelle feuille il devrait prendre le nom de 'Bouton 1'.
    Il faut ensuite lui affecter la macro voulue, pour l'exemple disons Macro1.
    Voici ce que tu verrais avec l'enregistreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub CopieBouton()
    '
        ActiveSheet.Shapes("Button 4").Select 'Sélection du bouton 4 dans la feuille d'origine
        Selection.Copy 'copie du bouton sélectionné
        Sheets("Sheet4").Select 'On passe sur la feuille ajoutée
        ActiveSheet.Paste 'On colle sur la feuille active
        Selection.OnAction = "Macro1" 'On affecte la Macro1 sur la sélection => le bouton collé.
    End Sub
    Pour t'avancer un peu voici un petit exemple de nettoyage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub CopieBouton()
    '
        Sheets("Sheet1").Shapes("Button 4").Copy 'On évite le select => on gagne une ligne
        Sheets("Sheet4").Paste 'On évite le select => on gagne une ligne
        Sheets("sheet4").Shapes("Button 1").OnAction = "Macro4" 'Comme on n'a pas fait de Select il faut indiquer à "quoi" affecter la macro
    End Sub
    Attention, j'ai gardé les noms texte des feuilles (en plus en anglais car je suis sur une version GB), il faut adapter selon ton cas

    Dernier petit point, quand tu copie un bout de code sur le forum, pense à la baliser avec le signe # (à droite sur la deuxième ligne de mise en forme) ça facilite fortement la lecture.
    A+

  5. #5
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonsoir à toi Fvandermeulen.

    Merci beaucoup pour l'aide que tu m'as apporté. Le premier code que tu m'as donné fonctionne très bien à quelques petits détails près, mais qui sont légers.
    Ces petits détails sont:
    - quand j'execute la macro me permettant d'ajouter ma nouvelle feuille et les boutons qui vont avec, les boutons crées ont une taille qui change par rapport à l'initial (ils deviennent plus gros)
    -deuxième point, les boutons ne se collent pas au même endroit.

    Certes ce sont des détails, mais je suis sûr que vous saurez résoudre ce problème de taille et de position!

    Sinon j'avais une autre question. J'ai un bouton associé à une macro qui m'ajoute une nouvelle feuille. Cette nouvelle feuille s'appelle par défaut "Feuil1", puis si je clique de nouveau sur le bouton, une nouvelle feuille avec le nom "Feuil2".

    J'ai utilisé dans ma macro le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ActiveSheet.Shapes("Button 8").Select 'Sélection du bouton 4 dans la feuille d'origine
    Selection.Copy 'copie du bouton sélectionné
     
    Sheets.Add 'ajout de la nouvelle feuille
     
    Sheets("Feuil6").Select 'On passe sur la feuille ajoutée
    ActiveSheet.Paste  'On colle sur la feuille active
    Selection.OnAction = "Hello" 'On affecte la macro "Hello" sur la sélection => le bouton collé.
    J'aimerais donc savoir s'il était possible d'ajouter un nom prédéfini à l'avance pour ces nouvelles feuilles, avec au lieu de "Feuil1", "Feuil2" et ainsi de suite, j'aimerais avoir "Prestations1", "Prestations2" ... Est-il possible de le faire, car sinon je laisse comme cela avec les noms de feuilles par défaut.

    Encore une énorme merci pour votre aide et le temps que vous m'accordé pour m'aider.

  6. #6
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,
    Tout juste à temps, j'allais partir...c'est pourquoi, en ce qui concerne la taille et la position j'ai pas trop le temps mais l'enregistreur de macro pourra peyt-être t'aider dans un premier temps.
    En ce qui concerne l'ajout d'une feuille avec un nom, voici le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        NbFeuil = ActiveWorkbook.Sheets.Count
        Sheets.Add.Name = "Prestations " & NbFeuil + 1
        Sheets("Prestations " & NbFeuil + 1).Move After:=Sheets(NbFeuil + 1)
    Je me suis permis de faire en sorte que la feuille ajoutée le soit en dernière position.
    Bonne continuation

  7. #7
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup Fvandermeulen.

    Ton code fonctionne parfaitement! Encore un énorme merci pour tout. Pour ce qui est de la position je vais essayer de trouver tout seul, ainsi que pour la copie de tout mes boutons sur la nouvelle feuille avec leurs macros associées!

    Bonne soirée.

  8. #8
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Bonjour,
    Je viens de penser à quelque chose...ne peux tu pas copier la feuille intégralement, ça te permet de garder la mise en forme ET la macro associée au bouton.
    Si ça te convient, ça facilitera ton code (je te laisse voir avec l'enregistreur au cas où)
    Si ça ne te vas pas je te laisse voir pour la mise en forme mais pour l'association, noublies pas ceci (a adapter avec tes données):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub CopieBouton()
    '
        Sheets("Sheet1").Shapes("Button 4").Copy 'On évite le select => on gagne une ligne
        Sheets("Sheet4").Paste 'On évite le select => on gagne une ligne
        Sheets("sheet4").Shapes("Button 1").OnAction = "Macro4" 'Comme on n'a pas fait de Select il faut indiquer à "quoi" affecter la macro
    End Sub
    A+

  9. #9
    Candidat au Club
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Salut Fvandermeulen!

    Merci beaucoup pour ta précieuse aide. J'ai bien réussi à copier les boutons associés à leurs macros. Ton code fonctionnait parfaitement donc je te dis un énorme MERCI!

    En tout cas je voulais te féliciter pour ta rapidité ainsi que pour le temps pris pour résoudre mon problème!!!

    Sur ce, je mets mon message en [Résolu]!

    Peut-être à bietôt sur ce forum.

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

Discussions similaires

  1. Supprimer un objet / text via une macro placée sur un bouton
    Par Lauvira dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 17/11/2012, 05h43
  2. Réponses: 5
    Dernier message: 24/03/2009, 10h20
  3. Réponses: 4
    Dernier message: 28/11/2007, 23h07
  4. [VBA-E]Filtre via une macro sur Excel
    Par jamal.b dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/04/2006, 15h35

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