Logique de code pour une recherche multicritères en VBA

Boujour,

Je m'appel Raphaël, je code généralement avec du PhP, JS, html.

Je suis relativement nouveau en Excel VBA et ai peu d'expérience.

LE CONTEXTE :

Je suis en train de créer un moteur de recherche en Excel (2013) codé en VBA.

J'ai une base de données de quelques centaines de lignes et dizaines de colonnes. Les lignes représentent mes "article" (ou produits) et les colonnes sont les critères à rechercher.

J'ai créé un formulaire qui regroupe les 23 critères. Il y a deux type de critère le critère en liste déroulante (contenant principalement des "string") et les critère en Checkbox qui me renverrait des "boolean", coché/décoché. L'idée est que, quand l'utilisateur à choisi ses critère, un code VBA lance une recherche dans ma base de donnée et me l'affiche dans une autre feuille.

Lorsqu'un critère est différent de la sélection par défaut, alors je stock ce critère dans une case (de A1 à A23), cela me permet de tester si les champs sont vide ou pas à l'aide d'un While/Wend.

MA PROBLEMATIQUE :

L'utilisateur peut choisir de laisser un champ vide ou non rempli car cette sélection n'est pas importante à ses yeux.

Il est donc possible que le champs 1, 2, 3, 5, 15 (par exemple) soient remplis, mais pas les autres. Il est aussi possible qu'il ne choisisse de ne remplir que les champs 5, 12, 22, etc. Bref, vous l'avez compris, je ne peux pas attaquer ma requête comme suit :

IF(champ1<>"" And champ2 = "" And champ3="", etc...

puis refaire l'exercice pour les 23 x 23 = 529 possibilités de if.

Cela doit me permettre de savoir quels critères je doit rendre obligatoire dans ma recherche.

CE QUE J'AI ESSAYÉ :

J'ai essayé de stocker, les "And champX <> ""..." dans une variable, que je rempli à la lecture while de mes critères

IF(champ1<>"") Then 
    variable = variable & "And champ1 <>""" 
EndIf

... et demander à ma recherche de faire un IF(variable) mais VBA ne pouvant pas lire les variable à la volé, cela ne fonctionne évidemment pas.

EN RESUMÉ :

Mon soucis est plus un problème de logique que de code, j'aimerai comprendre ce que je peux faire pour ajouter des critère en dynamique à ma fonction de recherche.

J'espère avoir exposé mon soucis avec clarté, si ce n'est pas le cas, je me ferai un plaisir de répondre à vos questions.

C'est aussi mon premier poste, j'ai vérifier mais j'espère ne pas avoir enfreint les règles du forum.

Merci par avance de votre aide,

Raphaël.

Bonjour,

voici une logique de code possible (non optimisé)

Dim crit(23)
    'remplir le vecteur critère
    For i = 1 To 23
        crit(i) = Me.Controls("champ" & i)
    Next i
    'parcourir les lignes de la db
    For numerolignedb = 1 To derniereligne
        critereok = True
        For numerocritetre = 1 To 23 ' vérifier si la ligne correspond aux critères
            If crit(numerocritere) <> "" Then ' critère à vérifier
                If lignedb(numerolignedb, numerocritere) <> critere(numerocritere) Then
                    critereok = False
                    Exit for
                End If
            End If
        Next numerocritere
        If critereok Then
            'traitement de la ligne répondant aux critères
        End If
    Next numerolignedb

tu peux également utiliser la méthode autofilter de l'objet range.

Salut h2so4 salut Raph

j'avais créer un sujet assez similaire je te passe le lien si tu peut trouver des trucs qui t'intéresse

Formulaire de recherche multicritères (excel-pratique.com)

Bonjour h2so4 et Nathanexcel,

Merci pour vos réponses rapides et pile dans le besoin.

@h2so4, je vais prendre votre structure de code pour essayer de l'adapter à mon besoin cela à l'air d'être une bonne base de départ.

@Nathanexcel, je vous avoue que j'avais lu votre sujet avant de poster le mien mais le votre regroupant plusieurs sujet en un, je n'ai pas réussi à m'y retrouver. Je vais m'y replonger si la proposition de h2so4 ne répond pas (mais j'ai bonne espoir.).

Je vous tiens au courrant.

Merci encore pour votre aide :-)

Bonjour à tous,

@Raphael : si tu es habitué au Php, tu l'es aussi probablement avec le Sql. En Vba on peut aussi utiliser du Sql et pour des recherches multicritères ça peut être utile.

J'avais proposé un exemple ici

demo fltr 4

https://forum.excel-pratique.com/excel/systeme-de-filtres-dans-un-userform-avec-d-autres-fonctionnal...

https://forum.excel-pratique.com/d/download?p=926616&f=28923_5fd746c7936aa895717073

Pierre

Rechercher des sujets similaires à "logique code recherche multicriteres vba"