VBA - Supprimer ligne en fonction d'une variable

Bonjour à tous,

Sub rows_text_error()

    Dim cell As Range
    Dim vcellule As Variant

    vcellule = InputBox("Avant d'utiliser cet outil, n'oubliez pas d'enregistrer votre fichier !" & Chr(10) & Chr(10) & _
                        "Entrez le texte souhaité à supprimer, ou iserror or isna")
    If UCase(vcellule) = "ISERROR" Then cas = 1 Else cas = 3
    If UCase(vcellule) = "ISNA" Then cas = 2
    If vcellule = "" Then Exit Sub

    Application.ScreenUpdating = False
    With ActiveSheet
        For i = .UsedRange.Rows.Count To 1 Step -1
            For Each cell In .Range(.cells(i, 1), .cells(i, .cells(i, Columns.Count).End(xlToLeft).Column))
                Select Case cas
                Case 1
                    If IsError(cell) Then
                        cell.EntireRow.Delete
                    End If
                Case 2
                    If Application.WorksheetFunction.IsNA(cell) Then
                        cell.EntireRow.Delete
                    End If
                Case Else
                    On Error GoTo terreur
                    If cell.Value = vcellule Then
                        cell.EntireRow.Delete
                    End If
ici:
                    On Error GoTo 0
                End Select
            Next cell
        Next i
    End With
    Application.ScreenUpdating = True
    Exit Sub
terreur:
    Resume ici
End Sub

J'ai cette macro. Je souhaite que celle-ci supprime aussi les nombres.

Elle supprime tout les NA ERREUR Texte mais les valeurs (nombres) non. Je ne comprends pas pourquoi...je ne vois pas l'erreur ou l'oubli.

Pouvez vous m'aider?

Merci à tous de votre temps et expertise sur le sujet.

Sub rows_text_error()

    Dim cell As Range
    Dim vcellule As Variant

    vcellule = InputBox("Avant d'utiliser cet outil, n'oubliez pas d'enregistrer votre fichier !" & Chr(10) & Chr(10) & _
                        "Entrez le texte souhaité à supprimer  ou iserror ou isna ou nombre") 'ajout ou nombre dans la question
    If UCase(vcellule) = "ISERROR" Then cas = 1 Else cas = 4    'modifier cas 3 pour 4 car ajout
    If UCase(vcellule) = "ISNA" Then cas = 2
    If UCase(vcellule) = "NOMBRE" Then cas = 3 'test si nombre est ecrit dans InputBox
    If vcellule = "" Then Exit Sub

    Application.ScreenUpdating = False
    With ActiveSheet
        For i = .UsedRange.Rows.Count To 1 Step -1
            For Each cell In .Range(.Cells(i, 1), .Cells(i, .Cells(i, Columns.Count).End(xlToLeft).Column))
                Select Case cas
                Case 1
                    If IsError(cell) Then
                        cell.EntireRow.Delete
                    End If
                Case 2
                    If Application.WorksheetFunction.IsNA(cell) Then
                        cell.EntireRow.Delete
                    End If
                Case 3  'Nouvelle condition pour cas 3
                    If IsNumber(cell) Then  'IsNumber pour tester si c'est un nombre
                        cell.EntireRow.Delete
                    End If
                Case Else
                    On Error GoTo terreur
                    If cell.Value = vcellule Then
                        cell.EntireRow.Delete
                    End If
ici:
                    On Error GoTo 0
                End Select
            Next cell
        Next i
    End With
    Application.ScreenUpdating = True
    Exit Sub
terreur:
    Resume ici
End Sub

Hello MErci de ta réponse.

Ta solution fonctionne très bien. Quand on tape Nombre dans l'inputbox, toutes les lignes contenant un chiffre sont bien supprimées.

Par contre, mon besoin était de sélectionner un nombre par exemple 89 et effacer toutes les lignes contenant ce nombre.

la solution apportée par tes soins ne répond pas à celui-ci.

As tu une idée?

MErci

Désolé j'avais peut-être lu un peu vite!

Deuxième essaie

Sub rows_text_error()

    Dim cell As Range
    Dim vcellule As Variant

    vcellule = InputBox("Avant d'utiliser cet outil, n'oubliez pas d'enregistrer votre fichier !" & Chr(10) & Chr(10) & _
                        "Entrez le texte souhaité à supprimer, ou iserror or isna")
    If UCase(vcellule) = "ISERROR" Then cas = 1 Else cas = 3
    If UCase(vcellule) = "ISNA" Then cas = 2
    If vcellule = "" Then Exit Sub

    Application.ScreenUpdating = False
    With ActiveSheet
        For i = .UsedRange.Rows.Count To 1 Step -1
            For Each cell In .Range(.Cells(i, 1), .Cells(i, .Cells(i, Columns.Count).End(xlToLeft).Column))
                Select Case cas
                Case 1
                    If IsError(cell) Then
                        cell.EntireRow.Delete
                    End If
                Case 2
                    If Application.WorksheetFunction.IsNA(cell) Then
                        cell.EntireRow.Delete
                    End If
                Case Else
                    On Error GoTo terreur
                    If UCase(CStr(cell.Value)) = UCase(CStr(vcellule)) Then  'Ajout ici à ton code original
                        cell.EntireRow.Delete
                    End If
ici:
                    On Error GoTo 0
                End Select
            Next cell
        Next i
    End With
    Application.ScreenUpdating = True
    Exit Sub
terreur:
    Resume ici
End Sub

La fonction CStr() converti en texte. Dans ce cas, on converti en texte cell.Value qui est le contenu de la cellule et vcellule qui est le contenu du InputBox. Ce qui fait que les deux vont se comparer. Dans le code original, la valeur qui provenait de l'InputBox était en format texte et celle de la cellule en format nombre donc elles n'étaient pas identique.

J'ai aussi ajouté la fonction UCase(). Dans ce cas efface ce bout. Mais cette fonction converti tout le texte en majuscule. Donc si tu veux supprimer un ligne avec "Allo", tu pourras écrire "allo" ou "ALLO" ou "aLLO" et ça va supprimer la ligne quand même. Personnellement je trouve ça utile Au pire tu pourrais efface cette fonction.

C'est nickel !!!

Je ne connaissais pas cette instruction.

MErci pour tes explications claires et explicites !

J'ai un autre sujet VBA en cours pour insérer des images. Si jamais ^^.

MErci en tout cas pour ton aide sur ce sujet et je te souhaite une bonne soirée et continuation.

Rechercher des sujets similaires à "vba supprimer ligne fonction variable"