Moteur de recherche multicritères

Moteur de recherche multicritères,

Bonjour à tous,

Je manipule Excel assez souvent mais dans ces fonctions basiques. En deuxième année d’Ecole (d’agro !) j’ai eu l’occasion de faire du VBA (il y a 10 ans !) et de me rendre compte ces incroyables possibilités. C’est ce qui me pousse à faire appel à vous !

Ci-joint vous trouverez le classeur.

Il contient un onglet BDD avec 12 colonnes :

image 1 bdd

Cette base est en fait aussi un fichier de suivi. En atteste les colonnes jaunes : Etat de la publication, commentaires…

Cette base ne doit être remplie que par moi donc je souhaiterais bloquer le remplissage de cette BDD par un code (cela ne doit pas être le plus compliqué).

Pour le reste j’aimerais faire un moteur de recherche :

image 2 moteur de recherche

Cahier des charges

Etape 1 : Remplir les champs ci-dessus (au moins 1 champ) grâce à une liste déroulante de choix (cf onglet listes du fichier en PJ).

Etape 2 : Cliquez sur lancer la recherche

Etape 3 : Un fichier s'ouvre avec la liste de l'ensemble des essais correspondant aux critères de recherche. Apparaît uniquement un tableau avec deux colonnes : colonne 1 = l'année de l'essai (la campagne) et colonne 2 = le nom de l'essai (lorsqu'on clique sur le titre de l'essai, l'essai s'ouvre en PDF car il est attaché à un lien HyperText dans la BDD)

Autres critères :

1 - doit pouvoir cliquer sur "lancer la recherche" même si un seul champ est complété. Et doit bien entendu retourner un résultat le plus large possible.

2- doit continuer à fonctionner même si la BDD est complétée : nouvelles lignes ou nouvelles colonnes.

3 - doit continuer à fonctionner si les listes déroulantes de choix sont complétées (feuille "Listes" de l’Excel : par exemple ajout d'une "culture" ou d'une "thématique")

4- la BDD n'est pas accessible à tout le monde (protégé par un code)

Le classeur contient un onglet nommé « Listes » me permettra deux choses :

  • Compléter la BDD sans faire d’erreur d’orthographe
  • Remplir le moteur de recherche

Problème auquel je suis déjà confronté :

Ma BDD (officielle) contient déjà 600 lignes : et donc elle est très très lente…

Cela est du au fait que chaque ligne est soumise aux listes de l’onglet « Listes » je ne sais pas comment m’en passer pour remplir la BDD correctement. Peut-être grâce à un USERFORM ?

Mais si c’est le cas est-ce que « coller » un lien HyperText sera possible ? Et il faudra que je puisse (moi, pas les utilisateurs du moteur de recherche) modifier/supprimer une ligne de la BDD facilement.

Même si je suis à peu près sûr que non j’espère quand même être suffisamment clair pour que certains d’entre vous s’intéressent au sujet. Désolé si les termes employés ne sont pas les bons.

Je me tiens évidemment disponible pour préciser ma demande.

D’avance merci à tous ceux qui m’aideront.

Seb

Bonjour,

Pour interdire l'accès à ta feuille il te suffit de la protéger en écriture : onglet "Révision" ensuite cliquer sur "Protéger" et faire ton choix

Bonjour,

Un essai dans le fichier joint.

Pour élaborer le moteur de recherches, j'ai utilisé Power Query (nativement installé depuis la version 2016 d'Office)
Nb : il est préférable de mettre la version utilisée vs la langue utilisée (pas vraiment indispensable) dans le profil

J'ai modifié la présentation de ton tableau de recherche, avec les 5 colonnes de critères.

L'appui sur le bouton "GO" met à jour la requête, et extrait les résultats sous ce bouton (dans le tableau "T_Final"), puis insère le lien hypertexte (s'il existe) de la cellule de référence.

Le bouton "RAZ", permet de "Razédifier"....

Si cela peut te permettre d'avancer...

(et je rappelle, mets ta version Office, dans ton profil...)

Bonne journée

Edit, fichier modifié, petit dysfonctionnement sur les liens hypertextes - Rectifications "In Progress"

Re-,

Suite à ce petit bug, voici le fichier

Et pour les "campagnes", tu peux, au choix :

