Liste de noms fonction de zone de critere

  • Initiateur de la discussion Initiateur de la discussion Mica28
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

Mica28

Guest
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. 🙄

Merci à ceux qui voudront bien me proposer des solutions.🙂

Cordialement

Mica28
 

Pièces jointes

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...
 
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:
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
40
Affichages
4 K
Retour