Créer une boîte de recherche

Bonsoir le Forum,
Liste.xlsm (51,8 Ko)

je suis en train de travailler sur un fichier pour le travail. Or, mes connaissances en VBA est un peu limité…

Dans ce fichier, grâce à un formulaire de saisie, que j’ai fait avec du VBA, se trouvant sur la page d’accueil. Je vais rentrée tous les dépenses que je vais faire pour des matériaux ou autres ( comme si je recensais tous ce que j’achetais). Ces informations vont être stocké sur une feuille « base de données ».

Ce que je recherche à faire c’est de faire un module recherche :

Sur le même formulaire de saisie, l’utilisateur va juste mettre le nom du fournisseur et quand il clique sur « Rechercher » la liste de tous ce qu’il a acheté chez le fournisseur (dès données précédemment rentré) s’affiche dans la boîte à côté.

J’avais pensé à utiliser une formule avec « DECALER » avec Recherche mais je ne pense pas que ça possible.

Du coup, je voulais savoir s’il y avait une solution assez simple pour afficher tous?
(Surtout qu’il faut que je fasse sur la même feuille…)

Je vous remercie de votre attention

Bonne soirée.

Bonjour

Ci-joint ma proposition

J’ai supprimé ton Textbox car impossible à l’intérieur de lister en ligne plusieurs enregistrement

J’ai gardé l’onglet en l’état en supprimant le quadrillage sur la zone à remplir et mis sur fond blanc

Saisis un Fournisseur
Celui-ci doit être libellé à l’identique de ceux présent dans l’onglet « Base de données »
Exemple avec tes enregistrements fournis onglet « Base de données » si je saisi « x » dans la fenêtre j’obtiens 2 enregistrements mais si je saisi « X » je n’obtiens rien

Donc attention à respecter l’exacte écriture dans la saisie de la donnée recherchée à la casse prés

Testes et dis moi

Liste2.xlsm (53,5 Ko)

1 « J'aime »

Bonjour,
Bonjour FFO
pour une recherche avec maj ou min il suffit d’ajouter une fonction (UCase ou LCase)
pour cette macro, ligne à remplacer

If VBA.UCase(Sheets("Base de données").Range("A" & i)) = VBA.UCase(recherche) Then
1 « J'aime »

Bonjour Mimimathy
Tu as raison et ainsi de s affranchir des divergences de casse
Maintenant cela ne résoud pas les autres divergences
Ecriture differente espace aux extrémités ou autres
Je préfère alerté l utilisateur sur la nécessité d une bonne homogénéité des données plutôt que d utiliser des artifices pour tenter de les éradiquer
C est ma façon de voir elle ne tient qu’ à moi
Merci à toi pour ton aide

1 « J'aime »

Bonsoir à tous,

Je vous remercie pour votre réponse.

J’a essayé le fichier et j’aime bien, merci.
Mais j’ai une question, si on ajoute une colonne juste avant la partie blanche où la liste des recherches apparaît, est - ce qu’il y aura une modification ou pas?

Cordialement

Bonsoir
Merci pour ce retour
Si les colonnes des recopies de données sont déplacées il faudra actualiser le code du traitement en conséquence
Dans cet esprit il serait bon de prévoir de la marge en disponibilité de celles-ci avant celles de la fenêtre de recopie
Le tout est de savoir combien
Seul inconvénient cela déplace cette fenêtre ce qui nécessitera certainement de jouer sur l ascenseur horizontal pour consulter les données des dernières colonnes de droite
Il est toujour possible de masquer celles disponibles inutilisées

A toi de voir

1 « J'aime »

Bonsoir,

D’accord, merci de votre retour!

Bonsoir,

J’ai aussi une autre question, comment on fait pour importe les valeurs de certaines textbox en € et en pourcentage?

Parce que les textbox de 9 à 12 (les prix+ marge) doivent être en euro et la remise en pourcentage.

J’avais repris un code que j’ai utilisé pour un autre fichier :

Private Sub TextBox9_AfterUpdate() 'format de cellule
On Error Resume Next
Me.TextBox9 = Replace(TextBox9, ".", ",")
Me.TextBox9 = Format(TextBox9.Value, "# ##0.00 €")
End Sub
Private Sub TextBox10_AfterUpdate() 'format de cellule
On Error Resume Next
Me.TextBox10 = Replace(TextBox10, ".", ",")
Me.TextBox10 = Format(TextBox10.Value, "# ##0.00 €")
End Sub
Private Sub TextBox11_AfterUpdate() 'format de cellule
On Error Resume Next
Me.TextBox11 = Replace(TextBox11, ".", ",")
Me.TextBox11 = Format(TextBox11.Value, "# ##0.00 €")
End Sub
Private Sub TextBox12_AfterUpdate() 'format de cellule
On Error Resume Next
Me.TextBox12 = Replace(TextBox12, ".", ",")
Me.TextBox12 = Format(TextBox12.Value, "# ##0.00 €")
End Sub

