Userform + creation de réference (VBA expert)

Bonjour à tous,

Je sèche particulierement sur un projet que j'ai pour créer un devis/bon de commande, facture.

J'explique brièvement

Mon catalogue possède une quinzaine de gammes, qui chacune sont composées de tantôt 20 références, tantôt 250.

Je souhaiterai avoir une page d'accueil bon de commande ou facture ou devis à sélectionner qui comprendrai un résumé de l'article choisi, à savoir uniquement gamme, modèle, puissance, et surtout référence sans parler de prix bien entendu.

Le tout est que pour chaque gamme les données techniques sont totalement différentes donc tout centraliser sur le bon de commande ne colle pas...

J'aimerai (si possible) arriver à une touche + (macro) qui ajoute une ligne dans mon bon de commande, et qui ouvre un userform qui selon le choix de la gamme se modifie en fonction des criteres disponible dans cette gamme.

De plus si possible génère automatiquement la reference qui est en réalité une simple abréviation ou un code de 2 ou 3 lettres ou chiffres correspondant aux critères sélectionnés.

J'espere que c'est assez clair pour etre compris, mais surtout réalisable car la je seche un peu même completement car le VBA et moi ca fait 4...

Ci-joint le fichier avec une gamme d'exemple (Jade) qui comprend déja des différences aux niveaux des choix disponibles de modèles...

84led-test.xlsx (83.73 Ko)

Y a t il une bonne ame ici qui pourra m'aider dans ce projet d'envergure pour moi....

Je vous remercie grandement d'avance de l'aide que je pourrai recevoir...

Si tu fais un combobox avec le critère Change tu peux pas faire ton userform dynamique?

Du genre:

Private Sub ComboBox1_Change()

If ComboBox1.Value = xxxxx Then spécifier les trucs spécifiques à afficher

End Sub

Je dois t'avouer que sur la seule ligne de réponse il y a déja 9 trucs que j'ai pas compris mdr....

Il faut m'expliquer comme si j'avais 5 ans car là je suis plus que débutant en VBA et macro....

Mais déjà merci de ta patience et de ta rapidité de réponse

Bon alors quand tu crée un userform dans visual basic pour excel, il t'affiche un UserForm1 vierge.

Pour le personnaliser tu as des outils comme des combobox (qui sont des menus déroulants), des textbox (qui sont des champs libres), des CommandButton (qui sont des boutons à appuyer), des radio ou checkbox (qui sont des cases à cocher) et encore plein d'autres choses mais c'est les principaux.

Déjà pour appeler ton userform dans une macro il te suffit d'ajouter une ligne dans un module

