VBA - Suppression d'une colonne contenant un mot

Bonjour à tous,

Je souhaiterais supprimer une colonne dans la feuille "Spécificité" contenant un mot préalablement sélectionné dans la feuille "Type". La cellule contenant le mot dans la feuille "Type" doit également être supprimée.

Voici ma tentative :

Private Sub Supprimer_un_type_Click()

Set montype = Application.InputBox("Selectionner le type à supprimer", "Suppression de type", Type:=8) 'permet de selectionner une case et d'en enregistrer le contenant'
Colonne = montype.Column 'permet de localiser la colonne de la cellule selectionnée précedemment'
Ligne = montype.Row 'permet de localiser la ligne de la cellule selectionnée'

réponse = InputBox("Supprimer le type : " & Chr(13) & " - " & montype & Chr(10) & Chr(10) & "Cela entrainera une suppression définitive du type dans la feuille Spécificité et toutes cellules associées. AUCUN 'ctrl - z' ou de fonction retour en arrière n'est possible. Confirmer la suppresion ? (Oui/Non)", "supprimer")
If réponse = "Oui" Then
Cells(Ligne, Colonne).Delete
Else
End If

Dim type_cherche As Range
With Worksheets("Spécificité").Range("B3:CCC3")
Set type_cherche = .Find(what:=montype)
If Not type_cherche Is Nothing Then
Worksheets("Spécifité").Select
type_cherche.Select
Selection.EntireColumn.Delete
Else
End If
End With

End Sub

Ce code permet de supprimer la cellule sélectionnée dans la feuille "Type", mais rencontre une erreur 424 par la suite.

Il semble que cela soit dû au deuxième paragraphe :

Dim type_cherche As Range
With Worksheets("Spécificité").Range("B3:CCC3")
Set type_cherche = .Find(what:=montype)
If Not type_cherche Is Nothing Then
Worksheets("Spécifité").Select
type_cherche.Select
Selection.EntireColumn.Delete
Else
End If
End With

Je ne parviens donc pas à supprimer la colonne de la feuille "Spécificité" qui contient le mot sélectionné.

J'avoue ne pas comprendre ce qui cloche, si quelqu'un pourrait m'aider, ce serait génial.

D'avance merci et bonne journée :)

4exemple.xlsm (25.10 Ko)

Bonjour Alexmou, bonjour le forum,

D'abord, il semblerait que l'onglet soit mal spécifié la seconde fois... C'est Spécificité et non pas Spécifité... Mais surtout si tu supprimes la cellule montype avant d'effectuer la recherche, ça provoque une erreur. Essaie comme ça :

Private Sub Supprimer_un_type_Click()
Dim montype As Range 'déclare la variable montype
Dim Colonne As Integer 'déclare la variable Colonne
Dim Ligne As Integer 'déclare la variable Ligne
Dim réponse As String 'déclare la variable réponse
Dim type_cherche As Range 'déclare la variable type_cherche

On Error Resume Next 'en cas dérreur passe à la ligne suivante
'définit la boite d'entrée montype (génère une erreur su bouton "Annuler"
Set montype = Application.InputBox("Selectionner le type à supprimer", "Suppression de type", Type:=8) 'permet de selectionner une case et d'en enregistrer le contenant'
If Err > 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
    Exit Sub 'sort de la procédure
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
If montype.Value = "" Then Exit Sub 'si la cellule définie est vide, sort de la procédure

'condition 1 : si "Oui" au message
If MsgBox("Supprimer le type : " & Chr(13) & " - " & montype & Chr(10) & Chr(10) & "Cela entrainera une suppression définitive du type dans la feuille Spécificité et toutes cellules associées. AUCUN 'ctrl - z' ou de fonction retour en arrière n'est possible. Confirmer la suppresion ?", vbYesNo, "supprimer") = vbYes Then
    With Worksheets("Spécificité") 'prend en compte l'onglet "Spécificité"
        'recherche la valeur de montype dans la palge B3:CCC3 (si tu efface la valeur de montype avant ça bugue !)
        Set type_cherche = .Range("B3:CCC3").Find(montype.Value, , xlValues, xlWhole)
        If Not type_cherche Is Nothing Then 'condition 2 : s'il existe au moins une occurrence trouvée
            type_cherche.EntireColumn.Delete 'supprime la colonne de la première occurrence trouvée
        End If 'fin de la condition 2
    End With 'fin de la prise en compte de l'onglet "Spécificité
    montype.Delete 'supprime la cellule montype
End If 'fin de la condition 1
End Sub

Hello ThauThème,

Merci beaucoup pour ta réponse, cela fonctionne parfaitement.

Si j'ai bien compris mon erreur venait de la suppression trop rapide de la cellule "source".

Merci également pour avoir modifier ma MsgBox, elle est effectivement beaucoup plus pratique à utiliser maintenant.

J'en profite pour te poser des questions sur ton code pour essayer d'en apprendre davantage sur vba :

- A quoi sert le paragraphe sur les erreurs ?

- Question plus générale : à quoi sert la déclaration des variables en début de code ? Le code fonctionne qu'elles soient déclarées ou non alors je m'interrogeais à ce sujet.

Merci d'avance pour tes réponses,

Bonne journée

Bonsoir Alexmou, bonsoir le forum,

Dans ton fichier, si tu cliques sur le bouton Annuler lors de la boîte d'entrée pour sélectionner une cellule, on se retrouve avec un bug dans le code :

image

et le débogage renvoie sur cette ligne :

Set montype = Application.InputBox("Selectionner le type à supprimer", "Suppression de type", Type:=8) 'permet de selectionner une case et d'en enregistrer le contenant'

Créer une gestion d'erreur permet de répondre à ce genre de problème...

Quant à la déclaration des variables, il est vrai qu'elle n'est pas obligatoire. D'ailleurs, dans mes premiers codes je n'en mettais pas. Puis on m'a expliqué que c'était une sécurité pour éviter des bugs que l'on met un temps fou à résoudre car souvent on ne comprend pas pourquoi ça bugue. L'autre avantage, ça porte un nom mais je ne le connais pas, c'est que quand la variable est déclarée et que plus loin dans le code on tape le nom de celle-ci suivi d'un point, les options liées à cette variable te sont proposées. Un exemple valant mieux que mes explications souvent tordues, regarde :
• Avec une variable déclarée :

2022 04 21 21 43 25 clipboard

Une liste s'ouvre, a peine j'ai tapé le point, proposant tout ce que l'on pourrait coder pour une variable de type Workbook.

• Sans variable déclarée :

2022 04 21 21 47 54 clipboard

Rien ne t'ai proposé après le point quand tu tapes...

Cela évite des fautes de frappe quand tu codes et te permet à quiconque repasse sur ton code de mieux comprendre la structure.

Bref je suis devenu un inconditionnel de la déclaration des variables. Il semble que l'on perd du temps à les déclarer mais au final on en gagne beaucoup.

Merci beaucoup pour tes réponses éclairantes.

Bonne journée,

Rechercher des sujets similaires à "vba suppression colonne contenant mot"