Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 Supprimer des lignes lorsque, dans une colonne, une certaine valeur est présente

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous,
Je suis en train de réaliser un petit utilitaire de gestion du contenu de mes 3 congélateurs.
Pour l'heure, le fichier (joint) ne comporte que deux feuilles.
Dans la feuille "Saisie", en colonne L (=12), je m'intéresse à la valeur "Sortie" qui signale que le produit concerné a été sorti du congélateur (mangé ou jeté parce que Périmé)
Je voudrais disposer d'une macro me permettant d'éliminer de mes stocks ces produits sortis pour ne voir que ce qui reste.
J'ai consulté beaucoup de discussions que je ne sais pas adapter à mon souhait ou qui plantent...
Si vous avez une idée,
Portez-vous bien !
Pierre
 

Pièces jointes

  • Congélateurs2Essai.xlsm
    28.5 KB · Affichages: 4
Solution
@Constantin

Avec ton fichier tout fonctionne bien chez moi j'ai fait au moins 20 essais de suppression de ligne et pas eu de pb, désolé mais si je n'arrive pas à refaire le pb je ne peux pas t'aider

Essaye cette version 3 sans test sur les filtres mais avec la désactivation systématique du filtre mais avec le code ..... correct.

Les select dans l'immense majorité des cas c'est pas bien !!!!

Pourquoi il faut éviter les select chaque fois que c'est possible

Ceci ne fonctionne pas si tu exécutes le code quand tu es dans la feuille "Listes"
Range("Tableau2[[#Headers],[ETAT]]").Select
Selection.AutoFilter

Par contre ceci fonctionne si tu exécutes le code quand tu es dans la feuille "Listes" donc tu peu exécuter mon code...

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonsoir,
Je viens d'ouvrir XLD et je découvre cette macro qui fonctionne très bien et j'en suis ravi.
Même si j'arrive à comprendre (grossièrement) le code, j'aurais été incapable d'un tel résultat !
Au vu de la rédaction du code, et si j'y arrive, je vais ajouter un MsgBox d'ouverture pour dire ce que l'on fait et éventuellement y renoncer (OUI / NON).
Voilà un code que je vais sauvegarder précieusement !
Bon week-end et mille mercis.
Pierre
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Mais que veux-tu que je te dise ?
C'est nickel ! Je garde, je sauvegarde et je transfère...
Je voudrais clore cet échange et le reconnaitre comme "RESOLU" ...
J'ai "euréké" ! Suis-je donc à ce point irrécupérable ? Nous le saurons dans une prochaine aventure car il y en aura d'autres...
Je m'en vais clore tous mes bavardages !
Bien cordialement !
Pierre
 

Constantin

XLDnaute Occasionnel
Supporter XLD
J'ai juste un petit problème (de rien du tout). Lorsque la macro trouve des "Sortie" et fait son travail, à l'issue le filtre reste actif et la page "nettoyée" n'apparait que si je modifie les paramètres du filtre bloqués sur "Sortie".
Il faut que je sélectionne 'Tout sélectionner" dans le filtre et l'affichage redevient complet...
Comment y remédier ?
Bon dimanche,
Pierre
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonsoir,
Je suis vraiment désolé de t'embêter avec des queues de cerise.
Mais je dois avouer que je n'y comprends rien...
Ton fichier du post#4 fonctionne très bien à partir du téléchargement.
J'ai simplement voulu ajouter ta macro à mon fichier de base (en cours de remplissage suite à mon inventaire). J'ai modifié quelques "formulations" des MsgBox en prenant garde de ne pas toucher au code.
Et là, à l'issue de l'élimination des lignes comportant "Sortie" dans la colonne ETAT, le filtre reste actif.
J'ai installé ta macro "test" en module 1, même chose...
Pour contourner le problème j'ai fait une petite macro (Nett) qui active le filtre, appelle la macro Nettoyage puis désactive le filtre. C'est un peu "bourrin" mais ça marche...
Je pense à un problème de configuration de mes paramètres mais ça, je ne sais pas faire...
Si tu as une idée.
Excellente ta vidéo. Tu m'apprendras ?
Bonne soirée
Pierre
 