Userform1.Show (ou le nom de ton userform si tu l'a personnalisé.)

Ceci permettra à l'execution de la macro de lancer ton userform (un bon début).

Pour aller programmer l'userform en lui même, il te faut double cliquer dessus (dans visual basic).

Par défaut quand tu double clique dans la trame de ton userform, le code de l'userform s'ouvre en t'affichant:

Private Sub UserForm_Click()

End Sub

Le code entre les balises permettra d'effectuer une action si l'utilisateurclique sur l'userform (ce qui n'a pas beaucoup d'intérêt)

Je te conseille si tu veux utiliser des combobox par la suite de changer le click en Initialize qui va permettre de lancer un code directement à l'ouverture de ton userform ce qui va te permettre d'alimenter ta combobox.

Ensuite il faut que tu ajoutes une combobox dans laquelle tu liste tes différentes gammes.

Pour ajouter une entrée à une combobox tu peux utiliser la fonction:

Combobox1.AddItem "tonitem" que tu dois ajouter entre les balises précédentes.

Dans le cas où tu as plusieurs items à ajouter il faut ajouter des lignes. (Sauf si tu as tes gammes dans une liste sur une de tes feuilles dans ce cas il y a une solution avec un Loop)

Une fois ta combobox créée, ajoute les balises suivantes à ton code (la même page que là où est indiqué Userform_Initialize)

Private Sub ComboBox1_Change()

End Sub

Elles te permettent de spécifier qu'est-ce qui doit être effectué si le contenu de la combobox change (en gros si tu changes de gamme)

Par exemple tu peux lui demander si la gamme "XXX" est séléctionner, alors ajouter un Item dans la combobox2

If Combobox1.Value = "XXX" Then Combobox2.Additem "WWW" and Combobox2.Additem "YYY"

Donc au moment où l'utilisateur séléctionne XXX dans la liste déroulante 1, la liste déroulante 2 permettra de choisir les valeurs WWW ou YYY. Par contre si l'utilisateur ne séléctionne pas XXX dans la liste déroulante 1, rien s'apparaitra dans la liste déroulante 2.

De cette façon tu peux créer une dépendance de tes combobox en fonction de leur valeur.

Après évidemment il faut adapter à ton modèle et surtout ajouter des boutons OK ou Annuler etc... mais la base est là.

Par contre je n'ai pas trop bien compris ton fichier exemple...

Je me permet de te revenir avec l'évolution des choses et une explication sur la suite...

J'ai créé le userform, la combobox1 et ajouter mes gammes.

Pour la suite si tu clique sur les onglets gammes (jade, topaze, etc...) tu trouveras un espece de tableau reprenant les possibilité dans cette gamme.

exemple gamme jade on trouve 2 possibilités G65 ou G60 ou G70 qui serait les 3 choix de ma combobox2 si je selectionne Jade dans la combobox1.

Ensuite si on sélectionne par exemple G60 il devrait me proposer dans la combobox3 E14 ou E27, ensuite combobox 4 6,5W ou 10W, ensuite combobox 5 Blanc chaud, froid ou neutre, pour cette arborescence la on est au bout et on peut determiner par la suite la maniere d'obtenir la reference correspondante dans le bon de commande.

Par contre pour le G65 soit l arborescence va etre bcp plus longue ou du fait qu'on a pas de choix avant les deux derniers on peut peut etre prendre un raccourci...

Ci-joint le fichier actuel en l état d'avancement du moment...

34led-test.xlsm (59.37 Ko)

Et merci de ton aide extrêmement précieuse...

Alors pour te montrer l'exemple, je t'ai fait la programmation de la combobox 2.

Va bien voir dans le code de l'userform tout est expliqué.

A mon avis il faut redesigner les données des gammes dans leur feuilles respectives pour arriver à automatiser. (je l'ai fait pour les choix de la combobox 2)

C'est super j'ai quasi tout compris, la seule question est pour la combobox 3 je refais pareil que tes lignes de commandes, jusque là je suis... Le seul souci que je vais rencontrer c'est que en fonction des modeles choisis les arguments changent (exemple Jade 65 choix de deux couleurs, 60 et 70 3 couleurs sont dispos... si je redesigne le choix comme tu l'as fait je vais creer des references impossible...)

Dois je mettre une condition sur la combobox 3 genre si combobox2=65;2 couleurs;""?

Si oui comment traduire 2 conditions en langage VBA? si combobox2=65;... si combobox2=60 ou 70;...

Désolé d'être aussi nul mdr... mais jusqu'ici tu as été mon sauveur....

Je t'ai pas oublié je me penche sur la question et je t'envoie un fichier exemple dans la journée

Voilà, après une petite réorganisation des données on peut arriver à quelque chose.

J'ai pas fait toutes les gammes parce que c'était trop long mais il y a la plupart.

Regarde bien le code pour comprendre ce que j'ai fait et l'adapter à tes données réelles.

Après il reste à coder l'enregistrement dans la feuille de bon de commande évidemment.

Tu verra les menus se mettre à jour les uns en fonction des autres. C'est pas super esthétique je l'admet mais ça marche ^^

Pas très beau honnetement pas grave mais j'ai un soucis lorsque je lance la macro je choisis Jade, G60, il me met un message d'erreur

Erreur de compilation: argument nommé introuvable...

J ai bien saisi le format pour la trame dans les onglets gammes que je vais modifier sans soucis mais par contre au niveau VBA je n'ai pas encore regardé du fait de ce code erreur.

Mais en tout cas un énorme merci pour le travail déjà accompli c'est plus que ce à quoi je m'attendais...

Réessaye voir avec ce fichier:

pareil...

ci-joint la capture d écran...

capture d ecran 2013 04 17 a 12 05 21 capture d ecran 2013 04 17 a 12 05 49

Hmm... C'est bizarre moi j'ai pas ce souci là sur aucun de mes pc.

Peut-être la version mac d'office qui est un peu différente.

Quand tu ouvres le débug il te mets quelle ligne du code en erreur?

Edit: Je viens de regarder sur le net visiblement ça peut être un problème de version excel. Je vais essayer de régler ça.

Essaye voir avec celui-ci:

Si ce fichier là marche pas je coince :

C est magnifique je viens de tester et là ca fonctionne au poil...

Question subsidiaire si je rajoute des gammes, est ce que cela se fait automatiquement ou dois-je les ajouter qqpart si ce n'est dans la liste des gammes du VBA...

En gros de ce que je vois ici le fichier est quasi terminé il me reste à trouver la maniere d'implanter ca dans le bon de commande et creer les references...

Par contre si je peux encore t'embeter pour une chose après je te promet je me debrouille ou j embete qqun d autre sur un nouveau post pour la suite car tu as deja été plus qu'exceptionnel dans ton aide et je ne veux pas abuser de ta bonté, pense tu qu'il est possible en fonction des deux premier choix fait gamme et modèle de remplir automatiquement combobox ou il n'y a pas de choix possible... en somme si je n ai pas de choix seul une possibilité qu'elle s'affiche par défaut dans la combobox?

Merci encore...

ci joint le fichier corrigé avec les gammes corrigées.

11led-test-ok.xlsm (55.66 Ko)

Ouep c'est possible.

Je te fais ça ce soir comme j'ai pas trop le temps cet aprèm.

on peut faire en sorte que si un seul choix est possible la combobox soit remplie de la valeur et grisée pour empecher la sélection.

J'ai aussi quelques améliorations esthétiques a amener.

Voilà un résultat un peu plus esthétique

Avec les trucs qui se remplissent automatiquement quand il n'y a qu'un choix.

Si tu rajoutes des gammes il faut les ajouter au VBA. (attention il faut que le libellé de la gamme soit repris exactement dans un nom de feuille.)

Si tu veux ajouter des choix principaux (combobox2) il faut les ajouter dans la liste à la suite en veillant bien de laisser une case vide avant les tableaux des caractéristiques.

Quand tu ajoutes un nouveau choix principal, il ne faut pas oublier de créer le tableau correspondant à la suite des autres.

En ce qui concerne les libellé des choix je te conseille de choisir des libellé explicites pour éviter les erreurs avec la fonction Find.

Pour tes références le mieux c'est de créer une table de correspondance caractéristique/référence qui va te permettre de relier la valeur de chaque combobox à une référence pour concaténer le tout par la suite.

Par contre les références sont souvent un truc standard et étant donné la variabilité de ton nombre de caractéristiques ça me parait difficile de faire une référence standard a moins que ce soit pas nécessaire qu'elle fasse pas toujours la même longueur par exemple.

C'est magnifique comme ce projet avance à une vitesse incroyable pour finir grâce à toi je risque d'avoir fini dans les temps...

J'ai tout pigé pour les nouvelles gammes je pense, je ferai l'essai demain matin mais ça doit bien se passer...

En ce qui concerne les références je crois que je vois ce que tu veux dire mais il est vrai qu'elles ne font pas toutes la même taille donc compliqué... je vais me pencher sur le sujet demain de la journée pour créer un tableau de ref sur un onglet supplémentaire, elles sont déjà reprise sur chaque onglet dans l'ancienne mise en forme... qui correspond avec la ref...

Par contre ce que je ne t'ai pas demandé c'est si il y a moyen d'indiquer le prix dans le userform (bien en évidence après choix multiple) en sachant que le prix ne varie pas en fonction des couleurs et angles mais bien juste des puissances ou modèles.... ou puis je mettre les prix dans l'onglet gamme pour avoir une relation avec la combobox?

Question subsidiaire: Puis je modifier le nom du userform sans impacter sur tes codes VBA?(j aimerai qu'il n'y ai pas de titre au dessus de la fenêtre lors de l ouverture) et puis je modifier l'aspect de ce userform (police, taille de police, centrage, etc...) toujours sans impacter le VBA actuel?

J ai de quoi faire je pense, après je t'embêterai encore (si tu le veux bien, bien évidemment) pour concatener les ref, et lier le tout avec le bon de commande... La partie formule du bonco je peux le faire (les bases excel ça ça va...lol) par contre pour lier la ref déterminée par le userform, le prix, la gamme, et une description que je dois encore déterminer...

Merci en tout cas du boulot de fou que tu as déjà fait pour moi....

Content que ton projet avance.

Par contre je viens de jeter un regard sur les refs de tes gammes.

Elles sont pas cohérentes, on peut pas faire grand chose dans ce cas.

Par exemple une fois le blanc chaud est codé C et une autre fois 830. On peut difficilement faire une table de correspondance dans ce cas.

Un truc aussi pour les puissances de lampe et de LED, les deux codées en Watts l'une 8W se transforme en 8 et l'autre en 8W donc pour la correspondance c'est pas top.

Essaye peut être de réfléchir à une logique qui te permet à toi, en jetant un regard à la référence de savoir presque directement le produit commandé. Je pense déjà que le type de gamme devrait être codé dans la référence.

Concernant les prix, à partir du moment où les références sont harmonisées, c'est tout à fait possible de les ajouter à droite des combobox (en même temps que la référence d'ailleurs).

Si le prix peut se calculer en fonction de la référence alors il sera facile de le déterminer.

Super je travaille à ça ce matin, et me permettrai de revenir avec une avancée sur ces sujets...

Merci a toi

Rechercher des sujets similaires à "userform creation reference vba expert"