Macro Excel 2017 pour supprimer des lignes

Signaler
Messages postés
12
Date d'inscription
samedi 18 octobre 2003
Statut
Membre
Dernière intervention
4 septembre 2020
-
Messages postés
12221
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2020
-
Bonjour à tous,

Je cherche à faire une macro pour automatiser la suppression de lignes dans un tableau.

Plus précisément à supprimer des lignes dont le contenu de la colonne F ne correspond pas à la chaine "FRG189".
NB : Mon tableau peut avoir un nombre de lignes différents à chaque usage de la macro

Visiblement, il faut coder cela en visualBasic mais je n'ai aucune notion...

Si l'un d'entre vous pouvait me dire comment faire ou encore mieux, me donner la syntaxe des lignes à ajouter dans ma macro, je lui en serais éternellement reconnaissant :)

Excellente journée à vous

5 réponses

Messages postés
12221
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2020
688
bonjour, un exemple:
Sub delf()
Dim fl As Worksheet, rng As Range, premlig As Long, dernlig As Long, lig As Long
Set fl = ActiveWorkbook.Sheets("furax")
Set rng = fl.UsedRange
premlig = rng.Row
dernlig = premlig + rng.Rows.Count - 1
For lig = dernlig To premlig Step -1
    If fl.Cells(lig, "f") <> "FRG189" Then
        fl.Rows(lig).EntireRow.Delete
    End If
Next lig
End Sub

en ligne 3, j'ai supposé que le nom de la feuille contenant le tableau était "furax".
j'ai supposé que ton tableau était tout seul dans cette feuille.
Messages postés
12
Date d'inscription
samedi 18 octobre 2003
Statut
Membre
Dernière intervention
4 septembre 2020
4
Merci infiniment yg_be ;)

Cela semble fonctionner mais cela supprimer aussi ma ligne de titres... Comment faire pour que le process démarre ligne 2 ?
Messages postés
12221
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2020
688
en ligne 7:
For lig = dernlig To premlig + 1 Step -1
Messages postés
12
Date d'inscription
samedi 18 octobre 2003
Statut
Membre
Dernière intervention
4 septembre 2020
4 >
Messages postés
12221
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2020

Merci encore de ton aide.. Tout marche impecc :)

J'ai une autre requête dans l'amélioration de cette macro.

Je souhaiterais pouvoir entrer la clé de recherche dans une cellule "le fameux FRG189" de mon classeur Macro pour pouvoir utiliser cette fonction avec d'autres data.

Je suppose que je dois modifier cette partie

    If fl.Cells(lig, "f") <> "FRG189" Then
fl.Rows(lig).EntireRow.Delete
End If


Mais je ne sais pas comment... Faut il impérativement entrer la clé de filtrage FRxxxx dans un eform ou bien on peut la saisir dans une cellule du classeur contenant la macro et simplement adresser cette cellule dans le code ?
Messages postés
12221
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2020
688 >
Messages postés
12
Date d'inscription
samedi 18 octobre 2003
Statut
Membre
Dernière intervention
4 septembre 2020

le plus simple, je pense, c'est de la saisir dans une cellule.
vois-ci-dessous, les lignes 4 à 5 montrent différentes possibilités (il faut, bien sûr, n'en garder qu'une).
Private Sub delf()
Dim fl As Worksheet, rng As Range, premlig As Long, dernlig As Long, lig As Long, cle As String
Set fl = ActiveWorkbook.Sheets("furax")
cle = "FRG189"
cle = fl.[Z1]  'cellule Z1 de la feuille du tableau
cle = ActiveWorkbook.Sheets("colere").[Z23]  'cellule Z23 de la feuille "colere"
Set rng = Intersect(fl.UsedRange, fl.Columns("f"))
premlig = rng.Row
dernlig = premlig + rng.Rows.Count - 1
For lig = dernlig To premlig Step -1
    If fl.Cells(lig, "f") <> cle Then
        fl.Rows(lig).EntireRow.Delete
    End If
Next lig
End Sub
Messages postés
12
Date d'inscription
samedi 18 octobre 2003
Statut
Membre
Dernière intervention
4 septembre 2020
4
Hello

