Comment créer un userform liste déroulante ?

Bonjour à tous,

J'ai créé un fichier excel avec plusieurs feuilles. Je voudrais créer un userform pour encoder des données dans les feuilles. Il semblerait que ce soit plus commode pour encoder.
Pour cela, je devrais créer un formulaire mais je bloque déjà sur la manière de procéder pour obtenir une liste déroulante avec le choix de la feuille.
Exemple j'ai des feuilles nommées M1, M2, M4, P1 ... quand je clique sur M1 le curseur devrait se positionne sur la feuille M1 et activera le formulaire pour encoder les données dans cette feuille. Il s'agit du même formulaire pour toute les feuilles.
Merci d'avance pour votre aide.

6 réponses

Résumé de la discussion

Le besoin est de disposer d'un seul formulaire utilisateur capable d’éditer des données dans plusieurs feuilles (par ex. M1, M2, M4, P1) via une liste déroulante pour choisir la feuille, et d’utiliser le même formulaire pour toutes les feuilles. La solution pratique consiste à créer un UserForm en VBA avec une ComboBox listant les noms des feuilles et, à la sélection, d’activer la feuille correspondante avec Sheets(ComboBox.Value).Activate avant d’enregistrer les données. Les données saisies dans le formulaire sont ensuite écrites sur la feuille active lors du clic sur le bouton Valider, en les plaçant dans les colonnes prévues. On peut ajouter des listes déroulantes dépendantes ou des plages nommées si nécessaire, mais l’essentiel reste l’activation dynamique de la feuille choisie et l’enregistrement des entrées via le même formulaire.

