Filtre élaboré et respect de la casse

popcorn

XLDnaute Occasionnel
Bonjour,

J'ai tourné ici et la sur les forums mais je ne vois pas comment m'y prendre afin d'utilisé le filtre élaboré pour qu'il respecte la casse.

Je souhaite extraire de l'onglet "Liste" toutes les références correspondantes qui se trouve dans l'onglet "Livraison" et coller le tout dans "Stock".
J'utilise un filtre élaboré, mes références sont du type : spX00f5eFAe
Le soucis c'est que la casse n'est pas respectée, et la référence : spX00f5eFAE qui existe aussi sort également.

J'ai vu que la fonction EXACT pouvait résoudre le problème mais je ne vois pas bien comment l’intégrer dans mon code.

Une autre solution serait de comparer la colonne A de l'onglet "Stock" avec celle de l'onglet livraison et supprimer les lignes qui ne correspondent pas exactement.

Code:
Sub Stock()
    Dim DerLg As Integer
    Dim DerL As Integer
    Application.ScreenUpdating = False
    DerLg = Sheets("Livraison").Range("A" & Rows.Count).End(xlUp).Row
    DerL = Sheets("Liste").Range("E" & Rows.Count).End(xlUp).Row
    Sheets("Stock").Cells.Clear
    Sheets("Liste").Range("A1:E" & DerL).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Livraison").Range("A1:A" & DerLg), _
     CopyToRange:=Sheets("Stock").Range("A1"), Unique:=False
     Application.ScreenUpdating = True
End Sub

Je joins mon fichier.

Merci de votre aide
 

Pièces jointes

  • vba_filtreelaboré.xlsm
    291.3 KB · Affichages: 43

chris

XLDnaute Barbatruc
Bonjour

Il te faut une colonne supplémentaire dans la liste Livraison et l'utiliser pour le filtre
Il n'est pas utilise d'effacer la feuille Stock à chaque fois, le filtre le fait automatiquement
 

Pièces jointes

  • vba_filtreelaboré_xld.xlsm
    257.5 KB · Affichages: 75

popcorn

XLDnaute Occasionnel
Bonjour Chris, merci pour ton aide

La feuille ne comportera que la colonne A, PkgID, ce sera le relevé physique avec une douchette. Ce sera donc une liste qui sera différente à chaque relevé , du coup cela ne m'arrange pas d'avoir une autre colonne avec une formule.

Malgré tout, j'essaye de comprendre. Ton idée est donc de comparer chaque cellule de la colonne pkgID de "Stock" avec livraison.

Je dois faire une boucle de chaque cellule de cette plage et récupérer l'état de la colonne pkgid2 de "Livraison" et si c'est pas VRAI, je supprime la ligne de "stock". J'ai bien compris ta démarche??
 

chris

XLDnaute Barbatruc
Re

Le filtre élaboré permet d'utiliser une formule plutôt que la donnée brute : il faut donc un critère formulé pour chaque cas...

Tu peux mettre cette colonne ailleurs et te baser sur la hauteur de la colonne A pour le code.

Pas de boucle : regarde le code : j'ai juste changé la plage de critères. Su tu déplaces la colonne de formules, adapte le code.

C'est le filtre qui compare, pas le VBA
 

popcorn

XLDnaute Occasionnel
Ah ok,

Merci, oui en effet je vois que la zone de critère est basé sur la formule exact.
Et cela ne fonctionne pas correctement chez moi si je n'efface pas la feuille stock avant.

J'ai fais le test avec spX00f5eFAe et ensuite je change la dernière lettre en E, du coup l'ancienne référence est toujours présente, mais si j'efface avant cela fonctionne.

Je vois également que la cellule E14 est nommé en idpkg, je ne vois pas l'interaction avec le code.

Bon cela fonctionne et c'est super intéressant cette fonction de filtre avec l'utilisation de formule mais j'aimerais juste comprendre ceci stp.

Merci pour ton aide.
 

chris

XLDnaute Barbatruc
Re
...
J'ai fais le test avec spX00f5eFAe et ensuite je change la dernière lettre en E, du coup l'ancienne référence est toujours présente, mais si j'efface avant cela fonctionne.
Le filtre n'est pas dynamique, si tu changes la source ou les conditions, il faut le relancer et quand tu relances le filtre, il efface lui même les anciennes données.
...
Je vois également que la cellule E14 est nommé en idpkg, je ne vois pas l'interaction avec le code...
Tu peux sans doute parler du titre en E1 (PkgID2) le titre pourrait être n'importe quoi, sauf PkgID, voire vide, mais je prends toujours soin de donner un nom qui évoque sur quelle colonne initiale porte la formule : ici tu n'en as qu'une mais j'ai déjà fait des filtres avec 5 ou 5 formules, donc la rigueur dans le titrage est utile.
 

