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

XL 2010 Supprimer les lignes qui ne répondent pas à un ou plusieurs critères

shroomers88

XLDnaute Nouveau
Bonjour,

J'ai ce fichier en pièce-jointe pour lequel j'aimerais obtenir les données de la feuille "Facturation" retournant dans une deuxième feuille l'équivalent des données de la feuille "Résultats".

Le critère pour obtenir la feuille "Résultats" est que toutes les cellules de la feuille "Facturation" colonne E doivent être référencées à "Oui". Donc si "Oui", colonne E, feuille "Facturation" = Oui, les données des colonnes correspondantes (comme par exemple la colonne F de la feuille "Facturation" nommée "Descriptif Dépense") apparaissent dans la feuille "Résultats" (comme par exemple la colonne F de la feuille "Résultats" nommée "Descriptif Dépense"). Si la colonne E de la feuille "Facturation" est vide ou à "Non" alors la ligne n'apparaît pas dans la feuille "Résultats". Finalement aucuns espaces ne séparent les lignes de la feuille "Résultats" pour lesquels un "Oui" a pu être trouvé dans la feuille "Facturation".

Merci beaucoup pour votre aide !

Mark
 

Pièces jointes

  • Fichier Exemple.xlsx
    16.9 KB · Affichages: 40

Nairolf

XLDnaute Accro
Salut à vous 2,

Je te proposerais une solution via la formule matricielle suivante (à valider avec CTRL+MAJ+ENTREE et recopier dans toutes les cellules du tableau de résultats) :
Code:
=SIERREUR(INDEX(Facturation!A$4:A$15;PETITE.VALEUR(SI(Facturation!$E$4:$E$15="oui";LIGNE(Facturation!$E$4:$E$15)-3);LIGNE($A1));1);"")

A noter que cette fonction peut être améliorée en définissant des noms ou en utilisant l'outil tableau disponible pour les fichiers version 2007 et +.
 

job75

XLDnaute Barbatruc
Bonjour shroomers88, Lolote83, Nairolf,

C'est un problème classique, moult fois traité sur le forum.

Une solution avec le filtre automatique :
Code:
Private Sub Worksheet_Activate()
With Feuil1 'CodeName de la feuille source
  With Intersect(.Rows("3:" & .Rows.Count), .UsedRange)
    .AutoFilter
    .AutoFilter 5, "Oui"
    .Copy [A3]
    .AutoFilter
  End With
  Rows(Application.CountIf(.[E:E], "Oui") + 4 & ":" & Rows.Count).Delete
End With
End Sub
La macro est à placer dans le code de la feuille "Résultats" et se déclenche quand on l'active.

Fichier joint.

A+
 

Pièces jointes

  • Fichier Exemple(1).xlsm
    27.8 KB · Affichages: 32

job75

XLDnaute Barbatruc
Re,

Un complément au cas où la feuille "Résultats" serait filtrée :
Code:
Private Sub Worksheet_Activate()
With Feuil1 'CodeName de la feuille source
  With Intersect(.Rows("3:" & .Rows.Count), .UsedRange)
    .AutoFilter
    .AutoFilter 5, "Oui"
    If Me.FilterMode Then Me.ShowAllData 'si la feuille est filtrée
    .Copy [A3]
    .AutoFilter
  End With
  Rows(Application.CountIf(.[E:E], "Oui") + 4 & ":" & Rows.Count).Delete
End With
End Sub
Par ailleurs dans la 1ère feuille les lignes sont maintenant colorées par MFC sur A:M :
Code:
=(LIGNE()>3)*($A1<>"")*NON(MOD(LIGNE();2))
Fichier (2).

A+
 

Pièces jointes

  • Fichier Exemple(2).xlsm
    27.3 KB · Affichages: 35

shroomers88

XLDnaute Nouveau
Bonjour à vous tous ! J'ai oublié de mentionner mais j'aurais préféré fonctionner sans macro. Je ne suis pas vraiment à l'aise avec et aurait définitivement préféré sans. Est-ce que c'est possible sans macro ? Merci encore !
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…