Pièces jointes

  • Congélateurs2.xlsm
    35 KB · Affichages: 4

Constantin

XLDnaute Occasionnel
Supporter XLD
A force d'essayer, j'ai "pondu" ça (ajout en gras):
Sub Nettoyage()
Dim Choix
Choix = MsgBox("Confirmer la suppression des produits sortis ?", 36, "Confirmation attendue")

If Choix = vbYes Then 'Si l'utilisateur a cliqué sur le bouton Oui
Range("Tableau2[[#Headers],[ETAT]]").AutoFilter
Range("Tableau2").AutoFilter Field:=12, Criteria1:="Sortie"

If Range("Tableau2").ListObject.ListColumns(12).Range.SpecialCells(xlCellTypeVisible).Count <= 1 Then
Range("Tableau2[[#Headers],[ETAT]]").AutoFilter
MsgBox "Aucune ligne à supprimer", vbInformation, "Tout va bien"
Else
If Not Range("Tableau2").ListObject.DataBodyRange Is Nothing Then
Application.DisplayAlerts = False
Range("Tableau2").ListObject.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
If Worksheets("Saisie").FilterMode = True Then Range("Tableau2[[#Headers],[ETAT]]").AutoFilter
Range("Tableau2[[#Headers],[ETAT]]").Select
Selection.AutoFilter

MsgBox "Les lignes avec Sorties ont été supprimées", vbInformation, "Voilà, c'est fait !"
End If
End If
Else
MsgBox "A une prochaine fois !", vbExclamation, "A bientôt"

End If
End Sub

Et ça marche,
Donc, affaire résolue..
Merci de ton aide.
Pierre
 

Phil69970

XLDnaute Barbatruc
@Constantin

Avec ton fichier tout fonctionne bien chez moi j'ai fait au moins 20 essais de suppression de ligne et pas eu de pb, désolé mais si je n'arrive pas à refaire le pb je ne peux pas t'aider

Essaye cette version 3 sans test sur les filtres mais avec la désactivation systématique du filtre mais avec le code ..... correct.

Les select dans l'immense majorité des cas c'est pas bien !!!!

Pourquoi il faut éviter les select chaque fois que c'est possible

Ceci ne fonctionne pas si tu exécutes le code quand tu es dans la feuille "Listes"
Range("Tableau2[[#Headers],[ETAT]]").Select
Selection.AutoFilter

Par contre ceci fonctionne si tu exécutes le code quand tu es dans la feuille "Listes" donc tu peu exécuter mon code sans avoir besoin d'aller physiquement dans la feuille "Saisie"
Range("Tableau2[[#Headers],[ETAT]]").AutoFilter

Pourquoi car select fonctionne QUE dans la feuille ou te trouves donc tu es obligé d'aller dans la feuille ou tu veux faire l'action puis faire l'action c'est pas pratique du tout et ralenti considérablement le code

De plus t'attribuer la réponse en modifiant 1 ligne qui fonctionne c'est un peu moyen surtout quand je lis ceci !!!
j'aurais été incapable d'un tel résultat !
Et ceci !!!
Ton fichier du post#4 fonctionne très bien à partir du téléchargement.
 

Pièces jointes

  • Congélateurs TS V3.xlsm
    31.6 KB · Affichages: 2

Constantin

