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
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.