VBA - Supprimer ligne en fonction d'une variable
Bonjour à tous,
Je souhaiterais une macro capable de supprimer la ligne où la valeur que ce soit du texte ou chiffre ou NA() ou erreur dans une plage de cellule choisie par l'utilisateur renseigné dans une input box.
Sub rows_value()
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 la valeur ou le texte souhaité à supprimer")
If vcellule = "" Then Exit Sub
Application.ScreenUpdating = False
For Each cell In ActiveSheet.UsedRange
If cell.Value = vcellule Then
cell.EntireRow.Delete
End If
Next cell
Application.ScreenUpdating = True
End Sub
J'ai tenté ceci mais il n'y a que le texte qui fonctionne...
Avez vous une solution astuce pour me mettre sur la voie?
Merci de m'avoir lu et bonne soirée
Bonjour,
une proposition de solution basée sur ton code supprime toutes les lignes contenant le mot recherché (sauf si le mot se trouve dans 2 lignes successives, dans ce cas seule une ligne est supprimée. Est-ce effectivement ce que tu souhaites obtenir comme résultat ?
Sub rows_value()
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 la valeur ou 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
For Each cell In ActiveSheet.UsedRange
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
If cell.Value = vcellule Then
cell.EntireRow.Delete
End If
End Select
Next cell
Application.ScreenUpdating = True
End Sub
Salut,
Merci pour ta proposition et réflexion. Mais je souhaite vraiment supprimer toutes les lignes.
Si deux lignes successives avec #N/A, je souhaite qu'elles disparaissent toutes les deux...
Est ce possible?
Cdt
Julien
bonsoir,
une version adaptée
Sub rows_value()
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 la valeur ou 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
Merci beaucoup,
Testé et approuvé.
Maintenant je vais essayer de décrypter ton code et d'apprendre grâce à toi un peu plus en VBA.
Thanks et bonne continuation.