Création d'une barre de recherche (base de donnée)
Bonjour à tous,
Je m'excuse d'avance pour la probable simplicité de mon problème, je suis débutant en VBA, et je cherche à améliorer un fichier Excel pour mon stage. J'ai fais beaucoup de recherche et tester plusieurs codes mais rien ne fonctionne comme je le souhaite et je commence à désespérer.
J'ai créer une base de données qui contient beaucoup de champs et pour faciliter la navigation au sein de celle-ci et son remplissage j'aimerai créer une barre de recherche.
Ma base de données contient des données issues de comptes d'exploitation d'entreprises, les champs sont donc des noms de poste comptable, qui eux mêmes appartiennent à des postes plus importants. Exemple: poste principal = 625: frais de déplacement , sous poste= Missions et receptions.
Dans la cellule C2 j'ai mis une liste déroulante, celle ci contient les différents champs (sous poste) possible que l'on peut trouver dans la base. J'aimerai que lorsque je clique dans ma liste déroulante, par exemple sur missions et receptions ou carburant ou frais séminaire, ma cellule D2 affiche 625: frais de déplacement.
Cela signifie donc que j'ai aussi plusieurs valeurs affiliées à un poste principal.
Je souhaiterai aussi ajouter un bouton qui me permet une fois le poste trouver dans la barre de recherche, d'aller directement sur le champ concerné, ceci-dit je pense pouvoir gérer cette partie.
Je ne sais pas exactement quelle serait la meilleur solution, dois-je déclarer toutes les valeurs dans le code? dois-je créer des listes dans une autre feuille et y faire référence dans le code.
Comme je vous l'ai dis je suis débutant, donc écrire un code pour ces actions est encore trés compliqué pour moi, s'il était possible de m'écrire une ébauche ce serait parfait.
Cordialement
Bonjour Laurent_63 et ...
Tu risques de désespérer un peu plus encore, si tu n'envisages pas de fournir un support pour illustrer tes propos
Je te suggère donc de créer un fichier exemple, reprenant la structure de ton vrai fichier, sans données confidentielles (pas besoin non plus de 30.000 lignes !)
Si tu as plusieurs questions qui s'enchevêtrent, se chevauchent, se chamaillent ou s'échafaudent (en chuintant, le cas échéant), tâche de les disjoindre et donne, pour chacune, des exemples des résultats attendus.
Merci pour votre réponse. J'ai vidé la base mais il reste le plus important, la structure.
Dans le meilleurs des cas je souhaite avoir une liste déroulante de tout mes champs possibles, jusqu'ici pas de soucis ,je souhaite ensuite que lorsque je clique sur un champs de la liste en C2 , ce dernier m'affiche en E2, le compte auquel il appartient.
Dans le fichier j'ai mis le champs téléphone comme exemple en C2, le champs téléphone correspond au compte 625 : frais de déplacement, j'aimerai donc que frais de déplacement s'affiche en E2 si C2 = téléphhone.
Quand il s'agit d'une variable j'arrive à le faire avec un simple IF. Mon problème est que le compte frais de déplacement correspond à plusieurs champs, je dois donc affilier plusieurs variable à cette valeur, car frais de déplacement = "téléphone","carburant", 'missions" etc..
La difficulté ici, est que j'ai beaucoup poste contenant chacun beaucoup de champs et avec mes connaissances en VBA le code risque d'être lourd et avant ça ... faux.
Enfin une fois la recherche réussi je souhaite avec un bouton qui me redirige directement vers le poste correspondant, ici frais de déplacement.
Re-bonjour,
Mais ... en fonction de quoi peut se faire cette associationj'aimerai donc que frais de déplacement s'affiche en E2 si C2 = téléphhone
Pour ce qui est de:
ça implique qu'une seconde liste déroulante doit apparaître, qui te permettra de choisir parmi ces trois possibilités ??Mon problème est que le compte frais de déplacement correspond à plusieurs champs, je dois donc affilier plusieurs variable à cette valeur, car frais de déplacement = "téléphone","carburant", 'missions" etc..
Re-bonjour,
Mais ... en fonction de quoi peut se faire cette associationj'aimerai donc que frais de déplacement s'affiche en E2 si C2 = téléphhone
Pour ce qui est de:
ça implique qu'une seconde liste déroulante doit apparaître, qui te permettra de choisir parmi ces trois possibilités ??Mon problème est que le compte frais de déplacement correspond à plusieurs champs, je dois donc affilier plusieurs variable à cette valeur, car frais de déplacement = "téléphone","carburant", 'missions" etc..
Désolé j'ai du mal à expliquer, je vais essayer de vous l'écrire à peu prés comme j'avais pensé écrire le code juste pour cette exemple.
'nom_compte correspond aux différents choix possibles de sous poste présent dans la liste déroulante (en C2), (liste déroulante que j'aurai au préalable rédigé sur une plage de celulle d'une autre feuille et que j'aurai affilié à C2 via la fonction validation de données'
Ensuite:
définir nom_compte comme texte
affilier nom_compte à la cellule C2
'le sous poste choisis correspond à un poste principal, lorsque l'on clique dessus faire apparaitre le poste principal auquel il appartient, dans la cellule E2'
si nom_compte = "téléphone" ou "carburant" ou "missions" alors afficher "frais de déplacement" dans la celulle E2
Si nom_compte= "confiserie" ou "boisson" alors afficher "achat de marchandises" dans la cellule E2.
etc etc
Ca c'est le résultat que j'aimerai avoir, nom_compte correspond à mes champs qui sont des (sous postes), et frais de déplacement ou achat de marchandises sont des catégories (les postes principaux) auquelles appartiennent les champs.
En gros je vais devoir rentrer tout les paramètres et correlations entre les postes principaux et sous poste manuellement, pour l'instant, il n'y a pas de liens entre eux, je dois les créer, mais je ne sais ni comment faire ni comment le structurer, quelle est la façon optimale de m'y prendre en VBA.
Bonjour,
je me permets de relancer, j'ai réussi à faire ce que je voulais pour ma barre de recherche.
J'ai crée un tableau dans la feuille liste_forme avec tout les postes sur la colonne N et leurs comptes correspondant sur la colonne O, j'ai ensuite fais une liste déroulante par ordre alphabétique en D2 et grâce à une fonction recherche en E2 je peux avoir le compte du poste correspondant.
Jusqu'ici tout va bien, en revanche je n'arrive toujours pas à faire en sorte que le bouton à droite me renvoi à l'emplacement du compte qui apparait dans la cellule E2 (emplacement sur la feuille BD) .
Je réhitère mon exemple, je voudrais par exemple qu'en selectionnant carburant en D2, qui m'affichera donc frais de déplacement en E2, pouvoir aller directement à l'emplacement de ce compte( ER5) sur la feuille BD grâce au bouton positionner en K2.
J'ai placé le fichier en pièce jointe pour que vous puissiez voir par vous-mêmes.
Bonjour,
Avec ton tableau des correspondances, la solution à ta première question est effectivement simple ... juste une question sur la plage à laquelle correspondra le DECALER: tu utilises NBVAL('liste_forme '!$N:$O)-1, soit deux colonnes. La plage fera donc référence à une zone de 215 lignes, alors que ta liste n'en contient que 107.
Par ailleurs, il faudra t'assurer que les noms de comptes sont écrits à l'identique en feuille BD, ligne 3 et en feuille Liste_forme, colonne O. Le premier test que j'ai fait concernait le compte "635 à 637: Autres impôts et taxes". en FJ3, il y a deux espaces après le double point; dans la liste déroulante par contre, le caractère d'espacement est unique, au même endroit.
Dans la liste, colonne O, ce même compte est repris de deux manières différentes également:
635 à 637: autres impôts et taxes et 635 à637: autres impôts et taxes (autres)
Je crains que tu ne puisses faire l'économie d'une plus grande rigueur
Pour autant que les choses correspondent, affecte ce code à ton bouton:
Sub Bouton513_Cliquer()
Dim t As String, compte As String
Dim col As Long
compte = Range("H2").Value
col = Application.Match(compte, Sheets("BD").[3:3], 0)
If IsError(col) Then MsgBox "compte inconnu": Exit Sub
Sheets("BD").Cells(3, col).Activate
End SubMerci pour beaucoup pour ta réponse et ton aide, ceci fonctionne, il faudra en revanche que je fasse correspondre exactement les noms de comptes de la feuille BD et ceux de la liste.
Pour ce qui est de la formule décaler, j'ai suivi un tutoriel vidéo en essayant de l'adapter à mon cas, je souhaitais simplement que mes mises à jours de la liste soient prises en compte sur la feuille "BD". J'avoue ne pas connaitre tout les paramètres, tu me conseil de modifier la formule?
Re,
Si tu n'utilises que des versions d'Excel récentes (2007 et au-delà), tu peux simplement convertir ta plage en Tableau ... celui-ci se redimensionnera automatiquement
> Sélectionner N1:O108 > Insertion > Tableau (vérifier que l'option "mon tableau comporte des en-têtes" est bien cochée) et Valider
Ce tableau est automatiquement nommé ("Tableauxx")
Ta formule en Feuille BD peut dès lors devenir, en H2:
=RECHERCHEV(D2;Tableau3;2;FAUX)... Tableau3 étant à adapter, bien sûr !
J'ai fais la modification, tout fonctionne c'est merveilleux