XLDnaute Occasionnel
Supporter XLD
De plus t'attribuer la réponse en modifiant 1 ligne qui fonctionne c'est un peu moyen surtout quand je lis ceci !!!
J'ai déjà expliqué que je ne maitrisais pas la façon de clore une discussion (aide XLD inexistante !!!)
Je n'avais pas l'intention de m'attribuer quoique ce soit, mais seulement dire que , pour mon problème j'avais trouvé une solution, sans doute pas optimale, pour résoudre ce problème et contourner mon ignorance.
Les explications sur le code et la logique de saisie te sont familières mais à moi non... Je n'ai pas fait VBA première ou deuxième langue.
Je passe mon temps, avec plaisir, à découvrir et autant que faire se peut, sans agressivité et sans me faire taper sur les doigts
Ceci dit,
Ta solution fonctionne à merveille et je vais la garder comme référence dans mon fichier.
Ton aide a été précieuse et je t'en remercie sincèrement. Je vais réviser les Select et apprendre sûrement beaucoup de choses...
A moins que je ne fasse encore une "connerie", je clos cette discussion sur ton dernier message.
Bonne soirée et à une prochaine fois peut-être,
Pierre
 

Phil69970

XLDnaute Barbatruc
@Constantin

Perso j'ai pas fait moi aussi 1ere ni 2eme langue VBA
Je n'ai pas fait VBA première ou deuxième langue.
J'ai appris tout seul par passion et en épluchant des livres et regardant des forums et surtout en passant des heures devant mon PC à essayer de faire fonctionner ma malheureuse 1ere macro qui était surement encore plus mal écrite que les tiennes .
Mais tout fier de la voir fonctionner !!!
Et j'ai fait une 2eme macro un peu plus "améliorée" et une autre .... bref comme Obélix je suis tombé dans le chaudron ..... des macros......

N'hésites pas à consulter le moteur de recherche du forum pour y trouver ton bonheur ou à poser tes questions sur le site ....
 
Dernière édition:

Constantin

XLDnaute Occasionnel
Supporter XLD
Merci de ta réponse...
Je n'hésiterai pas à faire appel à vos conseils judicieux. Tu penses bien que je consulte le forum très fréquemment mais, très souvent, il s'agit de questions (donc réponses) en lien avec la vie professionnelle des XLDnautes et je ne trouve pas souvent ce que je cherche. Je suis retraité et n'ai donc plus que problèmes d'ordre "domestique" et relativement basiques (tu as pu apprécier mon niveau)
Je suis aussi abonné à Excel Pratique mais XLD garde ma préférence pour son côté "échange".
Pour en revenir à mon bug, si j'avais placé ma macro dans la feuille ou ajouté "Worksheets("Saisie").Select" ou quelque chose du genre, en tête de macro, est-ce que ça aurait changé quelque chose ? Ou encore positionner la macro directement dans la feuille "Saisie" ?
Bonne semaine
Pierre
 

Phil69970

XLDnaute Barbatruc
Bonjour @Constantin


Non je ne pense pas.

A priori et sans pouvoir répéter le pb je dirais que le test du filtre parfois ne se fait pas.
Pourquoi ? Mystere ?
If Worksheets("Saisie").FilterMode = True Then Range("Tableau2[[#Headers],[ETAT]]").AutoFilter
Traduction
Si mode filtre alors on l’enlève.
qui a été remplacé par :
Range("Tableau2[[#Headers],[ETAT]]").AutoFilter
Traduction
Enlève le filtre sans poser de question

N'oublie pas :
si j'avais placé ma macro dans la feuille ou ajouté "Worksheets("Saisie").Select"
Les select c'est pas bien dans 99% des cas et on peut s'en passer dans 99% des cas.

PS : Il y a longtemps que je n'ai plus de PB d'ordre domestique comme tu dit !!!!
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Bien reçu et bien enregistré !
Maintenant, j'ai un problème de MFC... Je voudrai appliquer une double condition "et(condition1;condition2)" à plusieurs cellules appartenant à des colonnes différentes.
Pour l'heure j'arrive au résultat en enregistrant deux MFC (colonne par colonne), en gros $A$2:$A19 et $B$2:$B19 alors que je ne voudrais qu'une seule MFC qui s'applique à $A$2:$B$19... Mais ça ne m'affiche que les A...
Je vais chercher.
A +++
Pierre
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…