Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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.
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...
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.
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.
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"
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.