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 :

Supprimer>dupliquer>renommer un onglet [XL-2019]


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
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut Supprimer>dupliquer>renommer un onglet
    Bonjour à tous,

    J'aimerais disposer d'une petite macro qui semble simple à faire mais que je reste pour l’instant incapable de faire.

    L'idée c'est de me permettre de réinitialiser tout un onglet en utilisant un onglet vierge masqué.
    Je développe :
    J'ai un onglet EC (0) masqué qui contient une macro
    J'ai un onglet EC (1) affiché identique à EC (0) avec la même macro
    Quand je clique sur cette macro, la feuille sur laquelle la macro est utilisée est supprimée, puis l'onglet EC (0) est dupliqué et reprend le nom de l'onglet qui vient d'être supprimé (EC (1) dans mon exemple)


    Ce serait top de demander confirmation avant exécution de la macro avec une petit message du style "Confirmez-vous la réinitialisation ? Les données saisies sur cet onglet seront perdues."

    Si vous pouvez me mettre quelques annotations dans le code que je comprenne bien de quoi il s'agit ce serait parfait

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Anthony47 Voir le message
    Quand je clique sur cette macro, la feuille sur laquelle la macro est utilisée est supprimée
    Une macro ne peut pas supprimer le module dans laquelle elle se trouve. C'est comme scier la branche sur laquelle on est assis.
    Il faudra mettre la macro dans un autre module, par exemple celui de ta feuille modèle EC(0).

    Pour supprimer une feuille, méthode Delete de Worksheet.
    https://msdn.microsoft.com/fr-fr/lib...4(v=office.15)

    Avant la suppression de l'onglet, mettre son nom dans une variable de type String.

    puis l'onglet EC (0) est dupliqué
    Méthode Copy appliquée au Worksheet de EC(0).
    https://msdn.microsoft.com/fr-fr/lib...4(v=office.15)

    et reprend le nom de l'onglet qui vient d'être supprimé (EC (1) dans mon exemple)
    Propriété Name du Worksheet résultat de la copie.
    https://msdn.microsoft.com/fr-fr/lib...4(v=office.15)

    Ne pas oublier aussi, éventuellement, de décacher l'onglet copié.
    https://msdn.microsoft.com/fr-fr/lib...6(v=office.15)

    Ce serait top de demander confirmation avant exécution de la macro avec une petit message du style "Confirmez-vous la réinitialisation ? Les données saisies sur cet onglet seront perdues."
    Un simple MsgBox dans un If pourra faire ça.
    https://docs.microsoft.com/fr-fr/off...sgbox-function

  3. #3
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Ok, je vais tenter quelque chose avec ça, merci

  4. #4
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    On dirait que j'ai a peu près réussi

    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 Reset()
        Dim Name_OLD As String
        Dim Msg, Style, Title, Help, Ctxt, Response, MyString
        Dim No As Integer
     
        Name_OLD = ActiveSheet.Name 'sauvegarde l'ancien nom
        No = ActiveSheet.Index
     
    Msg = "Confirmez-vous la réinitialisation ? Les données saisies sur cet onglet seront perdues."    ' Define message.
    Style = vbYesNo + vbCritical + vbDefaultButton2    ' Define buttons.
    Title = "Demande de confirmation"    ' Define title.
    Help = "DEMO.HLP"    ' Define Help file.
    Ctxt = 1000    ' Define topic context.
            ' Display message.
    Response = MsgBox(Msg, Style, Title, Help, Ctxt)
     
    If Response = vbYes Then    ' User chose Yes.
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
     
        ActiveSheet.Delete 'supprime l'onglet
        Worksheets("EC (0)").Visible = True 'affiche l'onglet vierge
        Worksheets("EC (0)").Copy before:=Worksheets(No) 'copie l'ongelt vierge
     
     
        ActiveSheet.Name = Name_OLD 'renomme le nouvel onglet
     
      Worksheets("EC (0)").Visible = False 'masque l'onglet vierge
      MsgBox "Réinitialisation terminée"
     
    Else    ' User chose No.
        MyString = "Réinitialisation annulée"    ' Perform some action.
    End If
     
           With ActiveSheet
                   .EnableAutoFilter = True
                   .EnableOutlining = True
                   .Protect Contents:=True, UserInterfaceOnly:=True, AllowFormattingCells:=True, AllowInsertingRows:=True, AllowDeletingRows:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True
           End With
    Application.ScreenUpdating = True
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    ""
    Inscrit en
    Mai 2019
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : ""

    Informations forums :
    Inscription : Mai 2019
    Messages : 201
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Une macro ne peut pas supprimer le module dans laquelle elle se trouve. C'est comme scier la branche sur laquelle on est assis.
    Il faudra mettre la macro dans un autre module, par exemple celui de ta feuille modèle EC(0).
    Ce que je voulais dire c'est que ça supprime la feuille sur laquelle la macro est utilisée, par sur laquelle elle se trouve.
    Même si je ne savais pas qu'on ne pouvais pas supprimer une feuille à partir d'une macro qui est située dessus (ça parait logique), je pensais mettre la macro dans un module et l'utilisé via un bouton.

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Bonjour,

    Pour ce qui est de supprimer/duppliquer des onglets, je t'invite à passer par l'enregistreur de macros qui te sera d'une grande utilité.

    Pour le message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If MsgBox("Confirmez-vous la réinitialisation ? Les données saisies sur cet onglet seront perdues.", vbOKCancel, "Confirmation") = vbOK Then
     
        'Ton code ici
     
    End If

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

Discussions similaires

  1. Supprimer une ligne ! Feuille a plusieurs onglets
    Par Danae123 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/07/2007, 10h55
  2. renommer un onglet
    Par mateuil dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 18/06/2007, 14h39
  3. Réponses: 6
    Dernier message: 20/04/2007, 16h19
  4. tabbednotebook: renommer les onglets
    Par dederfred dans le forum Delphi
    Réponses: 2
    Dernier message: 09/10/2006, 15h40
  5. [Excel] Renommer un onglet
    Par Isa31 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 25/05/2005, 13h14

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