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 :

Macro avec des étiquettes [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 65
    Par défaut Macro avec des étiquettes
    Bonsoir,

    j'ai effectué une macro en intégrant des étiquettes.

    ça fonctionne bien la première fois, mais les fois suivantes il y a un bug.

    J'ai cherché, mais je ne vois pas d'où vient mon erreur.
    Merci pour votre aide.
    Bonne soirée.

    Voici l'écriture de ma macro :
    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
    Sub macro4()
     
    Dim reponse As String
    Dim nomfeuille As String
     
    debut:
    reponse = MsgBox("Voulez-vous ajouter une feuille", vbYesNo, vbQuestion)
     
    reponseoui:
    Sheets.Add
    nomfeuille = InputBox("quel est le nom de la feuille que vous souhaitez nommer")
    ActiveSheet.Name = nomfeuille
    GoTo debut
     
    reponseno:
    MsgBox ("Vous avez choisi de ne pas ajouter une feuille. La macro va donc s'arrêter"), vbInformation
     
     
    If reponse = vbYes Then GoTo reponseoui
     
     
    If reponse = vbNo Then GoTo reponseno
     
    Exit Sub
     
    End Sub
    Si besoin l'instruction qui m'a été donnée :

    Créer une macro qui vous demande si vous voulez ajouter une feuille avec les boutons "oui" et "non".
    Si vous répondez "oui", la macro doit :
    Vous renvoyer vers une étiquette
    Ajouter une feuille
    Vous demander le nom de la feuille et donc la renommer
    Retouner à la demande d'ajout de feuille

    Si vous répondez "non", la macro doit :
    Vous renvoyer vers une étiquette
    Vous afficher le message : "Vous avez choisi de ne pas ajouter une feuille. La macro va donc s'arrêter."
    Quitter la macro



    Encore Merci

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir Kiera, bonsoir le forum,

    Essaie comme ça :

    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
    Sub macro1()
    Dim Reponse As Integer 'une msgbox renvoie une donnée de type integer
    Dim NomFeuille As Variant 'permet de coder sur le bouton[Annuler] sans bug
    Dim O As Object
     
    debut: 'étiquette
    Reponse = MsgBox("Voulez-vous ajouter une feuille", vbYesNo, vbQuestion) 'message
    If Reponse = vbYes Then GoTo reponseoui 'si [Oui] au message va à l'étiquette "reponseoui"
    If Reponse = vbNo Then GoTo reponseno 'si [Non] au message va à l'étiquette "reponseno"
     
    reponseoui: 'étiquette
    NomFeuille = Application.InputBox("quel est le nom de la feuille que vous souhaitez nommer", Type:=2) 'permet de coder sur le bouton [Annuler] sans bug
    If NomFeuille = False Then GoTo reponseno 'si bouton [Annuler]
    If NomFeuille = "" Then GoTo reponseoui 'si bouton [Ok] sans être renseignée
    For Each O In Sheets 'boucle sur tous les onglets O du classeur
        If NomFeuille = O.Name Then 'condition : si NomFeuille est égale au nom de l'onglet O
            MsgBox "Un onglet portant ce nom existe déjà ! Vous devez proposer une autre nom." 'message
            GoTo reponseoui 'retour à la boîte d'entrée du nom de l'onget
        End If 'fin de la condition
    Next O 'prochain onglet de la boucle
    Sheets.Add 'ajoute un onglet
    ActiveSheet.Name = NomFeuille 'renomme l'onglet ajouté
    GoTo debut 'retour à l'étiquette début
     
    reponseno: 'étiquette
    MsgBox "Vous avez choisi de ne pas ajouter une feuille. La macro va donc s'arrêter", vbInformation 'message
    End Sub

    Il es préférable de définir en premier le nom avant d'ajouter un onglet. Si tu fais le contraire, tu ajoutes un onglet, puis au moment de définir le nom, tu changes d'avis et tu cliques sur annuler, tu te retrouves avec un bug et on onglet en plus...

    J'ai rajouté une boucle pour éviter le bug si un onglet avec le nom défini dans la boîte d'entrée existe déjà...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    je ne voie pas l’intérêt des étiquettes!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if msgBox("Voulez-vous ajouter une feuille",vbYesNo + vbQuestion) = vbNo then  MsgBox "Vous avez choisi de ne pas ajouter une feuille. La macro va donc s'arrêter", vbInformation: exit sub
    Dernière modification par Invité ; 08/01/2015 à 14h18.

  4. #4
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonsoir à tous

    Je suis tout a fait d'accord avec toi rdurupt et je suis désolé Thautheme mais j'aime pas les goto

    voici donc ce que je propose
    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
    Sub Ajout_Feuille()
        Dim Reponse As Byte
        Dim Nom_Nv_Feuil As String
        Dim Message As String
        Dim Style As Long
        Dim Titre As String
     
        Do
            Message = "Voulez-vous ajouter une feuille"
            Style = vbYesNo + vbQuestion
            Titre = "Ajout d'une feuille"
            Reponse = MsgBox(Message, Style, Titre)
            If Reponse = vbYes Then
     
                ' attention il faut gerer le bouton annulé qui renvoi vide dans la variable : Nom_Nv_Feuil
                Sheets.Add
                Nom_Nv_Feuil = InputBox("quel est le nom que vous souhaitez donner à la nouvelle feuille")
                If Nom_Nv_Feuil = "" Then
                    Exit Sub
                Else
                    ActiveSheet.Name = Nom_Nv_Feuil
                End If
            Else
                MsgBox "Vous avez choisi de ne pas ajouter une feuille. La macro va donc s'arrêter", vbInformation
            End If
        Loop While Reponse <> vbNo
    End Sub
    pas d'étiquette et donc pas de goto non plus


    tu dis si cela te convient Kiera

    à bientôt

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 65
    Par défaut
    Bonjour à tous,

    Je vous remercie tous les trois pour votre aide.

    Néanmoins, je suis contrainte de respecter les consignes qui me sont imposées.(Sachant que je suis débutante, le but de cette macro était sûrement de nous montrer l'utilité des étiquettes).

    Bien évidemment, je prends en considération vos réponses (sans les étiquettes) mais pour mes connaissances personnelles.

    Je vous remercie une nouvelle fois pour votre aide.
    C'est très aimable de votre part.

    Cordialement

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par Kiera Voir le message
    Bonjour à tous,

    Néanmoins, je suis contrainte de respecter les consignes qui me sont imposées.(Sachant que je suis débutante, le but de cette macro était sûrement de nous montrer l'utilité des étiquettes).

    Cordialement
    Je dirais que dans 90% des cas, on peut s'en passer. Le 10% qui reste, c'est pour la gestion des erreurs.

  7. #7
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Citation Envoyé par Igloobel Voir le message
    Je suis tout a fait d'accord avec toi rdurupt et je suis désolé Thautheme mais j'aime pas les goto
    Ne soit pas désolé Igloobel. Il y a des choses qui sont bien plus désolantes que ça... D'autant plus que je n'ai jamais dit que j'aimais les Goto. J'ai simplement répondu à une question précise. Ce qui est incroyable dans le forum c'est de toujours se faire reprendre dès qu'on a le malheur d'ouvrir la bouche. Ça gave à force !

  8. #8
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Sub macro4()
     
    'Il est préférable de mettre au moins une majuscule dans les noms de variables
    'Ca rend plus facile leur identification au sein du code et te permet de voir si tu as mal orthographié une variable dans ton code (absence de majuscule)
    Dim Reponse As String
    Dim NomFeuille As String
    Dim NouvelleFeuille As Worksheet
     
    Debut:
        Reponse = MsgBox("Voulez-vous ajouter une feuille", vbYesNo, vbQuestion)
     
    'Ici le code va se prolonger sans tenir compte de ta réponse, il faut mettre ta structure de contrôle de la réponse ici
    'Au passage une structure IF peut prendre différente forme
    'Au passage, lorsque tu utilises un msgbos Oui/Non, sache que si l'utilisateur renonce en cliquant sur le croix rouge, la réponse ne sera ni Oui ni Non.
    'En utilisant une structure if...else... tu éviteras les problèmes
    If Reponse = vbYes Then
        GoTo ReponseOui
    Else 'sera executé en cas de réponse Non ou croix rouge
        GoTo ReponseNo
    End If
     
     
     
    ReponseOui:
        'On crée une nouvelle feuille qu'on pointe avec la variable NouvelleFeuille
        Set NouvelleFeuille = Sheets.Add
        NomFeuille = InputBox("Quel est le nom de la feuille que vous souhaitez nommer") 'pas super français comme message ;)
        'Comme l'ont fait remarquer d'autres avant moi, ici il faudrait dans un cas réel vérifier que NomFeuille n'est pas un contenu inapproprié (nom déjà existant ou chaine vide)
        'Mais bon ça n'est pas demandé dans l’énoncé
        'ActiveSheet (à moins que tu n’aie rien vu d'autre en cours) il vaut mieux réserver son utilisation dans des cas où il n'est pas possible de faire autrement
        'Ça évite bien des déconvenues.
        NouvelleFeuille.Name = NomFeuille
        GoTo Debut
     
    ReponseNo:
        MsgBox ("Vous avez choisi de ne pas ajouter une feuille. La macro va donc s'arrêter"), vbInformation
     
     
    'Exit Sub 'Inutile, la marco est déjà à la fin
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  9. #9
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous

    Citation Envoyé par Thautheme Voir le message
    Bonsoir le fil, bonsoir le forum,

    Ne soit pas désolé Igloobel. Il y a des choses qui sont bien plus désolantes que ça... D'autant plus que je n'ai jamais dit que j'aimais les Goto. J'ai simplement répondu à une question précise. Ce qui est incroyable dans le forum c'est de toujours se faire reprendre dès qu'on a le malheur d'ouvrir la bouche. Ça gave à force !
    Loin de moi l'idée de te vexer ou te gaver Car bon nombre de tes réponses sont pertinentes
    Cependant quand j'ai appris à programmer ma Prof d'info (ancienne Ingénieur développeur, qui doit être à la retraite aujourd'hui) nous a dis (Je m'en souvient encore) "Si je vois un Goto sur votre devoir c'est Goto moins 15 points !" Glups.
    Donc je suis formater comme cela
    Je précise qu'a l'époque je programmais en Cobol ANS74 (Pour ceux que cela dis quelque chose) sur un Mini IBMS36 ! Epoque du DOS

    Pourquoi elle a dit cela, c'est parce que la programmation n'est pas structurée avec les goto et donc la maintenance y est très difficile.

    Mais bon je comprends Kiera si ton profs veux des étiquettes ....

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

Discussions similaires

  1. [XL-2013] Activer une macro avec des CheckBox
    Par isrdum dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/08/2014, 10h58
  2. [Toutes versions] Affecter un bouton à une macro avec des paramètres
    Par nerixm dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/03/2011, 14h47
  3. Macro avec des accents
    Par ceweb dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 17/11/2008, 17h40
  4. Macro avec des ". . ."
    Par vanitom dans le forum MFC
    Réponses: 5
    Dernier message: 09/10/2008, 14h35
  5. Macro pour ouvrir un fichier excel avec des ','
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 30/05/2007, 18h08

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