Liste "filtrée" à partir d'une base de donnée

Bonjour à tous,

Je souhaiterai créer un tableau qui ne reprend que certains éléments d'une base de donnée :

J'ai un premier onglet avec une base de données exhaustif, j'ai des éléments avec des critères 1 et 2 (je simplifie pour l'exemple mais il y a éventuellement plusieurs critères).

Je souhaiterai dans une deuxième onglet ne reprendre que les éléments avec le critère 2 mais sans TCD ou filtre. Je ne veux pas que les éléments soit sommés mais bien avoir une liste, je ne sais pas si ma question est très claire.

Est-ce que cela est possible de faire cela sans macro mais avec des formules ?

Merci par avance pour votre aide

Bonjour,

Pas très clair non, pourquoi pas de filtre? Tu fais un filtre avancé avec le résultat dans un autre emplacement et le tour est joué non?

Ce qui me pose problème avec le filtre c'est qu'il faut le refaire à chaque fois. C'est un fichier dont je me sers tous les mois et dans lequel je dois tirer les formules à chaque fois donc je suis obligée de retirer le filtre, il est donc facile d'oublier de le remettre.

Bon après s'il n'y a pas de solution simple je reste sur ça

Rebonjour,

Pour éviter d'avoir à tirer les formules à chaque fois tu peux déclarer ton tableau via "Mettre sous forme de tableau" dans l'onglet "Accueil"

Avec un filtre avancé où tu extrais les données dans une autre feuille, tu gardes ton tableau de base intact et du coup pas besoin de l'enlever et de le remettre à chaque fois, en revancha il faut le réapliquer, ça peut se faire avec une macro appellée via un bouton si ça t'embête de devoir appuyer de nouveau sur filtre avancé à chaque fois.

Je ne connaissais pas l'option filtre avancé qui a l'air plutôt pratique ! Merci beaucoup pour votre aide

De rien

Très pratique en effet, surtout que ce type de filtre gère très bien les conditions multiples, tu peux faire des OU et des ET comme tu le souhaites, si tu as des soucis pour l'utiliser n'hésite pas à revenir nous voir

Bonjour, Salut Ausecour !

Je confirme que la solution Filtre avancé - macro est la meilleure dans le cas de figure décrit. Le filtre avancé ne se manifeste par rien dans le tableau initial, l'utilisation de macro est particulièrement avantageuse, une ligne de code, vite écrite avec un peu d'habitude et il est plus rapide d'écrire la macro et de l'exécuter que de réaliser l'opération manuellement avec l'assistant... et on n'a à l'écrire qu'une fois pour pouvoir la répéter autant de fois que l'on voudra, la zone de critères peut être placée n'importe où et ne gênera pas (et si l'on souhaite varier les filtrages cela pourra s'intégrer facilement à la procédure...)

Beaucoup de possibilités ouvertes et peu de moyens à mobiliser !

Cordialement et bonne journée.

Merci bcp !

Je pense avoir bien compris les filtres élaborés et l'utilisation avec ET/OU, c'est top en effet.

En revanche on est obligé d'avoir la zone de critères écrite quelquepart dans le fichier on est d'accord ?

MFerrand comment fonctionnerait la macro que vous décrivez ? Je ne maitrise pas du tout les macros. L'idée c'est que j'ai un bouton sur ma base de donnée initiale et lorsque j'appuie dessus il me génère un deuxième onglet en appliquant le filtre demandé ?

Merci d'avance

Re,

La ligne de commande de filtrage :

    [PlageAFiltrer].AdvancedFilter xlFilterCopy, [Crt], [PlageCible]

Elle sera d'autant plus courte en utilisant des noms de plage...

PlageAFiltrer= le tableau à filtrer incluant la ligne d'en-tête. Si on utilise un tableau Excel, on peut y accéder par :

Worksheets("NomFeuille").ListObjects(1).Range (NB- le nom mis par Excel automatiquement dans le gestionnaire de noms ne couvre pas l'en-tête), si plage normale, la nommer en dynamique.

Crt=zone de critères (la 1re ligne doit reproduire les noms de champs utilisés, la seconde [éventuellement les suivantes...] les critères), on peut la placer n'importe où, on la nomme et on utilise le nom.

PlageCible= plage de résultat du filtrage définie par sa première ligne, on peut aussi la nommer ou utiliser les réf. cellules... Cette première ligne accueillera les noms de champs, et les suivantes les lignes de la base filtrées. Si elle est vide au départ, pas de problème, sinon veiller à ce qu'elle contiennent les noms de champs exactement reproduits...

NB- En notation compacte dans le code, on place simplement un nom de plage entre crochets.

Cordialement.

Merci mais je crois que je n'ai pas tout compris

J'ai crée un nom pour les 3 plages grâce au gestionnaire de nom, j'ai ensuite écrit le nom directement entre [ ] :

[tableauafiltrer].AdvancedFilter xlFilterCopy, [Critères], [PlageRésultat]

et j'ai lancé la macro en appuyant sur F5. J'ai l'erreur suivante "Erreur de compilation : instruction incorrecte à l'exterieur d'une procédure"

Pour faire une macro, il faut l'inscrire dans une déclaration de procédure :

Sub Filtrer()
   'ici le code à exécuter
End Sub

Cordialement.

Ca marche merci beaucoup !

Par contre on ne peut pas utiliser 3 onglets différents ? J'ai un onglet avec la plage initale, un avec les critères et un 3ème ou je voudrai qu'il me mette le résultat et j'ai le message suivant lorsque je fais filtre élaboré : "Vous pouvez seulement copier des données filtées vers la feuille active".

Je voulais aussi savoir comment utiliser le filtre "contient xxx" j'ai essayé de mettre entre * mais ça ne marche pas

Bonjour,

Tu lances ta macro à partir de la feuille de résultats.

Cordialement.

Ah oui en effet c'était plutôt évident

Merci!

Et pour le filtre "contient" ?

Là c'est la rédaction du critère : pour chercher un partie de texte contenu dans un champ tu utilises les caractères génériques : *textecherché*.

Rechercher des sujets similaires à "liste filtree partir base donnee"