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

Discussions similaires

Statistiques des forums

Discussions
312 840
Messages
2 092 701
Membres
105 513
dernier inscrit
simo200100