VBA - Requête - obtenir/afficher une liste de résultats

Bonjour à tous,

Étant débutant en language VBA, j'ai consulté quelques tutos pour construire un formulaire qui pourrait répondre à mon besoin.

Je suis développeur de "systèmes" industriels qui proposent des accessoires que l'on va appeler "composants".

J'ai construit une base de données dans laquelle on retrouve différentes colonnes :

  • Famille de système : GROS, MOYEN et PETIT systèmes
  • Système (plusieurs systèmes peuvent être inclus dans une même famille de système)
Ensuite, dans chaque système nous avons des composants, on retrouve donc également les colonnes suivantes dans ma base de données :
  • Famille de composant
  • Composant (plusieurs composant peuvent être inclus dans une même système & un même composant peut être utilisé dans des systèmes différents)
  • Référence composant (par facilité, j'ai considérer les éléments "systèmes" comme des composants, dont la famille est "0 - système unique")
  • Description du composant
  • Optionnel ou Requis (un composant, accessoire peut être optionnel ou requis, tout dépend de la demande client)
  • Quantité (il se peut qu'un accessoire soit utilisé 2, 3, 4... fois dans un même système)
  • Coût (unitaire, du composant/accessoire)
  • Prix (unitaire, du composant/accessoire)

Mon besoin :

  • Si je sélectionne, une famille de système, je voudrais que TOUS les systèmes s'affichent, SANS doublons
  • Si je sélectionne un système, je veux obtenir toutes les informations relatives aux composants qui sont proposés (Famille du composant, Nom du composant, Référence, Description, Optionnel/requis, prix & coût)
  • Si je sélectionne un composant, je veux savoir dans quel(s) système(s) il est intégrer
  • Pouvoir ajouter une nouvelle ligne d'informations ==> J'AI RÉUSSI A EFFECTUER CETTE TÂCHE GRÂCE A MON FORMULAIRE

Est-ce que quelqu'un connait la solution et pourrait m'aider : c'est à dire comment afficher une liste de résultat (sans afficher les doublons) et non des résultats uniques ?

Pour illustrer mon besoin : mon formulaire ainsi que ma base de données se retrouvent ci-joints.

Merci d'avance pour votre aide,

Saber

48test.xlsm (34.56 Ko)

bonsoir,

Je vais me pencher un peu sur la question cependant je voudrais une confirmation :

La colonne A est-elle utile ? Comporte-t-elle des données relatives à la Base de donnée ?

Ne sachant pas, j'en ai profiter pour l'utiliser et créer un index. Merci de confirmer si c'est possible ou si au vrai elle est déjà utilisée...

Remarque : Une base de donnée sans index est une jambe de bois sans cul de jatte !

J'ai aussi quelque inquiétudes à propos de ce qui n'est pas dit (ou caché...)

Pour la bonne conduite du projet il semble très préférable que la feuille ne comporte que la Base de donnée (pas de colonnes parasites)

Je partirai donc bien sur une construction comme dans le fichier joint.

Est-ce Ok ?

Notez que dans le classeur joint les Combo ont été modifiés pour n'afficher que des valeurs uniques.

ça n'est pas tout à fait satisfaisant encore car en fait ils devraient fonctionner en cascade : Tout choix dans Combo 1 devrait afficher dans Combo 2 la ou les valeurs uniques correspondant à Combo1 ( et vice-versa)

in fine, comme votre formulaire est conçu, le choix de la recherche devrait conduire le formulaire à afficher une ligne unique, ce qui ne me parait loin d'être gagné d'avance... Vous devez donc vous attendre à une modification substantielle du formulaire...

A+

68sabercha-vg1.xlsm (29.26 Ko)

Bonjour Galopin01,

Je viens de lire ta réponse et consulter ton fichier :

1 - Effectivement la colonne A n'est pas utile. Je comprend l'intérêt d'y placer un index, bien joué !

2 - De quelles informations cachées parles-tu ? Toutes les informations sont référencées dans ma BDD.

3 - Dans mon fichier, hormis la colonne A, qui ne servait à "rien", toutes les autres colonnes sont correctement remplies. Je ne vois pas de quels éléments "parasites" tu parles. Peux-tu m'en dire plus ?

4 - Effectivement, mon besoin serait d'afficher une liste d'accessoires (plus informations : prix, quantités, O/R...) pour 1 système consulté, et inversement. Comment pourrais-je obtenir une liste ou plutôt un tableau à la place d'une valeur unique dans mon formulaire ?

Si je prend l'exemple du composant C-3 qui se retrouve à la fois dans le système S-4 et S-15, je n'obtiens uniquement le système S-15 lors de la consultation dans mon formulaire. Hors j'aimerai obtenir 2 lignes (ou plus si le composant se retrouve dans plusieurs systèmes) dans mon formulaire. Est-ce possible ?

Merci beaucoup pour ton aide,

Saber

bonjour,

Bien noté pour les points 1 à 3.

A quoi je pensais. Heu... Rien de spécial ! Je voulais juste m'assurer dès le départ qu'on avait bien quelque chose qui ressemble à une BD et pas une feuille remplie d'éléments hétéroclites... Les débutants ont parfois de ces idées !

Une solution à ton problème s'appelle Listview. C'est un composant disponibles pour les USF et capable de te renvoyer à partir d'un ou plusieurs combos (ou d'un filtre) tout ou partie d'une BD.

En pièce jointe une petite démo de Lisview (il apparaît quand on clique -colonne 1- sur la BD)

Ce n'est qu'une petite démo simple hein... et il ne fait que la recherche suppression.

Le mode ajout se fait en cliquant sous la BD (toujours colonne 1)

In fine on peut tout faire sur le ListView (Recherche/Modification/Tri/Suppression) Tout dépend de l'expérience et du temps qu'on peut y consacrer...

Le deuxième fichier (W_Synthèse...) est beaucoup plus complet.

Comme tu peux le constater, dans ce fichier l'utilisateur ne peut accéder aux feuilles qui ne peuvent être manipulés qu'au moyen du USF d'accueil. les onglets et le menu Excel sont inhibés. L'utilisateur ne peux procéder qu'aux intervention prévues dans le USF Accueil.

A noter que ce USF est un peu protéiforme les boutons peuvent changer suivant le contexte...

Pour les besoins de la programmation j'ai laissé une porte dérobée : En cliquant sur le mot "Acceuil" du USF, cela permet de fermer le USF pour examiner le code VBA... et éventuellement les feuilles... Cela permet également de quitter le programme sans sauvegarde (en cliquant sur la croix de fermeture d'Excel.

Si l'on quitte au moyen du menu d'accueil le fichier est sauvegardé automatiquement.

Je regarde ton fichier pour voir si je peu avancer un peu dans cet idée et je reviens...

A+

72demolistview-v1.zip (53.08 Ko)

Re Galopin01,

Je n'arrive malheureusement pas à piloter les 2 fichiers ci-dessus.

Cependant, j'ai compris le principe de l'USF et ça à tout à fait l'air de répondre à ma problématique !

Je vais lire en détail les informations du lien que tu as partagé, ça à l'air compliqué... mais très intéressant.

Merci beaucoup pour ton aide et si tu parviens illustrer avec exemple de formulaire qui pourrait correspondre à ma BDD je t'en serai très reconnaissant.

A très bientôt,

Saber

Re

C'est bizarre, ils ont pourtant tous les deux été montés et testé sous 2010...

Je sais qu'il est parfois difficile de les ouvrir directement à partir du lien de téléchargement.

Les fichiers étant maintenant téléchargés et placés dans ton répertoire Excel, as-tu essayé de les ouvrir directement depuis Excel.

Quel est le message d'erreur ?

EDIT : (21h00)

J'avance tout doucement. En voulant unitialiser mon Listview j'ai remarqué que les champs Référence/Cout colonne D et E faisait doublon avec les colonnes I et L. Je me propose de les supprimer. Je suppose que ça ne pose pas de problème ,

A+

Coucou !

Grasse mat ? ou RTT ?

J'ai gratté un peu sur ton sujet. Je n'en suis qu'aux préliminaires. J'ai mis en forme le USF de telle sorte qu'il soit opérationnel.

Après YAPUKA faire vivre les boutons...

Nota : Ce fichier est bâti sur le même concept que le W_Synthèse d'hier qui lui est parfaitement finalisé. (pratiquement 3 mois de travail à 2...) Tu devrais vraiment gratter dessus pour t'en inspirer.

Après sur le concept (Tout via l'interface et zéro intervention de l'utilisateur directement sur les feuilles) ça se négocie bien sur... Mébon c'est quand même très confortable !

Bon WE

A+

46sabercha-vg4.xlsm (42.81 Ko)

Hello Galopin !

Ni grasse mat', ni RTT, pas de vacances pour les vrais gars :

Excuse moi de n'être revenu plus tôt, je suis un peu occupé avec la préparation d'un salon assez urgent.

1- Je ne me souvient plus exactement du message d'erreur qui était affiché, mais il ressemblait à quelque-chose comme :

"impossible de charger l'objet non présent sur votre machine" et cela donnait lieu à un "débogage". N'étant (pas encore) expert en languauge VBA j'ai eu du mal à identifier l'origine du problème.

Je regarde ton fichier en fin d'après-midi, je suis actuellement sur Mac, avec le logiciel Numbers qui ne reconnait malheureusement pas le langage VBA.

Énorme merci pour tes informations et ta précieuse aide, je reviens vers toi aussi vite que j'aurai consulté ton fichier.

Saber


Re,

je viens d'ouvrir ton fichier sur le PC d'un collègue.

Dès l'ouverture, voici ce que j'ai :

capture

erreur d'exectution '424' après cliquer sur le bouton "Accueil"

Je suis donc invité à "déboguer" :

Voici ce que j'ai :

capture2

Il me semble avoir eu un problème assez similaire avec le précédent fichier que tu m'invitais à consulter.

Comment faire pour découvrir le fruit de ton aide ?

Merci d'avance,

Saber

galopin01 a écrit :

bonjour,

Bien noté pour les points 1 à 3.

Je te donne un lien de documentation sur ce composant que tu devras ajouter dans ta boite à outils d'USF (clic droit sur la boite à outils + contrôles supplémentaires). Chez moi c'est Microsoft ListView Control v 6.0...

instalctrlsuplistview

C'est bon ?

A+

J'ai ajouté l'outil, mais ça ne fonctionne toujours pas

Dans le menu VBA :

Outils > Référence

...regarde s'il n'y en a pas une qui est déclarée manquante...

Par hasard Microsoft Office ou Microsoft Excel 14.0 Object Library moi j'ai la 14.0 tu as peut-être une version plus récente...

Décocher (la/les) référence(s) déclarée(s) manquante(s).

ça devrai suffire...

Les autres participant au Forum pourraient-il confirmer qu'ils arrivent bien à ouvrir et utiliser ces fichiers SVP.

Edit : J'ai déjà confirmation que ces fichiers fonctionnent normalement.

Ok ?

bonsoir,

Pour pouvoir continuer et coder les boutons "Rechercher" et "Ajouter" (c'est pas de tout repos...)

1 - J'ai besoin de la confirmation de la structure que j'ai adopté (11 colonnes seulement) et les critères de recherche sur les 2 combos uniquement. En fait pour le "Rechercher" un seul Combo me parait bien suffisant compte tenu du très petit nombre de Familles système. (On peut coder la recherche sur 1 combo + 1 ou plusieurs TextBox bien plus facilement semble-t-il)

2 - En fait je me demande aussi si le 11ème champs à une raison d'être en tant que formulé. Est-ce qu'on ne peut pas le remplir "en dur" sachant que le userform sait très bien faire la multiplication et qu'on peut très bien avoir envie de le modifier...

3 - De la même manière j'ai inscrit "En dur" les Descriptions toujours avec la même idée que le USF est très capable de faire une suggestion sur la base de tes formules, Et que de toute façon, un peut très bien avoir envie d'en changer par la suite... En plus de toute façon un champs calculé dans cette colonne ne peux satisfaire à 2 formules différentes. C'est pas compatible avec une BD...

3 réponses requises donc si tu veux que je continue ! Faire un petit brin d'analyse avant de répondre SVP parce que in fine si je n'y arrive pas ce sera à toi de te débrouiller avec tes choix...

En attendant je vais me pencher sur "Supprimer" et "Modifier" qui sont infiniment plus simples...

A+

Bonjour Galopin01,

J'ai ajouté le module complémentaire ListView 6.0

J'ai également observé qu'il n'y avait aucune référence manquante :

capture

J'ai toujours le même message d'erreur qui s'affiche.

Pour répondre à ton deuxième post :

1 - La structure à 11 colonnes me convient très bien.

2 - Ceci est un fichier test, il ne faudra donc pas supprimer la 11ème colonne. Pour cette dernière colonne, la multiplication m'a seulement servie à obtenir un prix. Dans ma vraie base de données (confidentielle, d'où l’intérêt de travailler avec un fichier test) les prix renseignés sont des valeurs numériques et non une formule.

Je n'arrive toujours pas à faire fonctionner le fichier, c'est embêtant !

Merci d'avance pour ton aide,

A ta dispo,

Saber

Bonjour,

Désolé, là je ne peux rien pour toi...

Il faut trouver un PC qui accepte mon fichier. Apparemment nous avons la même config et depuis 15 ans, j'ai passé plusieurs milliers de classeur sur de nombreux forums sans problème. Donc il n'y a pas de raisons pour que ceux la résistent.

Je te met l'état actuel de ma réflexion sur ton fichier (en pièce jointe.

C'est à peu près finalisé, mais on peut encore ajouter des tas de choses.

Je ne dis pas qu'il n'y a pas quelques bogues à éliminer... mais pour l'essentiel tu as les fonctions principales...

Il faudra surement que tu retravailles sur tes familles de composants. Le "espace /tiret/espace" est vraiment chiant et source de bug de saisie... Peut être simplement inhiber le caractère espace sur ce champ ? (Dans le Key_Press)

Bon courage.

Confirme moi quand même quand tu auras réussi à ouvrir !

Avec le fichier démo (W_Synthèse) + la V42 tu as toutes les ficelles pour développer à donf...

A+

25sabercha-vg42.xlsm (48.03 Ko)

Hello,

Dans ton nouveau fichier j'ai une erreur différente. J'ai pourtant fait tout ce que tu m'as demandé... je n'y comprends rien !!

Je suis tellement dég de ne pas pouvoir lire ton fichier et apprécier le fruit de ton travail !

En tout cas, merci beaucoup pour ton aide.

En espérant trouver une solution ^^

Saber

Bonsoir,

Ne pas ouvrir le fichier dans le répertoire de téléchargement mais dans ton répertoire de travail Excel.

Si erreur fournir le libellé de l'erreur et accepter le débogae.

Si possible essayer d'aller plus loin que le point d'arrêt avec F8 ,F8 ,F8... jusqu'à trouver le point d'erreur exact.

En désespoir de cause tu peux toujours regarder ce qu'il y a dans les fichiers en ouvrant les fichiers sans activer les macros.

(Appuyer sur la touche Maj auparavant ) tout en cliquant sur le fichier.

C'est pas top mais au moins tu pourras disséquer le contenu...

J'ai oublié : Ce n'est pas ça qui produit une erreur, mais tu peux supprimer les 2 dernières lignes du Workbook_Open elle me servent à versionner un peu mes copies de sauvegarde...

Bon courage !

[EDIT] En pièce jointe la version 42 (même version mais quelques bugs mineures corrigés)

A+

41sabercha-vg42.xlsm (48.14 Ko)
Rechercher des sujets similaires à "vba requete obtenir afficher liste resultats"