Mais après texte ça ne marche pas, est - ce qu’il faut que je définisse le format de la cellule dans le premier bloc? (quand c’est transféré?)
comme ça:

    .Cells(1, 10).Value = TextBox8 = Format(TextBox12.Value, "# ##0.00 €")
    .Cells(1, 11).Value = TextBox9= Format(TextBox12.Value, "# ##0.00 €")
    .Cells(1, 12).Value = TextBox10= Format(TextBox12.Value, "# ##0.00 €")
    .Cells(1, 13).Value = TextBox11= Format(TextBox12.Value, "# ##0.00 €")
    .Cells(1, 14).Value = TextBox12= Format(TextBox12.Value, "# ##0.00 €")

Je vous remercie de votre attention

Pour moi les textbox ne sont qu’ au format texte
Le format souhaité de leur données les concernant doivent venir de leur source
Soit par la saisie de l utilisateur qui doit la réaliser au format attendu soit par la source qui l alimente celle-ci doit avoir la donnée au format souhaité
Le Textbox lui prendra la donnée en l état sans possibilité par son biais de la présenter différemment
Donc il faut travailler sur la saisie en imposant à l utilisateur une manière de la réaliser avec un contrôle de celle-ci au moment où elle est effectuée puis alerte si elle n est pas conforme et suppression de celle-ci ou travailler la source qui l alimente pour que celle-ci soit au format adapté

Inutile de travailler sur l alimentation de la textbox cela ne fonctionnera pas car celle-ci n a qu’ un seul format : format texte

C est pour ma part ma manière d opérer les concernant

Je pense donc que c est cette piste qu’ il faut utiliser

J attire ton attention sur le fait que tes cellules dans l onglet pour celles qui ont un montant ont un format d affichage qui n est en rien celui de la donnée
Tu as par exemple à l affichage 10€ mais ta donnée réel est 10 c est tout
Si tu veux obtenir dans ton textbox la même présentation soit tu mets en donnée réel 10€ et non suite au format d affichage soit la donnée réel reste 10 mais il faudra rajouter dans ton code de récupération le caractère € par exemple comme ceci :

TextBox8 = Cells(1, 10) & « € »

Par d autre choix ou donnée réel dans la cellule conforme au format attendu ou fabrication de celui-ci

1 « J'aime »

Bonsoir,

Je te remercie de ta réponse.

Je vais imposer la saisie à l’utilisateur, je pense que ça sera mieux!

Un contrôle sur sa saisie peut être effectué afin de contraindre celle-ci à un format et de donner un message si celui-ci n’est pas respecté avec suppression de la donnée incorrecte

A toi de voir

D’accord,
je peux le réaliser avec quel fonction? (la fonction IF?)

Quel doit être le format de saisie ?
Et pour quel TextBox ?

Le format de saisie est en Euros pour les textbox 9, 10, 11 et 12.

Cette saisie est elle une fois effectuée utilisée par le traitement du bouton du formulaire « Valider et enregistrer la saisie » ?

« Le format de saisie est en Euros »

C’est à dire en bout de donnée avec le caractère « € » ?

Merci de me dire

Oui, ça peut - être déjà intégrés dans la case (par exemple elle se rajoute lors de la saisie) ou juste effectué quand on clique sur le bouton « valider et enregistrer la saisie » pour apparaître sur la feuille « base de données ».

Oui avec en bout de donnée avec le caractère « € ».

Merci

Le problème pour réaliser le contrôle de la présence en fin de la donnée du caractère « € » il faut que celui-ci soit effectué lorsque la saisie de celle-ci est effectivement terminée
Donc seul l action sur le bouton est l indicateur pour tous les textbox de la fin de toutes ces saisies et donc que ce contrôle peut se dérouler
De plus au lieu de mettre en place un contrôle par textbox soit 4 contrôles pour les 4 textbox un seul suffit derrière le bouton allant vérifier les 4 saisies
C est beaucoup plus simple
Je te propose donc dans cet esprit de vérifier la présence du caractère « € » en fin des 4 données et de vérifier aussi que le reste pour chacun soit uniquement que des chiffres et ce dans le traitement du bouton

Merci de me dire si cela te convient

1 « J'aime »

D’accord, cela me convient bien comme méthode!

Ci-joint ton fichier avec cette évolution

Si un ou plusieurs de ces TextBox :

TextBox9
TextBox10
TextBox11
TextBox12

n’a pas la saisie au format d’un nombre suivi du caractère « € » un message est donné de la liste des TextBox à la saisie non conforme

Le traitement du bouton est arrété

Les TextBox ne sont pas vidés mais doivent être corrigés pour ceux dont le format de la donnée est non conforme afin que le traitement du bouton « Valider et enregistrer la saisie » puisse s’effectuer

Testes et dis moi

Liste2.xlsm (55,8 Ko)

Petite suggestion :
Dans le label de chaque Textbox mettre l indication du format de saisie à respecter : « 0000€ »

1 « J'aime »

Okay, pas de problème.
Je viens de tester et j’aime bien.

Je vous remercie de votre réponse et de votre aide.