Créer un bouton de suppression dans un formulaire Excel en VBA

Créer un bouton de suppression dans un formulaire Excel en VBA

Tutoriel réalisé avec Excel 2016

Dans ce tutoriel, je vais vous expliquer comment ajouter un bouton de suppression au formulaire de saisie personnalisé que nous avons déjà créé sur Excel en langage VBA.

Dans l’Espace Membres, vous retrouverez le formulaire utilisé qui fait suite au tutoriel Créer un formulaire personnalisé pour saisir des données sur Excel ainsi qu’à son explication.

Création et programmation du bouton de suppression en VBA :

Ouvrez le fichier Excel et rendez-vous dans la fenêtre de Visual Basic (si vous ne savez pas comment faire, suivez le tout premier article). Dans l’Explorateur de projets, au niveau des Feuilles, faites un clic droit sur l’UserForm1 > Afficher l’objet. Par simplicité, je sélectionne un des boutons déjà présents et fais un copier-coller (Ctrl + C et Ctrl +V), mais sinon vous pouvez tout à fait créer un bouton via la Boîte à outils comme fait dans le précédent article. Placez-le où vous le souhaitez, renommez-le si vous le désirez dans la fenêtre des Propriétés à la ligne Name et modifiez la ligne Caption en saisissant Supprimer (ou autre chose à votre convenance).

Double-cliquez ensuite sur ce nouveau bouton, ce qui vous amène directement à la fenêtre de Code au niveau de la procédure :
Private Sub CommandButton4_Click()
End Sub

Là où se trouve votre curseur, saisissez le code suivant :
Rows([A2:A65536].Find(ComboBox1.Value).Row).EntireRow.Delete

Cette ligne demande à Excel de rechercher la valeur saisie dans la ComboBox1 de la cellule A2 à A65536, de la sélectionner entièrement et de la supprimer. Depuis Excel 2007, le nombre maximum de lignes est passé de 65 536 à 1 048 576. Si vous êtes sûrs que votre fichier ne sera jamais utilisé par une version 2003 ou antérieure, saisissez A1048576 sinon laissez tel quel. Il est très important que votre colonne de référence contienne des valeurs uniques, comme c’est le cas ici avec un numéro client, afin de s’assurer que c’est la bonne ligne qui sera supprimée. Vous pouvez tester votre bouton, il est opérationnel, mais nous allons continuer pour le peaufiner.

Rafraîchissement de la liste déroulante après suppression d’une ligne :

En supprimant certains contacts, vous vous apercevrez que la liste déroulante ne se met pas à jour, ce qui est embêtant, car si vous sélectionnez un autre contact, puis revenez au numéro supprimé, ce sera le suivant qui sera affiché à moins de fermer et de rouvrir le formulaire. Pour remédier à cela, on va simplement copier-coller le code que j’avais donné lors du tutoriel d’explication afin de mettre à jour la liste après ajout. Ce code doit se trouver dans la même procédure, mais à la suite de la ligne saisie précédemment puisque l’on supprime la ligne PUIS on met à jour la liste :
Dim J As Long
ComboBox1.Clear
Set Ws = Sheets("Clients") ‘Correspond au nom de votre onglet dans le fichier Excel
With Me.ComboBox1
For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("A" & J)
Next J
End With

Une autre possibilité est de rafraîchir le formulaire entier. Dans ce cas, vous pouvez utiliser le code que j’ai donné dans le tutoriel Comment vider (effacer) un userform après validation sur Excel en remplaçant le code précédent par :
Unload Me
UserForm1.Show
(UserForm1 correspond au nom donné à l’userform dans l’Explorateur de projets donc adaptez-le si besoin)

Cela vous permettra de vider également les autres champs.

C’est également possible par la première méthode, mais il faut vider chaque champ par des
TextBox = "" et ComboBox = Clear (puis les recharger si nécessaire) pour chaque élément qui compose votre formulaire.

