Formulaire, moteur de recherche et plus si affinité

Bonjour a vous,

J'ai essayé de mettre en place un formulaire pour la saisie d'information afin d'alimenter une base de données.

En cherchant sur le net et les différents forum je suis arrivé à mon fichier en pj.

Mais il me manque des infos que j'arrive pas à mettre en place:

Faire un moteur de recherche en haut (me permettant de faire une recherche sur n'importe quelle lettre du mot saisie (saisie dans nom).

Ensuite, mon bouton valider fonctionne mais uniquement quand je lance le formulaire a partir du menu developpeur (F5).

Voila pour l'instant mes soucis.

Merci a vous de vos conseils, reponses et aides bienveillantes.

MErci a vous

31test1-v4.xlsm (30.37 Ko)

Bonjour,

Je n'ai pas regardé le fichier mais je propose une réponse à adapter à votre cas personnel :

function Filtrer(Mot$)
dim t()
with activesheet.range("refdemacolonnederecherche") '<<< ADAPTER REF COLONNE OU ON CHERCHE
    temp = .value
    for i = 1 to .rows.count
        if ucase(temp(i, 1)) like "*" & ucase(Mot) & "*" then
            n = n + 1: redim preserve t(1 to n)
            t(n) = temp(i, 1)
        end if
    next i
end with
if n > 0 then Filtrer = t
end function

Cette fonction renvoie un tableau avec les valeurs correspondantes. Vous pourrez alors en faire ce que vous voudrez et notamment alimenter une combobox via la propriété List si c'est votre souhait. Par exemple :

private sub textbox1_change() 'la recherche est effectuée dans la textbox1
me.combobox1.list = Filtrer(textbox1.value)
end sub

Cdlt,

Bonsoir, 3GB,

c'est marrant ceci :
"Je n'ai pas regardé le fichier mais ..."
Alors que souvent vous en réclamez un pour répondre à une demande !

Ceci dit vous faites du bon travail ! Je regarde souvent vos interventions pour apprendre encore et encore.

@ bientôt

LouReeD

Bonsoir LouReed,

Ce qui est marrant, c'est que tu relèves un tel détail et que tu commentes les interventions des autres plutôt que de répondre spontanément au sujet. C'est peut-être l'inspecteur des travaux finis qui sommeille en toi qui cherche à se révéler .

Et pour répondre sur la remarque :

- quand je peux, j'évite d'ouvrir les fichiers et j'en ouvre assez peu d'ailleurs. Il arrive cependant qu'il soit nécessaire, notamment lorsque je suis investi dans un sujet, de lever des doutes.

- dans le cas présent, il y a eu 5 ouvertures sans réponse, des explications assez vagues et j'ai jugé que la fonction proposée était suffisamment générique pour s'utiliser quelque soit le contexte. Donc logiquement, je précise que je n'ai pas vu le fichier pour qu'elsouba ne s'étonne pas d'avoir une proposition n'ayant possiblement rien à voir avec la réalité du contenu. En général, les compléments d'information viennent d'eux-mêmes.

- Enfin, je me réserve le droit de répondre comme je l'entends, en ouvrant les fichiers ou non selon ma disponibilité, ma motivation, mon ordinateur et surtout lorsqu'il s'agit d'un sujet auquel personne n'a répondu depuis près d'une semaine. Il vaut mieux une petite contribution insatisfaisante que rien du tout...

J'espère que ces justifications sauront satisfaire ta curiosité^^.

Bonne soirée et à bientôt,

Salut elsouba,
Salut l'équipe,

si je comprends bien ta demande, ceci devrait faire l'affaire après adaptations à tes données.
Une BDD de livres et une feuille 'REC' avec une fenêtre Texte pour la recherche tous azimuts où tu peux taper tout ce que tu veux comme info : la macro recherche en live dans la BDD toute occurrence de ce qui y est tapé.
Un clic sur un résultat affiche l'enregistrement dans la ligne grisée pour correction.
Pour créer un nouvel enregistrement, commencer à taper les nouvelles données dans la ligne grisée et valider avec le V.
Le X supprime un enregistrement.

25bibli-roussiau.xlsm (65.40 Ko)


A+

Bonjour,

Merci beaucoup de vos réponses.

je regarde ca ce matin et je reviens vers vous pour

remmerciements

questions

Elsouba

Bonjour,

@3GB : merci de ton travail mais j'ignore totalement cmment je pourrais inserer ton code dans mon userform.

J'ai essayé mais aucun résultat n'apparait dans ma liste déroulante.

@Curulis 57 : ce moteur re recherche correspond totalement à ma demande. j'essaie de l'intégrer dans mon userforme mais j'ai peur d'en arriver au meme resultat que pour le message de 3GB.

Je reviens vers vous après me creuser pour faire fonctionner vos codes.

Merci encore

Re Re

J'y arrive pas et je crois que je vais recommencer totalement mon userform.

Pourriez-vous m'accompagner ?

Je reviens avec mon fichier de base.

Je m'apercois que lorsque je valide ma saisie, rien ne se transfere dans la feuille BDD.

11test-v6.xlsm (30.85 Ko)

J'ai un peu avancé.

Maintenant quand je valide cela fonctionne et quand je recherche cela m'apparait bien mes infos.

La recherche me pose problème car je voudrais saisir n'importe quelle lettre du nom afin qu'elle apparaisse dans mon formulaire.

Merci de votre aide

13test-v11.xlsm (36.58 Ko)

Bonjour,

Je remercie l'ensemble des personnes de ce forum de m'avoir apporté des réponses. Mais malgré votre aide, je n'arrive pas à faire ce que je veux.

Peut on modifier une textbox servant de recherche afin de ne saisir qu'une partie des lettres pour afficher les mots concernés :

ex : j'ai un nom ducobu, si je tape co dans la recherche ma liste déroulante me pré-selectionne Ducobu?

Merci à vous

Bonjour elsouba,

As-tu essayé avec la fonction ?

Il faut la placer dans un module normal et y adapter la référence (sheets("nomdelafeuille").range("colonnerecherche")), en la remplaçant par celle de ton fichier.

Ensuite, dans le module de l'userform, il faut coller le second code en adaptant encore une fois les noms d'objets (textbox1 et combobox1).

Normalement, ça devrait marcher...

Cdlt,

Salut elsouba,

tape "Ducobu" quelque part dans la BDD puis tape "co" dans la fenêtre Texte...
Si j'ai le temps, je vais essayer de faire de ce programme une version générique...


A+

Merci tout d'abord a vous de prendre le temps de me repondre.

@3GB : ajouter un module ok pour moi mais le reste .....je crée une macro avec le code que tu m'as transmis.....?

@Curulis57 : quand je fais ta demande rien ne se passe....

Désolé mis je crois que je suis réellement un boulet en vba mais merci de vos conseils

Premier jet rapide pour une version générique. A améliorer encore...

@elsouba
- en 'BDD', tu configures ta ligne d'intitulés de colonne comme tu le souhaites MAIS il faut un titre pour chaque colonne !!
- quand tu passes sur la feuille 'REC', cette configuration est copiée (intitulés et largeur colonne)

Il y a déjà un "Ducobu" : tape "co" dans la fenêtre-texte...


A+

Curulis57, merci de ton travail.

Cette recherche fonctionne mais est-ce possible de l'utiliser à partir de mon formulaire?

en integrant ta recherche à mon bouton recherche du formulaire de saisie?

@elsouba : il n'y a pourtant rien de compliqué... Il suffit de me lire.

La fonction va dans un module normal.

La macro textbox_change, logiquement, va dans le module d'userform (car il s'agit d'une macro évènementielle sur l'UF). Tu peux double-cliquer sur la textbox, en mode création, ce sera la macro par défaut.