popcorn

XLDnaute Occasionnel
Bonjour,

Je lance la macro, qui lance le filtre. Je suis sur Mac peut être cela fait une différence mais si je n'efface pas ma feuille stock, mes valeurs initiales et nouvelles se mélangent. Ce n'est pas très important, j'ai compris ce que tu veux dire. Si le filtre est lancé manuellement, en effet, il s'efface.

Non, je ne parle pas de E1 mais bien de E14 dans ton fichier joint. La cellule à un nom défini, nommé "pkgid".
Que l'on retrouve dans la formule =EXACT(pkgid;A2) par exemple.
Je ne comprend pas pourquoi tu utilises un nom défini et pourquoi positionné à cet endroit.
Je suis désolé mais c'est peut être un truc très simple pour toi, mais je suis toujours en phase d'apprentissage.

En tout cas merci pour ton aide, cela fonctionne comme je voulais.
 

Dugenou

XLDnaute Barbatruc
Oui c'est étrange : quand j'ouvre le fichier de Chris : la zone nommée n'est pas reconnue et je n'ai rien en E14. Je suis intéressé par cette façon de faire : si Chris pouvait donner un peu plus d'explication sur ce Exact dans la zone de critères je lui en serait très reconnaissant.
 

chris

XLDnaute Barbatruc
Bonjour

Je dois filer donc je réponds succinctement mais pourrai compléter si besoin ;)
On peut utiliser n'importe quelle formule dans les critères. Il faut juste appeler le champ par son nom dans l'expression de la formule : c'est peut-être ça le problème rencontré par popcorn.

Le nom n'existe pas dans Excel mais est reconnu comme nom du champ pendant l'exécution du filtre.
Ce qui d'ailleurs complique les filtres à base de formules car on a du mal à contrôler la formule.
On peut remplacer le nom par l'adresse de la cellule qui contient le titre mais perso je n'aime pas trop et cela ne change rien au fait que la formule renvoie souvent une erreur.

Ici on voulait différencier la casse : le critère formulé est donc que le champ PkgID issu de Liste (source de l'extraction) comparé au même champ dans Livraison (servant de plage de critères) soit strictement identique casse comprise. Ceci pour chaque code de Livraison de A2 jusqu'à A...
 

Dugenou

XLDnaute Barbatruc
Bonjour Chris et merci,
Il n'y a pas d'urgence, je lirai ta réponse lundi au mieux.
Mais je n'y arrive pas : j'ai tout mis dans la même feuille pour me simplifier la vie.
Si je fais le filtre élaboré "normal" j'ai plusieurs résultats. Si je fais avec le champ formule je n'ai aucun résultat. Je suis ennuyé car je pensais qu'on devait avoir les mêmes noms de champs pour les critères et pour la base.
Donc quand tu pourras regarder et me dire où j'ai merdé....
Merci
 

Pièces jointes

  • filtre avance exact.xlsx
    9.4 KB · Affichages: 35

chris

XLDnaute Barbatruc
Bonjour

Ton exemple met le doigt sur un problème important : cela ne marche que si on utilise
soit =EXACT(champ1;$H$2)
soit =EXACT(champ1;"Azertyu")

sinon cela se décale et le "match" est aléatoire.

Su l'exemple de popcorn avec on à un écart conséquent avec 10 critères.
Cela complique la fabrication de la formule si plus de quelques cas...
A ajouter ici au VBA, sinon faisable par un cherche et remplace après formulation classique.
 
Dernière édition:

popcorn

XLDnaute Occasionnel
Bonjour Chris, Dugenou,

Je sais pas si je répond à coté de la plaque Dugenou mais essaye de prendre n'importe quelle cellule vide et tu définis le nom : champ1.
C'est ce que je fais pour avoir VRAI ou FAUX dans ma zone de critère, sinon j'ai #NOM?
Et de cette manière cela fonctionne, mais je ne comprend pas pourquoi...
Je serais plus disponible Lundi.

Bon Dimanche à tous.
 

chris

XLDnaute Barbatruc
Bonjour

Attention popcorn : regarde ma réponse à Dugenou : il faut ajouter des $ car sinon le filtre est faux

Sur mon exemple fait un cherche et remplace de
;A
à remplacer
par ;$A$

ou si tu crées la colonne par VBA modifie le code qui met la formule
 

Discussions similaires

Statistiques des forums

Discussions
312 111
Messages
2 085 395
Membres
102 882
dernier inscrit
Sultan94