Evolution d'un UseForm suivant le contenu d'un tableau | ||
---|---|---|
Inscription: 10/08/2009
Messages:
11
Système d'exploitation: PC Version Excel utilisée: 2003 |
Posté le : 10-08-2009 22h01
Bonjour,
Débutant en VBA depuis une petite semaine (mais ayant déjà une petit expérience dans d'autres languages), je me lance actuellement dans la contruction d'un gros fichier Excell pour mon travail. Ce fichier, pour placer le contexte, contiendra de multiples pages référencant des clients, et chaque page contenant une liste des prestations proposées à ce client. Jusqu'à présent j'ai, par l'intermédiaire d'une ComboBox, listé les clients en question et su mettre en relation client et page contenant le tableau des prestations. Je me demande maintenant comment faire pour qu'à partir de cette page, Excell "lise" la liste des prestation présente, et ajoute pour chacune d'elle un "Label" contenant la prestation en question, précédé ou suivi d'une petite "TextBox" où indiquer la quantité choisie pour cette prestation. Ceci donc quel que soit le nombre de prestation proposé pour le client en question. Dans mon exprit la feuille "UseForm" sera donc "evolutive", et changera suivant le client designé dans la première "ComboBox", sachant que chaque client de recoit pas les mêmes prestations. Voile ça fait beaucoup de " " et j'espère ne pas être trop confus dans mes propos, je reste de toute façon scotché au forum dans l'attente d'une réponse ^^ Merci d'avance ! |
|
|
Re: Evolution d'un UseForm suivant le contenu d'un tableau | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 10-08-2009 22h08
Bonsoir et bienvenue à toi dedechseb,
Tu as oublié de joindre ton fichier... Le cas échéant, merci de consulter CE LIEN. Rappel : le fichier (si possible zippé) doit avoir un poids maximum de 80 ko. Cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Evolution d'un UseForm suivant le contenu d'un tableau | ||
---|---|---|
Inscription: 10/08/2009
Messages:
11
Système d'exploitation: PC Version Excel utilisée: 2003 |
Posté le : 10-08-2009 22h13
Re-Bonsoir ,
En fait je n'ai pas joint le fichier car il peut contenir certaines données confidentielles. En revanche je peux peut-être monter un autre fichier "exemple" avec des données bidons afin que vous m'expliquiez la démarche sur celui-ci ? Dans ce cas le temps que je le crée, je le déposerai d'ici une petite heure. |
|
|
Re: Evolution d'un UseForm suivant le contenu d'un tableau | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 10-08-2009 22h23
Re,
Je pense que ce serait préférable oui, afin que nous puissions voir notamment la structure de tes onglets et listes de prestations (sans données confidentielles, cela va de soit). Par ailleurs, je pense qu'il serait aussi intéressant de préciser le nombre maximum de prestations qu'un client pourrait se voir proposer. Je t'avoue que pour un tout débutant VBA, tu attaques un projet d'envergure... Pour moi, t'orienter sur une façon de faire ou une solution possible, pas de problème, mais il va falloir que tu remontes tes manches... Cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Evolution d'un UseForm suivant le contenu d'un tableau | ||
---|---|---|
Inscription: 10/08/2009
Messages:
11
Système d'exploitation: PC Version Excel utilisée: 2003 |
Posté le : 10-08-2009 23h09
Re-à-nouveau ^^
Bon j'ai épuré mon fichier, en laissant la "feuille de saisie" originelle, mais en retirant toute donnée confidentielle. Donc dans cet exemple plusieurs petites choses à dire: -D'une part je ne sais pas pourquoi, mais le menu déroulant des clients qui marchait bien jusqu'à présent a décidé de ne plus afficher les noms... Il y'a le nombre de ligne nécessaire, mais plus les noms sur chaque ligne. - D'autre part, je n'ai encore relié à rien tous les autres boutons, checkbox et autres zones de texte du Useform. je vais m'atteler à cela demain quand je serai en plus grande forme. Il y'a donc juste le strict nécessaire pour réaliser ce que j'aimerai obtenir (non pas par flemme mais je ne savais pas trop quoi remplir). |
|
|
Re: Evolution d'un UseForm suivant le contenu d'un tableau | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 11-08-2009 03h24
Re,
Tu trouveras ci-joint ton fichier modifié pour tenter de répondre à ton souhait... J'ai utilisé le code suivant (dans le module de code du Userform) : Option Explicit Comme tu le verras, j'ai choisi la solution la plus simple : une listbox pour pouvoir afficher simplement un nombre variable d'éléments. La saisie des quantités est ensuite possible par un simple double-clic dans cette liste. Une autre solution aurait consisté à une création dynamique de contrôles TextBox et Labels. Mais, compte tenu de tes débuts VBA, je te déconseille fortement ce type de solution assez délicate à mettre en oeuvre et nécessitant la modification d'un paramètre de sécurité sur chaque poste devant utiliser le classeur... Quelques points si tu le permets et puisque tu débutes avec VBA : Citation : dedechseb a écrit : Cette mauvaise surprise est causée par la propriété RowSource que tu as utilisée pour charger la ComboBox. Si la feuille active est bien la feuille "Données" au moment où tu affiches ton Userform, alors la RowSource "B5:B...." fonctionnera bien, mais si la feuille active n'est pas la bonne, ta RowSource ne pointera plus au bon endroit ! Tu peux normalement contourner ce problème en nommant au préalable ta plage de cellules, puis en affectant le nom de cette plage à la propriété RowSource (en lieu et place de l'adresse de plage). Cela dit, la meilleur méthode consiste tout simplement à proscrire l'utilisation de cette propriété RowSource. Je te conseille de regarder la méthode AddItem en particulier ou même de faire directement comme je l'ai fait dans le code ci-dessus : on affecte directement les valeurs de toute la plage dans la propriété List de la ComboBox. Cela se passe dans le passage suivant : With Sheets("Données") Par ailleurs, je te recommande fortement l'utilisation de Option Explicit placé en tête de module (comme ci-dessus). Voir le cas échéant, l'explication qui en est faite dans l'article VBA et les variables. Si tu as besoin d'explications complémentaires sur le code que j'ai utilisé plus haut, n'hésite pas. Je te laisse reprendre en main ton projet maintenant et te souhaite un bon développement Cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Evolution d'un UseForm suivant le contenu d'un tableau | ||
---|---|---|
Inscription: 10/08/2009
Messages:
11
Système d'exploitation: PC Version Excel utilisée: 2003 |
Posté le : 11-08-2009 08h17
Bonjour,
Ca me parait super, et correspond tout à fait à ce que j'aimerai obtenir. Je vais jetter un oeil au code afin de m'impregner de la logique du système, et essayer de continuer à avancer de mon côté. Je pense que je vais tenir à jour mon fichir privé et cet exemple en parallèle, afin de pouvoir me retourner vers vous en cas de problème. En tout cas merci pour le temps que vous m'avez accordé, je passe le sujet en [résolu] ! Bonne journée, et au plaisir |
|
|
Re: Evolution d'un UseForm suivant le contenu d'un tableau | ||
---|---|---|
Inscription: 10/08/2009
Messages:
11
Système d'exploitation: PC Version Excel utilisée: 2003 |
Posté le : 11-08-2009 18h12
Bonsoir,
Je reviens à la charge avec mon sujet, qui a légèrement évolué depuis hier soir. J'ai plutôt bien saisi les manipulations faites, les commentaires aidant bien. Voilà, aujourd'hui où j'en suis : - J'ai donc différents Clients, et pour chaque Client une page lui correspondant avec les différentes prestations proposées. Chaque prestation correspondant à une catégorie : Fournitures, Informatique, Alimentation ... |
|
|
Re: Evolution d'un UseForm suivant le contenu d'un tableau | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 11-08-2009 20h36
Bonsoir dedechseb,
Ci-joint une façon de faire pour ta liste de prestations filtrée en fonction des CheckBox. J'ai ajouté le code suivant à ton Userform (en remplacement de ton code) : Private Sub Alimentation_Click() Citation : dedechseb a écrit : Si ce n'est pas le cas, alors comment va se présenter cet onglet Données dans de tels cas ? Ou bien alors, tu veux laisser la possibilité d'en choisir un autre dans le Userform, mais dans ce cas, il manque une table de l'ensemble des Chargés de Rel. Client quelque part... Citation : dedechseb a écrit : Voilà donc pour mes questions du jour ^^ Bien cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Evolution d'un UseForm suivant le contenu d'un tableau | ||
---|---|---|
Inscription: 10/08/2009
Messages:
11
Système d'exploitation: PC Version Excel utilisée: 2003 |
Posté le : 11-08-2009 21h07
Re-Bonsoir,
Effectivement je n'ai pas été forcément très clair concernant ma deuxième remarque. En effet chaque Client "possède" sa propre Chargée de Relation. Le truc c'est que parfois elle s'échangent ponctuellement les Clients, donc même si elles restent l'interlocutrice personnelle d'un client, d'autres sont parfois amenées à les remplacer pour certaines affaires. Je cherchait en fait à faire en sorte que la ComboBox affiche par défaut la Chargée de Relation indiquée dans la liste, et permette de choisir tout de même une autre personne dans le menu déroulant. J'ai réalisé quelque chose qui marche, bien que je ne l'ai pas mis sur ce fichier, en suivant la forme suivante : -la procédure compare la valeur de la ComboBox "Enseigne" avec la liste des clients. Lorsque Enseigne.Value = Range(xxxx).Value, alors la ComboBox affiche la chargée de la relation client désignée. - ensuite c'est un entassement de "If" par rapport à un petit tableau regroupant les chargées de la Relation afin de comparer pour chacune si elle est l'Interlocutrice affichée dans la ComboBox. Si non, alors un AddItem ajoute son nom à la liste de la ComboBox. C'est un procédé assez lourd en écriture et pas forcément très "optimisé" au niveau programation ^^, je voulais donc avoir votre vision de la chose afin de comparer les logiques et épurer mes lignes de code. Voilà j'espère à nouveau ne pas avoir été trop confus dans mes explications ^^. J'aurai aussi aimé savoir ou est ce que je peux trouver des explication sur les différentes propriété que vous utilisez tels que les .Rows, les .Count, les .ListCount .... Car visiblement leur bonne utilisation est une des cléf d'une programation efficace. Bonne soirée ! |
|
|