Et pour que ça fonctionne, il faut mettre le nom correct de tous les d'objets impliqués (textbox, combobox, feuille, plage)...

Cdlt,

Rien de compliqué surement , mais pour moi je n'ai pas compris si je dois deplacer mon code ou mettre ton code.....

Si je comprends bien je doispartir de mon code et le mettre dans le module?

En fait, je ne sais pas comment le dire plus clairement parce que pour moi ça parait limpide.

Sur votre projet VBA, il y a :

- les modules de feuilles et thisworkbook (rien à faire) ;

- le module de l'userform : y copier la macro :

private sub textbox1_change() 'changer par vrai nom de la textbox sujette
me.combobox1.list = Filtrer(textbox1.value) 'idem pour textbox et mettre vrai nom combobox cible
end sub

- les modules normaux (le cas échéant, en ajouter un à partir du menu de l'éditeur : Insertion/ Module) : y copier le code de la fonction :

function Filtrer(Mot$)
dim t()
with activesheet.range("refdemacolonnederecherche") '<<< ADAPTER REFERENCE DE LA COLONNE Où ON CHERCHE (ET PRECISER LA FEUILLE EN REMPLACANT activesheet par sheets("lafeuilleenquestion")
    temp = .value
    for i = 1 to .rows.count
        if ucase(temp(i, 1)) like "*" & ucase(Mot) & "*" then
            n = n + 1: redim preserve t(1 to n)
            t(n) = temp(i, 1)
        end if
    next i
end with
if n > 0 then Filtrer = t
end function

Au cas où il y aurait déjà du code sur la macro textbox_change, l'idéal serait de le désactiver (en le mettant en commentaire avec des apostrophes) pour les essais. Ensuite, en cas de doute sur l'ordre des instructions ou l'organisation au sein de cette macro évènementielle, tu peux poster le code. Sinon, copier le code tel quel devrait suffire.

Cdlt,

Bonjour à tous,

Comme 3GB m'a donné l'autorisation, si ça peut aider a y voir plus clair en complément des explications

2021 04 02 19 30 31 microsoft visual basic pour applications userform1 code

Cdlt,

Rechercher des sujets similaires à "formulaire moteur recherche affinite"