Bobot (l’IA à votre service)
  1. Bonjour

    1) Pour afficher l'userform à l'activation d'une feuille il faut dans l'éditeur VBA pour chaque feuille mettre l'instruction :
    Private Sub Worksheet_Activate()
    Userform1.Show
    End Sub


    2) Les données sélectionnées vont elle alors après dans la même cellule de chaque feuille, si oui il suffit au clic du bouton Valider que tu auras missur l'userform de lier une instruction du style :
    Private Sub CommandButton1_Click()
    ActiveSheet.Range("D4") = ListBox1.Value
    End Sub


    Mais je doute que ce soit aussi simple

    Aussi il vaudrait mieux joindre un exemple de ton fichier sur cjoint.com, faire créer le lien, le copier et revenir l'indiquer ici en expliquant exactement ce que tu veux avec un exemple précis

    Cdlmnt
    Via
    0
    1. Bonjour Via 55,
      Je vous remercie pour vos explications...
      Afin que vous puissiez mieux vous rendre compte de ma demande je vous joins le fichier.
      Sur la feuille DEPART, je vous ai expliqué les différentes étapes à suivre pour l'encodage des données.
      Au plaisir de vous lire.

      https://www.cjoint.com/c/EGqmHmoAtGO

      Bon après-midi.
      0
    2. @HugoCALBon J'ai préparé un userform formulaire
      Les listes des n°S par classes sont nommées du nom de la classe ce qui permet avec un plage nommé numero, validée par =INDIRECT(DEPART!$B$4) d'avoir la bonne liste en fonction de la classe choisie, en jonglant entre les listes de choix du formulaire et la feuille DEPART on peut faire afficher les bons nom et prenom dans le formulaire
      L'userform s'ouvre pour l'instant avec la macro go (Onglet Développeurs Macros)
      Me dire si c'est bien déjà ce que tu veux
      http://www.cjoint.com/c/EGqqI3SbPJp
      Ensuite si j'ai bien compris ce formulaire doit permettre de remplir les différentes feuilles, cela se pourra avec un code associé au bouton valider mais je ne comprends pas la structure de tes feuilles classes :
      Pourquoi 2 colonnes pour chaque activité ? une colonne présent et une colonne nom activité
      Pour les repas comment d'après le formulaire savoir si c'est à l'unité? carte 4,5, 10 ou 20 repas? Et la encore pourquoi 2 colonnes à chaque fois ?!

      CDlmnt
      Via
      0
    3. C'est dingue que cela prenne déjà forme... Merci

      Pourquoi 2 colonnes pour chaque activité ?
      Par exemple la piscine en primaire est organisée une fois tous les 15 jours. Donc sur la facture mensuelle, je pourrais avoir 2 présences piscine pour un élève soit 5 euros (2X2,50) mais une présence pour un autre s'il a été malade par exemple. Par contre tu as raison pour les autres activités 1 seule présence suffit.
      La colonne "présent" me renseigne le prix unitaire de l'activité sur la facture. Voir feuille impression et impr-indiv.
      Pour les repas, j'ai décidé de simplifier la facture en n'indiquant que des prix unitaires
      maternelles (2.50€), si pris en charge par le CPAS 45% prix unitaire 1.38 etc.Donc un élève maternelle qui a pris 16 repas sur le mois 16x 2,50=40 euros
      Les colonnes AT à BG pourraient être cachées. Elles ne servent plus à rien, avant on vendait des cartes repas aux parents mais je crois que ce sera plus simple en procédant avec une facture mensuelle.

      Le formulaire devrait me permettre d'encoder les données pour imprimer la facture
      mais aussi de vérifier les données qui se trouvent dans les cellules. Quand j'ouvre le formulaire d'un élève soit j'encode, soit je vois ce qui a été encodé. Eventuellement je peux modifier. Si par exemple un parent vient payer la facture en liquide au secrétariat, je peux ouvrir le formulaire et consulter ce qu'il me doit. Mais encore de pouvoir vérifier si un paiement bancaire correspond bien au montant de la facture. Et dans ce cas renseignée Facture PAYEE. Ca je n'y avais pas pensé avant.
      Et dans lors quand la facture est payée de remettre les données à zéro.

      Merci encore.
      Tes idées sont les bienvenues.

      Bonne soirée.
      0
    4. @HugoCALBonjour

      J'ai amélioré l'userform qui désormais affiche les données de l'élève choisi et permet de les modifier
      http://www.cjoint.com/c/EGrmavSyJKp
      J'ai donc supprimé des colonnes dans la feuille ACC1 et rajouté une colonne pour la date de paiement et un bouton pour lancer le formulaire
      Si ça convient il faut mettre les mêmes colonnes dans les autres feuilles classes bien sûr et créer sur chaque feuille la bouton avec comme ligne de code FORMULAIRE.Show

      Je n'ai pas fait de remise à zéro des données quand la facture est payée pour qu'il reste une trace, on sait que c'est payé puisqu'il y a une date en colonne AY

      Cdlmnt
      Via
      0
    5. Bonsoir Via,

      C'est magnifique. Bien vu pour la date de paiement au moins on a une trace.Et en plus du vert payé et du rouge impayé.
      Ce qui serait chouette c'est de pouvoir imprimer une liste de tous les élèves qui n'ont pas encore payé pour effectuer un rappel. Logiquement on devrait lancer cette macro le 6 du mois, date à laquelle tous les paiements devraient être clôturer. C'est bon de rêver !

      J'ai fait quelques essais d'encodage à l'aide du formulaire ... et je rencontre des petits soucis.
      Par exemple en ACC1 je choisis l'élève 1 et je valide les données le concernant.Je passe à l'élève 8 de la même classe et petit souci les données de l'élève 1 restent afficher.
      Par exemple si j'ai choisis Prairie 2 pour l'élève 1 cette activité reste cochée pour l'élève 8. Alors qu'il se peut qu'il n'est pas participé car malade. Ce serait bien de pouvoir cocher ou décocher.
      Par contre pour les repas : ca roule, on peut modifier. Et valider le nouveau choix.

      Merci pour ton aide et belle soirée.
      0
  2. Contributeur
    Bonjour Via55

    Mon problème venait d'Excel, j'ai réinstallé mon image disque C le système et les applications, cela me prend entre une à deux heures avec les mises à jour Windows et Norton 360 pour être opérationnelle. Tout est Ok maintenant.
    Cela fait plusieurs fois que j'ai ce problème, je n'ai plus de boîte de dialogue ouvrir et n'ai plus accès à mes DD et Excel ne fonctionne plus correctement. Le problème arrive après des téléchargements de fichier sur Cjoint.com si je ne sauvegarde pas le fichier avant de l'ouvrir. Si je l'ouvre directement après Excel n'a plus accès au fichier sur le serveur.
    Pour HugoCal
    Pouvez vous me rafraichir la mémoire il n'y a que les classe P2 et P4 pour l'épargne
    et pour les biscuits qu'elles sont les classes concernées
    0
    1. Bonsoir Philippe,

      Content de te lire et que tu aies pu résoudre ton problème.

      L'épargne que les P2ABC et P4ABC.
      Les biscuits toutes les classes.

      Belle soirée.
      0
  3. Contributeur
    Bonjour HugoCal et Via55

    Voici le dernier jus du fichier
    J'espère avoir repris toutes les modifications faites par vous deux
    Vous testez et vous me dites si cela vous convient

    http://www.cjoint.com/c/EGtuwKzRGSx
    0
    1. Contributeur
      Bonjour HugoCal et Via55

      Le fichier modifié, celui d'hier avait une liaison avec un autre fichier,elle est restée lors de la duplication des feuilles d'impressions

      le fichier http://www.cjoint.com/c/EGuhXqFNwdx
      0
      1. Bonjour Philippe et Via55,

        Je viens d'encoder toute une série de données et tout fonctionne à merveille.

        Je vous remercie très chaleureusement pour votre travail et vous tiendrez au courant de l'utilisation du programme à la rentrée de septembre.

        Bonne journée.
        Profitez bien de vos vacances si vous en avez !

        Encore Merci.
        0
      2. @HugoCALBonjour Hugo

        Tant mieux et bonne utilisation (c'est pour des TAP ?)
        Ok tiens nous au courant
        Bonnes vacances également

        Bien cdlmnt
        Via
        0
      3. Contributeur
        @via55Merci Via55 pour ton aide sur les macros
        0
      4. @via55Bonjour Via, Bonjour Philippe,

        Les affaires reprennent ...

        Je vous expose une situation qui se produira tout au long de l'année scolaire ... de nouveaux élèves entrent en classe d'ACC1 et ACC2 dès qu'ils ont 2 ans et demi. Par conséquent la liste des élèves n'est pas figée et se modifie pendant l'année. On peut aussi avoir des départs ou des arrivées dans d'autres classes suite à un déménagement par exemple.
        Ainsi je pensais incorporer dans les listes des classes les nouveaux élèves en continuant la numérotation, le nouvel élève aurait le numéro 539 et ainsi de suite 540, 541 ...
        Mais à partir du formulaire les nouveaux numéros n'apparaissent pas ; ainsi en ACC1, on ne peut choisir que parmi les 27 élèves dans le menu liste déroulant. Comment faire pour sélectionner le nouvel élève 539 incorporé dans la feuille ELEVES et dans la liste de la FEUILLE ACC1 ?

        De plus j'ai toujours le souci pour l'élève 2 en ACC1 qui n'active pas dans la feuille ACC1 les différents choix sélectionnés dans le formulaire.

        Merci d'avance pour vos réponses.
        0
    2. Contributeur
      Bonjour Via55 et HugoCAL

      J'ai essayé de mettre une adresse à un enfant pour voir et une fois validé
      je ne vois rien sur la ligne de l'élève
      Via55 peux-tu expliquer la procédure
      0
      1. Bonjour Philou

        Je ne m'en étais pas aperçu!
        Je ne comprends pas, la macro reprend les anciennes données car le n° eleve revient à 1 lorsqu'on valide !!
        J'ai du récupérer dans ma macro les valeurs de tous les textbox au moment de la validation
        http://www.cjoint.com/c/EGxoogNX3SF

        Cdlmnt
        Via
        0
        1. Contributeur
          le fichier joins ne correspond pas à notre sujet
          0
        2. @PHILOU10120Me serai-je mélangé les pinceaux !
          Voilà le bon :
          http://www.cjoint.com/c/EGxsDzhFODF
          0
        3. Bonsoir Philippe,
          Bonsoir Via,

          Désolé de vous répondre aussi tardivement ...
          Je ferai des tests demain, en profondeur mais déjà les quelques essais que je viens de faire sont supers.

          Merci et belle soirée ou plutôt bonne nuit et à demain donc.
          0
        4. Contributeur
          @HugoCALBonjour HugoCAL et Via55
          Je suis de nouveau embêté avec excel plus de boîte de dialogue ouvrir

          J'ai fais un teste hier soir classe P1A j'ai mis élève 53 (ce qui est une erreur mai la liste ne s'affichant pas, je l'ai choisi pour ce teste) l'élève à bien été modifié mais sa classe d'origine remplacé par P1A, Il faut obligatoirement la liste correspondant à la classe
          0
        5. Bonjour Via,
          Bonjour Philippe,

          Après quelques tests, voici les résultats de mon analyse ...

          1. La macro "Trier et placer les élèves dans les onglets selon leur classe" me semble plus être utile mais ne peut-on pas activer à l'aide ce bouton la macro "ctrl+w" ?
          2. La macro "Editer les impayés" ne reprend pas les nouveaux inscrits". Par exemple si j'ajoute un élève dans une classe, ce nouvel élève n'est pas repris dans la liste sur la feuille des "Impayés".
          A ce sujet ne serait-il pas possible en plus de la macro "Editer les Impayés",de créer une autre macro disponible sur la feuille "Départ" qui reprendrait uniquement les Impayés de toutes les classes en un seule fois, à activer sitôt les encodages terminés.
          3. La macro "Impression de tous les élèves de la classe" de la feuille "Impression" modifie le numéro correspondant au nouvel élève rentré dans une classe.
          Je pense que c'est lié au compteur qui renseigne la ligne qui lui correspond sans tenir compte de son numéro d'ordre; ici, le 540. La macro reprend l'élève en fonction du numéro du compteur et lui attribue un autre numéro, la ligne où il se trouve +2.

          Encore merci pour votre précieuse collaboration et bon après-midi.
          0