Filtres personnalisé en VBA

H

Hélène

Guest
Salut... encore moi !

Je voulais pas aller me coucher avant d'avoir résolu ce casse-tête mais là je craaaaaaaaque !

Alors voilà :
J'ai un userform qui permet d'accéder à des filtres de manière un peu plus conviviale...
J'ai notamment une listbox (critNumCde) contenant les quatre valeurs "commençant par, égal à, se terminant par, contenant" et un champ destiné à recevoir tout ou partie d'un numéro de commande (numCde).
Vous l'aurez compris, je cherche à appliquer un filtre sur la colonne "numéro de commande" avec par exemple comme critère "contenant 4500".

Voilà un extrait de mon code :

If StrComp(critNumCde.SelText, "Contenant", vbTextCompare) = 0 Then
monNumCde = "*" & numCde.Text & "*"
End If

monNumCde = CStr(monNumCde)

Cells(lig1, 1).AutoFilter Field:=col_numCom, Criteria1:=monNumCde, Operator:=xlAnd

Une fois le filtre exécuté, il ne reste aucune ligne.

Peut être est il bon de préciser que la colonne à filtrer a un format personnalisé :
##" "##" "##" "##" "##

Merci d'avance, je vais me coucher ;)
Hélène
 
@

@+Thierry

Guest
Bonjour Hélène et le Forum

J'ai regardé ton problème. Il me semble que tu ne peux même pas obtenir de résultat dans ce genre de situation manuellement... Enfin du moins avec ce que j'ai compris.... Donc en VBA tu n'auras guère plus de résultats.

Si tu parle de format personalisé "NumberFormat = "## ## ## ##" tu ne pourra pas retourner une fraction "contenant 4500"... Car on est en numérique...

Exemple
45 00 55 88
45 01 55 89
45 02 55 90
En agissant manuellement sur l'AutoFilter "contains" 4500 => Aucun Retour

En mettant la colonne en format Standard Général :
45005588
45015589
45025590
manuellement sur l'AutoFilter "contains" 4500 => Aucun Retour

En mettant la colonne en format Texte :
manuellement sur l'AutoFilter "contains" 4500 => 1 Retour

Donc soit tu passes en mode Text sur cette colonne, soit encore une autre possibilité....

La méthode "Find" quand à elle fonctionne quelque soit le cas de figure ci-dessus... Donc je ne connais pas tes besoins, mais peut pourrais-tu reconstruire une feuille temporaire contenant les enregistrements qui "matchent" avec une recherche de type "Find"...

Avant de quitter, une ultime autre possibilité toujours en AutoFilter et en conservant ton format perso "## ## ## ##" serait de faire une recherche sur deux critères :
AutoFilter Field:=2, Criteria1:=">=45000000", Operator:=xlAnd, _
Criteria2:="<=45009999"

Bon Courage
@+Thierry
 
H

Hélène

Guest
Salut Thierry et le Forum,

Merci pour tes astuces. Finalement j'ai voulu être plus royaliste que le roi... l'utilisateur ne veut connaître que les commandes ayant un numéro incomplet, à savoir un code sur moins de 10 caractères (ou chiffres). Pour avoir un temps de réponse acceptable j'aurais voulu passer par un filtre (il y a 15000 lignes).

Je voulais faire un truc du style :

Selection.AutoFilter Field:=col_numCom, Criteria1:="=?", Operator:=xlOr, _
Criteria2:="=??"

Mais je me heurte à deux problèmes :
- avec des chiffres ça ne fonctionne pas. J'ai converti la colonne au format texte, idem
- en admettant que ça marche, comment faire pour ramener les numéros de commande à 1, 2, 3, 4, 5, 6, 7, 8 ou 9 chiffres ? un filtre sur un filtre sur un filtre ?

J'espère ne pas vous avoir trop embrouillés !
Toute suggestion sera la bienvenue, merci d'avance

Hélène
 
@

@+Thierry

Guest
Salut Hélène et le forum

Ah oui pour l'embrouille tu as réussi ! Bon vite fait (je suis à la bourre)

Selection.AutoFilter Field:=col_numCom, Criteria1:="=?", Operator:=xlOr, _
Criteria2:="=??"
Que veux tu faire avec ça ?
Retourner toutes les lignes ayant 1 ou 2 caractères ? (sans les préciser ?)

Je ne comprends pas par rapport à ce que tu dis en premier paragraphe où tu parles d'une chaine de 10 caractères...
Pour cette première partie il suffirait d'intégrer un colonne de plus à ton tableau en utilisant la fonction = Len(X1)... (sorry je suis en US, et LEN je ne sais pas en version FR, mais c'est une fonction qui se trouve dans la catégorie "Texte")
De là tu n'auras qu'à filtrer sur cette colonne (qui pourra laisser la colonne "numéro de commande" en format numérique pour des fins de tris ou autres)... Mais ptet j'ai rien capté.

Bon Aprèm
@+Thierry
 

Membres actuellement en ligne

Statistiques des forums

Discussions
314 017
Messages
2 104 584
Membres
109 084
dernier inscrit
mizab