J'ai donc choisi d'adresser une cellule D5 du classeur dans lequel j'ai ma macro :

en utilisant la ligne 5 :
cle = fl.[D5]  'cellule D5 de la feuille dans laquelle j'ai ma macro (différente du tableau à traiter)


et j'ai modifié la ligne 11 :
If fl.Cells(lig, "f") <> cle Then


Mais ça ne fonctionne pas... La cle (saisie FRG189 soit idem qu'en dur) n'est pas trouvée. Et le fichier final est vide
Comme si la définition de la variable "cle" était fausse ?


Ais-je loupé un truc ?
Messages postés
12221
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2020
688
oui, tu n'as pas lu que la ligne 5 était pour le cas où la clé était dans la même feuille que le tableau.
tu es donc dans le cas de la ligne 6, la clé étant dans une autre feuille.
ta macro est dans un autre fichier que le tableau?
Messages postés
12
Date d'inscription
samedi 18 octobre 2003
Statut
Membre
Dernière intervention
4 septembre 2020
4
- Ma macro est dans un fichier MacroBKLG.xlsm
- La clé est la valeur de la cellule D5 de ce même fichier MacroBKLG.xlsm et spécifiquement dans l'onglet unique Sheet1
- Le fichier à traiter est "LY Backlog.xlsx" et est chargé séparément. (Peut-être pourrais-je ensuite le charger aussi via la macro ?)

Si je défini la variable cle ainsi, ça plante :
cle = ActiveWorkbook.Sheets("Sheet1").[D5]


Le raccourci de ma macro est Ctrl+G et je le lance une fois dans mon fichier "LY Backlog.xlsx"...
Je ne suis donc plus dans "ActiveWorkbook.Sheets" ?

Je viens de vérifier et cette ligne
cle = ActiveWorkbook.Sheets("Sheet1").[D5]
prend bien la cellule D5 de mon fichier à traiter (LY Backlog.xlsx)... Et non pas la bonne cellule D5 qui se trouve bien dans mon fichier MacroBKLG.xlsm

C'est pour ça que j'ai pris la ligne exemple 5
<code>cle = fl.[D5] /code>

Mais si je mets bien "FRG189" dans la cellule D5 de mon fichier MacroBKLG.xlsm
le traitement s'achève sans trouver FRG189 dans le tableau
Messages postés
12221
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2020
688
les deux classeurs se trouvent-ils dans le même dossier?
je vais adapter la macro pour ouvrir le second classeur. il faudra donc qu'il soit fermé.
Messages postés
12
Date d'inscription
samedi 18 octobre 2003
Statut
Membre
Dernière intervention
4 septembre 2020
4
Oui, ils sont dans le même dossier.

J'ai réussi à faire fonctionner la cle en l'adressant ainsi
cle = Workbooks("MacroBKLG.xlsm").Sheets("Sheet1").[D5]

Maintenant, si ma macro pouvait charger le fichier LY Backlog.xlsx automatiquement à son lancement et après bien sûr, entré la clé en D5, ce serait royal :)

Merci de ton temps en tout cas...
Messages postés
12221
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2020
688
un exemple, supposant que les deux fichiers sont dans le même dossier:
Private Sub delf()
Dim fl As Worksheet, rng As Range, premlig As Long, dernlig As Long, lig As Long
Dim cle As String, wb As Workbook
Set wb = Workbooks.Open(ThisWorkbook.Path + "\LY Backlog.xlsx")
Set fl = wb.Sheets("furax")
cle = ThisWorkbook.Sheets("Sheet1").[D5]
Set rng = fl.UsedRange
premlig = rng.Row
dernlig = premlig + rng.Rows.Count - 1
For lig = dernlig To premlig + 1 Step -1
    If fl.Cells(lig, "f") <> cle Then
        fl.Rows(lig).EntireRow.Delete
    End If
Next lig
'wb.Save
'wb.Close
End Sub

j'ai mis en commentaire les lignes 15 et 16, qui sauvent et ferment le ficher contenant le tableau.