Macro Excel 2017 pour supprimer des lignes

Fermé
FURAX69 Messages postés 16 Date d'inscription samedi 18 octobre 2003 Statut Membre Dernière intervention 3 octobre 2021 - 2 sept. 2020 à 11:49
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 4 sept. 2020 à 15:39
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
A voir également:

5 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 2 sept. 2020 à 13:20
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.
0
FURAX69 Messages postés 16 Date d'inscription samedi 18 octobre 2003 Statut Membre Dernière intervention 3 octobre 2021 4
2 sept. 2020 à 13:42
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 ?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 2 sept. 2020 à 14:04
en ligne 7:
For lig = dernlig To premlig + 1 Step -1
0
FURAX69 Messages postés 16 Date d'inscription samedi 18 octobre 2003 Statut Membre Dernière intervention 3 octobre 2021 4 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
4 sept. 2020 à 11:00
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 ?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > FURAX69 Messages postés 16 Date d'inscription samedi 18 octobre 2003 Statut Membre Dernière intervention 3 octobre 2021
4 sept. 2020 à 11:32
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
0
FURAX69 Messages postés 16 Date d'inscription samedi 18 octobre 2003 Statut Membre Dernière intervention 3 octobre 2021 4
Modifié le 4 sept. 2020 à 13:40
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 ?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
4 sept. 2020 à 14:11
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?
0
FURAX69 Messages postés 16 Date d'inscription samedi 18 octobre 2003 Statut Membre Dernière intervention 3 octobre 2021 4
Modifié le 4 sept. 2020 à 14:51
- 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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
4 sept. 2020 à 14:41
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é.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
FURAX69 Messages postés 16 Date d'inscription samedi 18 octobre 2003 Statut Membre Dernière intervention 3 octobre 2021 4
4 sept. 2020 à 15:02
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...
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
4 sept. 2020 à 15:39
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.
0