Désormais, nous avons bien un bouton de suppression et une mise à jour de la liste. Toutefois, un clic maladroit sur ce bouton est vite arrivé, nous allons donc terminer par rajouter un message de confirmation.

Ajout du message de confirmation de suppression en VBA :

Ici aussi, nous allons nous servir d’un code utilisé précédemment, à savoir celui de la ligne If du bouton Nouveau contact. Sélectionnez donc cette ligne et copiez-la juste avant la ligne de suppression, en début de procédure, car il faut savoir si l’on confirme la suppression AVANT d’exécuter le code, puis modifiez les éléments en conséquence, ce qui vous donnera :

If MsgBox("Confirmez-vous la suppression de ce contact ?", vbYesNo, "Demande de confirmation de suppression") = vbYes Then

N’oubliez pas d’ajouter End if juste avant End Sub auquel cas vous aurez une erreur au lancement de la procédure.

Voici le code complet de ce bouton de suppression où j’ai juste indenté le code pour une meilleure compréhension et déplacé la déclaration de variable (Dim…) en début de procédure pour la première méthode de rafraîchissement de la liste :

Private Sub CommandButton4_Click()
Dim J As Long
If MsgBox("Confirmez-vous la suppression de ce contact ?", vbYesNo, "Demande de confirmation de suppression") = vbYes Then
Rows([A2:A65536].Find(ComboBox1.Value).Row).EntireRow.Delete
ComboBox1.Clear
Set Ws = Sheets("Clients") ‘Correspond au nom de votre onglet dans le fichier Excel
With Me.ComboBox1
For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("A" & J)
Next J
End With
End If
End Sub

OU

Private Sub CommandButton4_Click()
If MsgBox("Confirmez-vous la suppression de ce contact ?", vbYesNo, "Demande de confirmation de suppression") = vbYes Then
Rows([A2:A65536].Find(ComboBox1.Value).Row).EntireRow.Delete
Unload Me
UserForm1.Show
End If
End Sub

Téléchargez « Créer un bouton de suppression dans un formulaire Excel en VBA » au format PDF

Je vous propose un fichier annexe dans l’Espace Membres contenant le fichier utilisé dans ce tutoriel.

Et si vous souhaitez continuer votre apprentissage du code VBA sur Excel,
cliquez sur ce lien pour découvrir le tutoriel Créer des listes déroulantes en cascade dans un formulaire Excel.

Newsletter

