Suppression d'une macro via une autre macro

Bonjour,

Je crains malheureusement devoir faire appel à nouveau à votre immense sagesse, afin de venir à bout d'une macro qui refuse obstinémant de faire ce que je souhaiterai

Je suis toujours sur mon classeur dont le fonctionnement est expliqué dans mon précédent poste "ListBox qui ne veux pas se remplir". Afin de faciliter l'usage de mon fichier, je souhaite créer une sorte de barre de contrôle sur l'onglet sommaire avec 4 boutons:

  • le premier permet de créer un nouvel onglet (création de l'onglet, renommer l'onglet, création automatique du lien dans l'onglet sommaire et, le plus important, création automatique de la macro permettant au lien de fonctionner)
  • le deuxième permet d'afficher plusieurs onglets en même temps.
  • le troisième permet de supprimer un ou plusieurs onglets (suppression de l'onglet et, le plus important, suppression de la macro associé permettant le bon fonctionnement du lien du sommaire)
  • le quatrième permet de modifier le nom d'un onglet (modification du nom de l'onglet, création du nouveau lien dans l'onglet sommaire et, le plus important, actualisation de la macro associé)

Les deux premier boutons fonctionne à ce jours

Le troisième fonctionne mais possède deux éléments à corriger et pour lesquels je fait appel à votre aide

le code actuelle est le suivant:

Private Sub CommandButton1_Click()

Dim i As Integer
Dim message As String
Dim Debut As Integer
Dim Lignes As Integer
Dim compteur As Integer

compteur = 0
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i - compteur) = True Then
'supression de l'onglet
        Worksheets(i - compteur + 2).Visible = True
        Worksheets(i - compteur + 2).Activate
        Worksheets(i - compteur + 2).Delete
'supression de la macro portant le nom de l'onglet
            With ThisWorkbook.VBProject.VBComponents("Ouverture_onglet").CodeModule
            Debut = .ProcStartLine(ListBox1.List(i - compteur), 0)
            Lignes = .ProcCountLines(ListBox1.List(i - compteur), 0)
            .DeleteLines Debut, Lignes
            End With
        compteur = compteur + 1
    End If
Next i

message = "Veuillez supprimer manuellement du sommaire les raccourcis des onglets supprimés" & vbCrLf
message = message & "(cliquez sur les onglets avec la touche Ctrl enfoncée pour les sélectionner)"
MsgBox (message)

Worksheets(1).Activate
Cells(1, 1).Select

Unload UserForm2

End Sub

Premier élément: si la suppression d'un élément unique ne pose aucun problème, le programme plante lorsque plusieurs éléments sont sélectionnés pour suppression. Le premier onglet est supprimé, la macro associé au premier onglet est supprimé, le deuxième onglet est supprimé, la suppression de la macro associé au deuxième onglet fait planter le programme. Message d’erreur: "Erreur d'exécution '35': Sub ou fonction non définie"

J'ai beau regarder mon programme, je ne vois pas où se situe le problème

Deuxième élément: afin de sécuriser la suppression des onglets, j'affiche l'onglet en question avant de lancer sa surpression. Le message de confirmation que génère automatiquement excel pour confirmer la suppression apparaît donc sur l'onglet en question, permettant de vérifier que l'on ne s'est pas trompé d'onglet. Il est donc possible d'annuler la suppression en cas d'erreur. Malheureusement ce message de confirmation est extérieur à mon programme, l'annulation de la suppression entraîne donc la conservation de l'onglet mais n'arrête pas mon programme qui continue en supprimant la macro associé à mon onglet. Il s'agit d'un élément assez fâcheux que je n'arrive pas à contourner ...

En vous remerciant grandement pour votre aide

Bien cordialement

J'ai réussi à régler mon premier point.

J'avais simplement oublié d'actualiser ma ListeBox en supprimant l'item correspondant à l'onglet supprimé.

Le nouveau code est donc:

Private Sub CommandButton1_Click()

Dim i As Integer
Dim message As String
Dim Debut As Integer
Dim Lignes As Integer
Dim compteur As Integer

compteur = 0
For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i - compteur) = True Then
'supression de l'onglet
        Worksheets(i - compteur + 2).Visible = True
        Worksheets(i - compteur + 2).Activate
        Worksheets(i - compteur + 2).Delete
'supression de la macro portant le nom de l'onglet
            With ThisWorkbook.VBProject.VBComponents("Ouverture_onglet").CodeModule
            Debut = .ProcStartLine(ListBox1.List(i - compteur), 0)
            Lignes = .ProcCountLines(ListBox1.List(i - compteur), 0)
            .DeleteLines Debut, Lignes
            End With
        ListBox1.RemoveItem (i - compteur)
        compteur = compteur + 1
    End If
Next i

message = "Veuillez supprimer manuellement du sommaire les raccourcis des onglets supprimés" & vbCrLf
message = message & "(cliquez sur les onglets avec la touche Ctrl enfoncée pour les sélectionner)"
MsgBox (message)

Worksheets(1).Activate
Cells(1, 1).Select

Unload UserForm2

End Sub

Je vous met en pièce jointe une version de mon fichier si cela peux vous aider.

En vous remerciant par avance pour l'aide que vous pourriez m'apporter

J'ai fini par régler mon deuxième point en vérifiant le nombre d'onglets avant et après la fonction supprimer.

Pour ceux qui seraient intéressé, le code finale est donc

Private Sub CommandButton1_Click()

UserForm2.Hide

'Supprimer les onglets sélectionnés

Dim i As Integer
Dim message As String
Dim Debut As Integer
Dim Lignes As Integer
Dim compteur As Integer
Dim verification As Integer

compteur = 0
For i = 0 To ListBox1.ListCount - 1

    If ListBox1.Selected(i - compteur) = True Then 'supression de l'onglet
        verification = ThisWorkbook.Worksheets.Count
        Worksheets(i - compteur + 2).Visible = True
        Worksheets(i - compteur + 2).Activate
        Worksheets(i - compteur + 2).Delete
        If ThisWorkbook.Worksheets.Count = verification Then 'supression de la macro après vérifiaction de la supression effective de l'onglet
            ListBox1.Selected(i - compteur) = False
        Else
            With ThisWorkbook.VBProject.VBComponents("ouverture_onglet").CodeModule
            Debut = .ProcStartLine(ListBox1.List(i - compteur), 0)
            Lignes = .ProcCountLines(ListBox1.List(i - compteur), 0)
            .DeleteLines Debut, Lignes
            End With
            ListBox1.RemoveItem (i - compteur)
            compteur = compteur + 1
        End If
    End If

Next i

    'Suppression du lien sur la page d'accueil

message = "Veuillez supprimer manuellement du sommaire les raccourcis des onglets supprimés" & vbCrLf
message = message & "(cliquez sur les onglets avec la touche Ctrl enfoncée pour les sélectionner)"
MsgBox (message)

    'Terminer la macro

Worksheets(1).Activate
Cells(1, 1).Select

Unload UserForm2

End Sub

En remerciant ceux qui on pu se pencher sur mes questions

Bien cordialement

Rechercher des sujets similaires à "suppression macro via"