Macro Excel 2017 pour supprimer des lignes
FURAX69
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Macro Excel 2017 pour supprimer des lignes
- Supprimer rond bleu whatsapp - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Supprimer page word - Guide
- Aller à la ligne excel - Guide
5 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, un exemple:
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.
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.
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 ?
Cela semble fonctionner mais cela supprimer aussi ma ligne de titres... Comment faire pour que le process démarre ligne 2 ?
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
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 ?
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 ?
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).
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
Hello
J'ai donc choisi d'adresser une cellule D5 du classeur dans lequel j'ai ma macro :
en utilisant la ligne 5 :
et j'ai modifié la ligne 11 :
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 ?
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 ?
- 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 :
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
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
- 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
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...
un exemple, supposant que les deux fichiers sont dans le même dossier:
j'ai mis en commentaire les lignes 15 et 16, qui sauvent et ferment le ficher contenant le tableau.
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.