Faire apparaitre les valeurs de la liste d'un combo/text box directeme - VB/VBA/VBS - Programmation
Marsh Posté le 10-12-2014 à 15:55:49
Bonjour,
question posée dans combien de forums ?‼
Commencer par lire les règles du forum puis éditer le post pour baliser le code via l'icône dédiée …
Marsh Posté le 10-12-2014 à 16:37:32
Désolé je ne me rappelais plus de cela. je cherchais à joindre le code par fichier alors qu'il fallait le "baliser".
Est ce plus acceptable du coup ?
Merci pour votre réponse
Marsh Posté le 10-12-2014 à 21:35:41
C'est clair que dans le code il est clairement demandé de mettre à jour le ComboBox lors du Click sur l'Userform !
A déplacer donc dans son initialisation …
Marsh Posté le 11-12-2014 à 02:38:32
Bonsoir Marc L,
Tout d'abord, merci d'avoir répondu à mon probleme.
Ensuite, pourriez vous me dire dans quelle partie du code se trouvent les termes qui indiquent la mise à jour au moment du clic ?
Et que veut dire "déplacer donc dans son initialisation".
En vous remerciant.
Marsh Posté le 11-12-2014 à 09:50:19
Rien qu'en lisant le code il y a bien une procédure Click et une procédure Initialize liées à l'Userform, non ?‼
Marsh Posté le 11-12-2014 à 10:08:44
Marc L,
J'ai changé dans le code le code (ligne 36) "Private Sub UserForm_Click()"
par le code : "Private Sub UserForm_Activate()".
Du coup, j'ai bien les valeurs des menus deroulants qui apparaissent dès l'ouverture du formulaire. En revanche, les valeurs ne se copient plus dans l'onglet "Données" comme auparavant.
Avez vous une piste sur la raison ?
merci à vous.
yannick
Marsh Posté le 11-12-2014 à 10:13:17
En essayant le mot "Initialize" à la place de "Activate", il n'y a plus de valeurs dans le menu déroulant et on ne peut saisir le formulaire ^^.
Marsh Posté le 11-12-2014 à 13:02:39
En fait comme le code est mal écrit (lignes inutiles et d'autres incomplètes au niveau du rattachement des cellules par exemple),
tel quel, la feuille de calculs "Données" devrait être celle active pour que cela fonctionne.
Exemple : Sheets("Données" ).Range(Cells(2, 1), Cells(18, 1)) = ComboBox19.Value
Les cellules ont l'air d'être rattachées à la feuille mais en fait non car comme rien n'est précisé devant, c'est donc la feuille active !
Exemple de correction : With Sheets("Données" ): .Range(.Cells(2, 1), .Cells(18, 1)).Value = ComboBox19.Value: End With
Marsh Posté le 11-12-2014 à 14:55:52
J'avoue que j'ai pas assuré. car je savais qu'il fallait etre dans une feuille pour faire une opération dedans, d'où le "With sheets".
En revanche, en utilisant le code :
With Sheets("Données" ): .Range(.Cells(2, 1), .Cells(18, 1)).Value = ComboBox19.Value: End With
Il ne se passe toujours rien dans la plage en question. La macro n'a pas l'air de vouloir ecrire la valeur dans la feuille.
Bizarrement, quand j'etais en mode "36.Private Sub UserForm_Click()" les valeurs s'affichaient dans la feuille, mais j'avais pas les menus deroulants à l'ouverture sans clic ...
Dois je adapter quelquechose pour qu'il veuille bien m'afficher les valeurs ? (bien entendu je cherche dans le meme temps, meme si vous m'apporter votre aide).
Merci encore
Marsh Posté le 11-12-2014 à 18:40:55
Je ne vois pas car cela m'est déjà arrivé de basculer du code d'un Click à un Initialize sans souci.
Espérons sur l'autre forum avec la pièce jointe un intervenant puisse trouver …
Marsh Posté le 11-12-2014 à 22:20:49
Pour passer du mode click à Initialize, il faut seulement remplacer le mot par l'autre ?
Ca se trouve c'est cela le probleme. Et savez vous ce qu'est un user form modal ou non modal ? Car en utilisant "Activate", j'ai les menu mais pas la copie.
Marsh Posté le 12-12-2014 à 15:17:14
Le mieux est de déplacer les lignes de code d'une procédure à une autre …
Par défaut un objet UserForm est modal : VBA attend sa fermeture pour poursuivre l'exécution du code principal
comme expliqué dans l'aide VBA intégrée concernant sa méthode Show …
Marsh Posté le 12-12-2014 à 15:25:32
Merci beaucoup.
Concretement il faut que je sépare le code des textBOX et ComboBox des copies et celui ou je demande la copie des éléments dans la feuille "Données"?
Pouvez vous juste me dire dans les deux cas, dans quelle procedure je dois intégrer les deux codes ? c'est à dire Userform Activate ou Initialize ou alors une sub classique ... c'est surtout la que je peche.
En vous remerciant.
Yannick
Marsh Posté le 12-12-2014 à 15:53:51
En fait je n'en sais rien car c'est selon le contexte et le besoin …
Quand j'ai un doute je pars de zéro, c'est à dire avec une seule procédure évènementielle dans le module de l'UserForm
contenant l'unique instruction Beep !
Si le bip est audible au moment opportun, c'est gagné sinon je teste une autre procédure évènementielle (Initialize, Activate, Click) …
Marsh Posté le 12-12-2014 à 17:13:25
Bon je vais essayer. C'est vrai que mon niveau en VBA est faible donc mon approche n'est pas rigoureuse je pense.
Le besoin est vraiment d'afffficher le formulaire, que l'utilisateur reponde aux questions du son gage (via les menus ou les cases à saisir), et que ces valeurs de saisie se copie dans un onglet du classeur.
Merci à vous en tout cas;
Cordialement.
yannick
Marsh Posté le 13-12-2014 à 14:34:45
Merci Beaucoup. En suivant votre conseil + un élément vu sur un autre forum, j'ai pu progressé. J'ai inscris le code suivant dans la procedure de fermeture (unload) :
Sheets("Données" ).Activate (chose que j'avais oubliée). Puis le code qui demande la copie des valeurs dans la feuille "Données". Cela fonctionne.
En revanche l'apparition directe des valeurs de menu sélectionnable à l'ouverture du formulaire ne fonctionne ni en Userform_activate ni Uniform_Initiliaze ... y'a t il d'autre evenement pour mon UserForm qui affichera les valeurs des menu à l'utilisateur ?
En vous remerciant.
Cordialement.
Yannick
Marsh Posté le 14-12-2014 à 19:53:14
yanounou91 a écrit : […] ni Uniform_Initiliaze ... |
Celui-là ne risque pas de se déclencher ‼ Attention à l'orthographe …
Sinon c'est l'un ou l'autre, vérifier déjà si cela fonctionne dans une procédure normale …
Marsh Posté le 14-12-2014 à 21:03:40
En suivant vos conseils et des infos d'autres forums, j'ai reussi à avoir ce que je voulais. Il fallait deja passer en "Activate". Mais mon probleme etait que dans les Userform on ne peut utiliser apparemment chaque évenement qu'une seule fois. Il fallait donc que je prenne cela en compte et que je sépare l'action des menus de formulaire et des copies de choix de l'utilisateur dans ma feuille "Données". C'est un peu artisanal mais je place le code pour ceux que ca pourrait intéresser. Il ne me manque plus qu'à faire un code pour rapatrier tous les onglets "Données" de plusieurs fichiers afin de construire ma base de données et un TCD qui permettra d'analyser les données du sondage. Merci à vous.
Et j'ai andonné le Initialize (avec la bonne orthographe), le soucis venait de l'emplacement de mes code "userform" et "copie des valeurs userform dans "Données".
Code :
|
PS : VBA fait toute de meme peur, parfois sans savoir pourquoi une instruction fonctionne et sans rien toucher 5mn plus tard une erreur arrive. Cela m'est arrivé sur une de mes Combobox (ligne 132 du code joint ci dessus). Il sortait une erreur sur la Value alors que l'instruction est la meme que sur les autres lignes. J'ai recréé une Combobox sur le meme principe, et la plus de probleme ... c'est déroutant.
Merci pour vos conseils et désolé pour mon manque de rigueur.
Cordialement.
Yannick
Marsh Posté le 10-12-2014 à 12:01:50
Bonjour,
Je m'explique. j'ai réalisé un formulaire en m'aidant couplant petites connaissances et aide code trouvés sur le forum.
Le but est que pour certains éléments du formulaire, une liste deroulante propose des valeurs à l'utilisateur.
Cela fonctionne mais le probleme est que lorsque le formulaire est actif, les listes de valeurs n'apparaissent que l'ors d'un clic sur le fond du formulaire. Meme probleme pour la copie des valeurs sélectionnées vers l'onglet "Données". je crains que l'utilisateurs pense que le formulaire ne fonctionne pas et de ne pas avoir les résultats en "Données".
Comment faire pour qu'une fois le formulaire ouvert, les valeurs du menu déroulant s'affiche directement quand l'utilisateur clique sur la zone de liste modifiable et que les données en "Données" se copie conformément au code saisie ? (sans avoir à cliquer dans l'espace vide du formulaire). lien :
En vous remerciant et m'excusant pour certains termes peut etre mal choisis dans ma question.
Yannick
PS : Le lien du fichier joint est un XSLM et devrait permettre de mieux comprendre le probleme
Voici le code :
Merci à vous
Message édité par yanounou91 le 14-12-2014 à 21:21:19