27 réactions au sujet de « Créer un bouton de suppression dans un formulaire Excel en VBA »

  1. Bonsoir !
    Juste pour vous remercier pour tout ce que vous faites pour nous. Je suis très content de m’être enregistré sur ce site. Bonne suite et à bientôt pour d’autres découvertes.

  2. Merci pour vos tutos, je plane un peu, mais je progresse. Avez-vous fait un tuto sur « la possibilité d’ouvrir une facture à partir du récapitulatif des factures en cliquant simplement sur le N° de cette facture ». Merci pour votre réponse et encore bravo.

  3. J’admire votre formation en ligne, c’est d’ailleurs la raison qui m’a poussé à m’inscrire pour recevoir les news de ce site web.

  4. Bonsoir Lydia,
    Je viens encore vous embêter.
    Cela concerne la commande supprimer un contact.
    Est-il possible de vider une ligne sans effacer le n° dans la première colonne ?
    Par exemple, quand, dans votre tuto, vous supprimez la ligne 6, est-il possible que le n° 6 reste présent dans le tableau ?
    Merci d’avance.

    1. Bonjour Bernard,

      Il y a surement plus propre, mais ça fonctionne :
      Private Sub CommandButton4_Click()
      Dim Numero As Range
      If MsgBox("Confirmez-vous la suppression de ce contact ?", vbYesNo, "Demande de confirmation de suppression") = vbYes Then
      Set Numero = [A2:A65536].Find(ComboBox1.Value)
      Numero.Select
      Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 8)).ClearContents
      End If
      End Sub

  5. Juste pour vous remercier pour tout ce que vous faites pour nous. Je suis très content de m’être enregistré sur ce site. Bonne suite et à bientôt pour d’autres découvertes.

  6. Bonjour,
    Merci pour tout ce que vous nous apprenez.
    J’ai un petit problème avec ces 2 lignes :
    Rows([A2:A1048576].Find(cboReference.Value).Row).EntireRow.Delete
    UserForm1.Show

    Tout fonctionne, mais à chaque fois que je supprime, il me dit : Erreur d’exécution 424 objet requis
    Pourriez-vous me dire pourquoi s’il vous plaît ? Merci.

  7. Bonjour Lydia,
    Je viens juste de m’abonner à ton site et je trouve ça formidable. ☺
    Je crée un formulaire pour avoir une base de données des panneaux solaires que l’on utilise (je suis alternante dans les nouvelles énergies renouvelables), mais je ne sais pas comment faire pour créer une liste déroulage avec laquelle l’utilisateur peut changer les données dans son classeur Excel grâce à AddItem.
    Quelle ligne de code je dois écrire à la place de « Array » ?

    Merci d’avance ♥

    1. Bonjour Adja,
      Récemment, j’ai utilisé List. Voici un exemple (Categorie étant la combobox et Categories_prospects_clients la plage nommée dans le classeur) :
      Categorie.List = Range("Categories_prospects_clients").Value

  8. Merci beaucoup Lydia.

    J’ai une autre question : comment on fait pour sélectionner dans notre formulaire toute une ligne de données pour l’utiliser dans des calculs qu’on a l’intention de faire, pour que les données soient sauvegardées et utilisées automatiquement après sélection (comme des données d’entrées) dans toute la suite du calcul sans les ressaisir ?
    J’espère que j’ai été claire.
    Merci d’avance.

    1. Bonjour Adja,

      Il faudrait programmer un bouton qui récupèrerait ce qui est affiché dans le formulaire pour le mettre dans un autre onglet (comme le bouton Modifier).

  9. Bonjour,

    Merci encore pour cette vidéo.
    Mon formulaire est fait à partir de textbox et ne comporte pas de combobox. Je change d’enregistrement via des petits boutons « suivant » ou « précédent ».

    Du coup, j’ai copié votre code et j’ai essayé de l’adapter, mais cela ne fonctionne pas :
    Private Sub btmSupprimer_Click()
    'Question avant validation
    If MsgBox("Confirmez-vous la suppression de ce contact ?", vbYesNo, "Demande de confirmation de suppression") = vbYes Then
    'Information du tableau Sous-traitant
    Rows([BG2:BG65536].Find(TextBox1.Value).Row).EntireRow.Delete
    Unload Me
    UserForm1.Show
    End If
    End Sub

    Mais, dans ce cas, j’ai une erreur 1004 la méthode delete de la classe range a échoué. Savez-vous pourquoi ? La réponse ? Voire même une simple piste de recherche ?

    Je cherche à réaliser le même bouton « supprimer » que celui fourni dans le formulaire Excel.
    Cordialement.

    1. Bonjour,

      La feuille est-elle protégée ? Sur quelle ligne s’arrête le code ? Car, sur le fichier du tuto, je viens de remplacer la Combobox1 par une textbox et, même en supprimant par rapport à la colonne D par exemple, ça fonctionne.

  10. Re-bonjour,

    J’espère que ce problème servira à tout le monde.
    Lors de ma construction de base, j’ai créé une feuille où j’ai mis un peu tout dedans au fur et à mesure des problèmes rencontrés.

    Du coup, mon tableau (ici, des sous-traitants) était dans une feuille nommée « liste » qui me sert un peu à tout au niveau de la colonne BG.

    En supprimant mon tableau de cette feuille pour le mettre seul dans une autre feuille, tout fonctionne super bien.

    En tout cas, merci beaucoup de m’avoir aidé à trouver le problème.

    Ma base avance. J’espère pouvoir la présenter au boss d’ici Noël.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

CAPTCHA
Change the CAPTCHA codeSpeak the CAPTCHA code