- Ne remplir que la 1ère
- Ne remplir que la 2ème
- Remplir les 2 (dans n'importe quelle ordre)
- Ne remplir aucune, mais il faudra un autre critère

Merci beaucoup. Je suis bluffé par la vitesse avec laquelle vous avez codé ça !! Merci Jacky pour l'astuce c'est parfait.

Je prends connaissance à l'instant du ficher et je suis super content.

De mon côté j'ai réussi a débugger ma base de données de 600 lignes.

Je constate par contre que la rechercher avec la féverole ne fonctionne pas ? Peut-être qu'en rentrant un nouvel essai (une nouvelle ligne) à l'aide d'un USERFORM cela réglerait le problème ?

Encore merci infiniment

Re-,

Je constate par contre que la rechercher avec la féverole ne fonctionne pas ?

Dans le fichier joint, j'ai rajouté cette culture, avec un Rapport non indexé (pas de lien hypertexte) à des fins d'essai.

Que veux-tu dire par "ne fonctionne pas"?

Re-,

Ah ben, si tu rajoutes un souhait pendant que je réponds...

Pour un UserForm, ce sera sans moi... désolé (je n'utilise plus le VBA que pour des mises à jour, ou autres petites facilités)

Et bien j'ai retesté et ça fonctionne bien ! Désolé peut-être que c'est mon ordi qui a mouliné un peu longtemps.

C'est impeccable je vais remplir la BDD, protéger les cellules qui doivent l'être et je crois que le fichier répond parfaitement au cahier des charges ;)

A bientôt !

Re-,

Il est normal, qu'à la première requête, le temps de réponse soit plus long.
Lors de la 2ème, c'est quasiment instantané.

Afin de ne pas "subir" ce temps de latence (qui peut décourager..), on peut "contourner"...

Dans Power Query, la plupart du temps, le plus long, c'est la connexion à la base de données.
Si on établit cette connexion à l'ouverture du fichier, certes, le temps d'ouverture semblera un peu plus long, mais les requêtes ultérieures seront immédiates...

CQFD

Pour ce faire, se positionner dans une cellule de la requête (par exemple, la cellule B10)
Dans le ruban "Données", développer le menu "Actualiser tout", puis cliquer sur "Propriétés de connexion"

image

Et ici, valider l'option "Actualiser les données lors de l'ouverture du fichier"

image

C'est juste pour le confort....

Et, In Fine...

Merci pour ton aide à nouveau et l'astuce de l'actualisation à l'ouverture.

Mon fichier sera potentiellement à destination de personnes qui ne sont pas toutes très à l'aise avec Excel. Est ce qu'il serait possible de les empêcher d'écrire dans les cases suivantes ? :

image

D'instinct on comprends qu'il faut remplir ces cases mais c'est moins évident de comprendre qu'il s'agit d'une liste déroulante.

La solution que j'imagine est que quand il clic sur la case alors la liste déroulante se "déroule" !

Bonjour

pour empêcher l'utilisateur de saisir dans la cellule, dans la validation tu a des paramètres et tu a un message d'erreur à personnaliser si tu veux

tu peux aussi dans l'event sélection change de la feuille développer ta liste déroulante à la sélection de la cellule

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect([A4:F4], Target) Is Nothing Then
            DoEvents
              CreateObject("wscript.shell").SendKeys "%{DOWN}"
        End If
End Sub

après ça si l'utilisateur ne comprends pas ce qu'il faut faire ......

pour le reste comme tu es parti sur du PQ je n'irais pas plus loin

Merci beaucoup Patrick. Ce petite code n'est pas idiot du tout c'est assez intuitif j'aime bien.

Je me permets un peu de zèle pour vraiment avoir un truc blindé. Est ce qu'on peut avoir le même résultat (liste que se déroule) quand on "double-clique" sur les cellules. A4:F4 ?

Ou bien si c'est compliqué juste faire en sorte qu'en double cliquant l'utilisateur ne puisse pas saisir du texte.

RE

Bonjour ben change l'event selectionchange pour le doubleclick c'est tout

Désolé VBA c'est très loin et je ne le manipule plus depuis 10 ans. Dans ton code précédent s'agit-il de Target que je dois changer pour Doubleclick ?

re

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect([A4:F4], Target) Is Nothing Then
            DoEvents
              CreateObject("wscript.shell").SendKeys "%{DOWN}"
        End If
End Sub

Merci Patrick le double-clique marche un peu moins bien que le simple clique
.

J'ai l'impression qu'il faut laisser un peu de temps au fichier pour qu'il comprenne qu'en double cliquant il va devoir ouvrir la liste déroulante

bonjour Seb31170, salut PatrickT,Cousinhub,

une autre méthode avec uniquement la BDD et quelque segments. L'avantage est qu'on peut sélectionner plusieurs options dans le même segment et combiner avec les autres segments et tout est fait avec les outils excel, donc il faut rien prévoir.

Bonjour BsAlv,

Merci ta solution est aussi chouette. Je vais surement m'en servir également.

Pour aboutir à la solution souhaité avec PQ est-il possible d'utiliser des formulaires à la place des listes déroulantes ? Car en faite cela réglerait le problème. Plus aucun risque que la personne cherche à écrire à plusieurs reprises sur les case A4:F4. Désolé d'insister mais je sais que quelques personnes qui vont essayer d'utiliser le fichier ne sont vraiment pas à l'aise avec l'outil informatique. Leur éviter le message d'erreur de saisie serait un gros plus :)

re,

la feuille avec les données est cachée et si on veut, on peut la cacher encore plus ("VeryHidden").

Maintenant, je pense qu'une manipulation inattendue est impossible.

Rechercher des sujets similaires à "moteur recherche multicriteres"