Suppression lignes selon valeur cellule
Résolu
Evedll
Messages postés
79
Statut
Membre
-
Evedll Messages postés 79 Statut Membre -
Evedll Messages postés 79 Statut Membre -
Bonjour,
J'ai essayé de saisir des lignes VBA pour supprimer un nombre de ligne (6 ou 7 en fonction des données) selon une valeur trouvée dans la colonne A ("Noé v2017") qui revient en boucle. Je ne sais pas faire de boucle malgré mes différentes recherches donc j'ai trouvé l'astuce d'utiliser la touche F4 après savoir lancé ma macro afin qu'elle se répète en boucle (je sais ce n'est pas ce qu'il faut faire mais en attendant mieux...). Est-il possible de m'aider à créer cette boucle.
Par la suite, si c'est possible, j'aimerai pouvoir effectuer la même manipulation en entrant dans une boite de dialogue le nom de ma recherche ("Noé v2017" ==>" Noé v2018"...) et dans une autre boite de dialogue le nombre de ligne à supprimer (5, 6 ou 7 selon mon fichier). En attendant, je modifie manuellement cette macro selon mes besoins.
Donc pour récapituler, il doit trouver le texte "Noé v201..." et à partir de cette cellule, supprimer un nombre de ligne x.
L'éditeur de macro ne permet pas cette manipulation.
Je vous remercie de bien vouloir m'aider.
Dans cette attente, je continue mes recherches
Cordialement
Evelyne
J'ai essayé de saisir des lignes VBA pour supprimer un nombre de ligne (6 ou 7 en fonction des données) selon une valeur trouvée dans la colonne A ("Noé v2017") qui revient en boucle. Je ne sais pas faire de boucle malgré mes différentes recherches donc j'ai trouvé l'astuce d'utiliser la touche F4 après savoir lancé ma macro afin qu'elle se répète en boucle (je sais ce n'est pas ce qu'il faut faire mais en attendant mieux...). Est-il possible de m'aider à créer cette boucle.
Sub Supp_Lignes_Noe()
'
'
'Range("A1").Select
Columns("A:A").Select
'ActiveCell.Columns("A:A").EntireColumn.Select
Selection.Find(What:="Noé v2017", After:=ActiveCell).Activate
ActiveCell.Offset(0, 0).Range("1:7").EntireRow.Select
Selection.Delete Shift:=xlUp
'Selection.ClearContents
End Sub
Par la suite, si c'est possible, j'aimerai pouvoir effectuer la même manipulation en entrant dans une boite de dialogue le nom de ma recherche ("Noé v2017" ==>" Noé v2018"...) et dans une autre boite de dialogue le nombre de ligne à supprimer (5, 6 ou 7 selon mon fichier). En attendant, je modifie manuellement cette macro selon mes besoins.
Donc pour récapituler, il doit trouver le texte "Noé v201..." et à partir de cette cellule, supprimer un nombre de ligne x.
L'éditeur de macro ne permet pas cette manipulation.
Je vous remercie de bien vouloir m'aider.
Dans cette attente, je continue mes recherches
Cordialement
Evelyne
3 réponses
-
Bonjour
Function FindAll(ByVal sText As String, ByRef oRange As Range, ByRef arMatches() As String) As Boolean ' -------------------------------------------------------------------------------------------------------------- ' FindAll - To find all instances of the1 given string and return the row numbers. ' If there are not any matches the function will return false ' -------------------------------------------------------------------------------------------------------------- On Error GoTo Err_Trap Dim rFnd As Range ' Range Object Dim iArr As Integer ' Counter for Array Dim rFirstAddress ' Address of the First Find ' ----------------- ' Clear the Array ' ----------------- Erase arMatches Set rFnd = oRange.Find(what:=sText, LookIn:=xlValues, lookAt:=xlPart) If Not rFnd Is Nothing Then rFirstAddress = rFnd.Address Do Until rFnd Is Nothing iArr = iArr + 1 ReDim Preserve arMatches(iArr) arMatches(iArr) = rFnd.Row 'rFnd.Address pour adresse complete ' rFnd.Row Pour N° de ligne Set rFnd = oRange.FindNext(rFnd) If rFnd.Address = rFirstAddress Then Exit Do ' Do not allow wrapped search Loop FindAll = True Else ' ---------------------- ' No Value is Found ' ---------------------- FindAll = False End If ' ----------------------- ' Error Handling ' ----------------------- Err_Trap: If Err <> 0 Then MsgBox Err.Number & " " & Err.Description, vbInformation, "Find All" Err.Clear FindAll = False Exit Function End If End Function Sub deleteByValue() Dim arMatches() As String Dim valcherch As String Dim Sh As Worksheet Dim rng As Range Set Sh = ThisWorkbook.Sheets("Feuil1") Set rng = Sh.Range("A1:A100") valcherch = "Noé v2017" bFound = FindAll(valcherch, rng, arMatches()) If bFound = True Then nbElemTrouve = UBound(arMatches) For i = 1 To nbElemTrouve Debug.Print (arMatches(i)) 'ici tu peux mettre le code de suppression '... Next End If End Sub
-
-
-
Voila le code modifié et fonctionnel...
Function FindAll(ByVal sText As String, ByRef oRange As Range, ByRef arMatches() As String) As Boolean ' -------------------------------------------------------------------------------------------------------------- ' FindAll - To find all instances of the1 given string and return the row numbers. ' If there are not any matches the function will return false ' -------------------------------------------------------------------------------------------------------------- On Error GoTo Err_Trap Dim rFnd As Range ' Range Object Dim iArr As Integer ' Counter for Array Dim rFirstAddress ' Address of the First Find ' ----------------- ' Clear the Array ' ----------------- Erase arMatches Set rFnd = oRange.Find(what:=sText, LookIn:=xlValues, lookAt:=xlPart) If Not rFnd Is Nothing Then rFirstAddress = rFnd.Address Do Until rFnd Is Nothing iArr = iArr + 1 ReDim Preserve arMatches(iArr) arMatches(iArr) = rFnd.Row 'rFnd.Address pour adresse complete ' rFnd.Row Pour N° de ligne Set rFnd = oRange.FindNext(rFnd) If rFnd.Address = rFirstAddress Then Exit Do ' Do not allow wrapped search Loop FindAll = True Else ' ---------------------- ' No Value is Found ' ---------------------- FindAll = False End If ' ----------------------- ' Error Handling ' ----------------------- Err_Trap: If Err <> 0 Then MsgBox Err.Number & " " & Err.Description, vbInformation, "Find All" Err.Clear FindAll = False Exit Function End If End Function Sub deleteByValue() Dim arMatches() As String Dim valcherch As String Dim Sh As Worksheet Dim rng As Range Application.ScreenUpdating = False Set Sh = ThisWorkbook.Sheets("Feuil1") Set rng = Sh.Range("A1:A3000") valcherch = "Noé v2017" bFound = FindAll(valcherch, rng, arMatches()) If bFound = True Then nbElemTrouve = UBound(arMatches) For i = nbElemTrouve To 1 Step -1 Debug.Print (arMatches(i)) 'ici tu peux mettre le code de suppression '... Rows(arMatches(i)).Delete Next End If Application.ScreenUpdating = True End Sub
-