Liste de noms fonction de zone de critere

Mica28

XLDnaute Nouveau
Bonjour à tous,
Je cherche une solution pour extraire une liste de noms en fonction d'une zone de critères. En sachant que l'exemple ci-joint serait à reproduire pour d'autres zones de critères.

Je ne vois trop comment faire, pouvez vous me venir en aide. :rolleyes:

Merci à ceux qui voudront bien me proposer des solutions.:)

Cordialement

Mica28
 

Pièces jointes

  • Eff Test.xls
    15.5 KB · Affichages: 68

Robert

XLDnaute Barbatruc
Repose en paix
Re : Liste de noms fonction de zone de critere

Bonjour Mica, bonjour le forum,

Il n'est pas nécessaire de multiplier les fils pour résoudre ton problème. Tu as déjà posté Lien supprimé. J'ai ouvert ton fichier mais je t'avoue n'avoir pas bien compris. j'a trouvé que ça manquait d'explications et que ça de donnait pas envie de continuer.
Si tu as le temps je te conseille vivement de lire la Lien supprimé de ce forum qui, elle, est très claire.

Désolé pour ce ton un peu abrupt mais je le dis pour ton bien. Reste sur le même fil et éventuellement reposte en donnant plus de précision. En plus ça le fait remonter dans l'affichage...
 

JeanMarie

XLDnaute Barbatruc
Re : Liste de noms fonction de zone de critere

Bonjour Ironman, Robert, Pascal

Déjà, je te conseille de nommer la plage des cellules de ta base de données, par "Base_de_données", (menu Insertion/nom/définir...) (attention à l'orthographe, il est important)
Pour que cette plage nommée soit dynamique dans sa longueur, tu peux mettre dans le champ "fait référence à :", la formule suivante.
Code:
=DECALER(Base!$A$1:$G$1;;;NBVAL(Base!$A:$A))
Ainsi tu pourras remplacer la plage Base!$A$1:$G$12 par Base_de_données, dans les formules de la feuille tableau.

Pour ce qui est de lister les lignes en fonction de tes plages de critères, il est préférable d'utiliser l'assistant filtre élaboré. Voici une macro à recopier dans un module VBA, et à lancer par un bouton.
Code:
Sub FiltreCritère()
' Macro par JeanMarie
    'Passe la base de donnée en mode filtre élaboré
    Range("Base_de_données").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Range("CDIG1"), Unique:=False
    'Copy les lignes filtrées dans l'autre feuille
    Range("Base_de_données").Copy Destination:=Sheets("Liste Base").Range("A1")
    Application.CutCopyMode = False
    'Supprime le mode filtré de la base de donnée
    Sheets("Base").ShowAllData
End Sub
Comme tu peux le voir, ce code ne fonctionne que pour un critère.
Pour l'adapter à un autre critère, il suffit de remplacer "CDIG1".

Tu peux aussi remplacer ce texte par le contenu d'une cellule dans une feuille de calcul.
Code:
    Range("Base_de_données").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Range(Range("A1")), Unique:=False

PS : Bonne journée à tous

@+Jean-Marie
 
Dernière édition:

Mica28

XLDnaute Nouveau
Re : Liste de noms fonction de zone de critere

Merci Jean-Marie,:)

C'est tout à fait ce que je recherchais. Peut on mettre plusieurs critères dans une même macro, comment puis je procéder et combien de critères puis ajouter si c'est possible.

En te remerciant par avance,

Cordialement,

Mica28
 

JeanMarie

XLDnaute Barbatruc
Re : Liste de noms fonction de zone de critere

Bonjour tout le monde

Mica28, si, j'ai bien compris ta demande, voici deux code

Dans le premier code, le nom de plage de critère sont contenus dans une plage de cellule nommée "PlageNomCritère".
Dans le deuxième pas besoin de déclarer une plage, mais tes noms de plage critère seront moins plus restritif (CDIG1, CDIG2, CDIG3, CDIGx)


Code:
Option Explicit

Sub FiltreCritère()
' Macro par JeanMarie
Dim PlageCritère As Range
Dim I As Byte
   Sheets("Liste Base").Range("A:G").ClearContents
   I = 0
   For Each PlageCritère In Range("PlageNomCritère")
      Range("Base_de_données").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
          Range(PlageCritère), Unique:=False
      Range("Base_de_données").Copy Destination:=Sheets("Liste Base").Range("A65536").End(xlUp).Offset(I, 0)
      Sheets("Base").ShowAllData
      I = 2
   Next
   Application.CutCopyMode = False
End Sub
Code:
Sub FiltreCritère2()
' Macro par JeanMarie
Dim PlageCritère As Range
Dim I As Byte
   Sheets("Liste Base").Range("A:G").ClearContents
   For I = 1 To 3
      Range("Base_de_données").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
          Range("CDIG" & I), Unique:=False
      Range("Base_de_données").Copy Destination:=Sheets("Liste Base").Range("A65536").End(xlUp).Offset(IIf(I = 1, 0, 2), 0)
      Sheets("Base").ShowAllData
   Next
   Application.CutCopyMode = False
End Sub
La valeur dans Offset(x,0) indique le nombre de lignes entre chaque "rupture"

@+Jean-Marie
 

Discussions similaires

Réponses
40
Affichages
2 K
  • Résolu(e)
Microsoft 365 Menu déroulant
Réponses
4
Affichages
481

Statistiques des forums

Discussions
312 842
Messages
2 092 730
Membres
105 519
dernier inscrit
faivre-roussel.ivan@orang