IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Userform et renvoi de la sélection d'un combobox [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut Userform et renvoi de la sélection d'un combobox
    bonjour,

    mon programme ouvre un userform (FrmEncoder) sur lequel se trouve un bouton de commande "Imprimer"

    L'appui sur ce bouton ouvre un autre userform (FrmImprimer) comprenant deux contrôles:
    - un listbox (ListImprime) permettant de sélectionner une année.
    - un bouton de commande (CmdOkAnnee).

    lorsque je sélectionne une année à imprimer dans le listbox, celle-ci est bien prise en compte (Su avec la ligne 3 ) mais n'est pas reconnue dans la feuille (FrmEncoder) ayant ouvert l'userform (Su avec la ligne 5 ) .

    A noter : j'ai déclaré la variable "vAnnee" tantôt dans la feuille appelante, tantot dans la feuille appelé et cela ne change rien.

    dans la littérature on lit toujours que la portée d'une variable est de niveau module si elle a été déclarée avec Dim) au début du module et de niveau projet si elle à été déclarée avec Public).
    Mais la feuille VBA (également Thisworkbook) est elle considérée par VBA comme un module ?

    J'espère avoir clairement formulé mon problème.

    Merci à tous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CmdImprimer_click()
    i = 6
    Worksheets("Opérations").Activate
    FrmImprime.Show
    Cells(2, 1) = vAnnee
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub cmdOkAnnee_click()
    vAnnee = FrmImprime.ListImprime
    Cells(2, 1) = vAnnee
    Unload FrmImprime
    End Sub

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    la variable ne doit être déclaré (instruction DIM) qu'une seule fois ... active l'option Explicit, en rajoutant la ligne de code :

    en haut de toutes tes pages de codes, ce qui te permettra s'il y as lieu de mettre en évidence des problèmes de portée..

  3. #3
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut userform et renvoi de la selection listbox
    Bonjour Daniel,

    merci de ta réponse.

    Le rajout "option explicit" sur les feuilles et modules ou elle ne figurait pas ne change rien au problème.
    j'ai de plus introduit la vérification du type de donnée qui est tant à la saisie sur listbox de la feuille "FrmImprime" qu'au retour sur la feuille "FrmEncoder" de type Integer.
    j'ai, de même, rendu public la procedure "private sub cmdImprimer " sans plus de résultat.

    enfin, j'ai tenté un déplacement de la procédure cmdOkAnnee_click de la feuille FrmImprime sur la feuille FrmEncoder mais il ne la reconnait pas. Sans doute est-il impératif que le code des procédures "****_click" se trouve sur la feuille de l'userform pour être reconnu.

    la règle des portées concerne-t-elle également les feuilles et thisworkbook ? Je n'ai pas trouvé de réponse dans mes lectures. En d'autres termes: Sont elles considérées comme des modules même si dans l'explorateur projet ce terme ne figure pas ?

    cordialement.

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par nibledispo Voir le message
    bonjour,


    dans la littérature on lit toujours que la portée d'une variable est de niveau module si elle a été déclarée avec Dim) au début du module et de niveau projet si elle à été déclarée avec Public).
    Mais la feuille VBA (également Thisworkbook) est elle considérée par VBA comme un module ?

    [/CODE]
    Thisworkbook n'est pas un module.
    Tu fais Insertion/Module pour créer un nouveau module (un module standard). Et dans ce module, tu déclares ta variable avec Public. Elle sera accessible de partout dans le programme. Ne la déclare pas ailleurs en plus si tu veux y avoir accès partout.

  5. #5
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut userform et renvoi de la selection listbox
    bonjour Docmarti,

    Ce que tu écris est tout à fait exact. C'est la conclusion à laquelle je suis parvenu après plusieurs heures d'essais divers effectués avant de lire ton message.

    Cela n'est toutefois, selon moi, pas cohérent : Il semble logique de déclarer une variable dans la procédure, la feuille ou le module ou elle est créée est affectée d'une valeur.
    Dans mon cas elle est créée et affectée par la listbox dans une feuille VBA.

    j'ai donc était obligé, à contre cœur, d'enlever sur cette feuille l'option explicit et la déclaration pour les reporter sur le module créé.

    Autre constat troublant : si je laisse l'option explicit et la déclaration 'public' dans la feuille VBA, l'appel de la procédure logée dans le module fonctionne à condition qu'il soit lancé avec passage de la variable en argument. Dans ce cas, il n'est pas nécessaire faire une déclaration public dans le module.

    dernier constat : Si je laisse la procédure appelée sur la feuille VBA contenant la procédure appelante, il n'y a aucun problème (pas besoin de passer la variable en argument). c'est sans doute la meilleure solution.
    toutefois, je ne sais s'il est très logique de loger sur une feuille VBA des procédures autres que des procédures appelées par les contrôles de l'userform (_click, _change, _initialize .....).

    en définitif, la grande difficulté pour le débutant est de manipuler les feuilles, les modules à bon escient.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel 2007] rang de la sélection dans un Combobox
    Par Harry Covair dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/03/2009, 17h27
  2. Affichage de données différent en fonction de la sélection d'une ComboBox
    Par seiryujay dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 06/02/2009, 12h39
  3. [OpenOffice][Base de données] Récupérer les données aprés sélection dans une combobox
    Par frack dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 06/02/2009, 09h27
  4. Réponses: 3
    Dernier message: 27/11/2008, 17h57
  5. Simuler la sélection dans un ComboBox
    Par defluc dans le forum Composants VCL
    Réponses: 3
    Dernier message: 11/10/2008, 18h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo