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 :

ma 1ère COMBOBOX


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut ma 1ère COMBOBOX
    salut
    sur ma 1ère USERFORM j'ai fait un COMBOBOX dont le but est de m'afficher la liste
    source est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets("f1").range("b2:b" & sheets("f1").Range("b65535").End(xlUp).Row)
    veuillez m'aider svp
    n'oubliez surtout pas que c'est ma 1ère USERFORM
    merci.

  2. #2
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Tu as sans doute affiché la fenêtre de propriétés dans l'éditeur VBA. Sinon, appuie sur F4. En examinant la liste des propriétés de ton ComboBox, tu devrais trouver la propirété RowSource

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Activate()
        ComboBox1.RowSource = sheets("f1").range("b2:b" & sheets("f1").Range("b65535").End(xlUp).Row)
    End Sub

  3. #3
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    lorsque je remplis la case concernant la proprieté RowSource par
    par exemple: j'obtiens un message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    impossible de définir la propriété RowSource. valeur de propriété non valide
    merci.

  4. #4
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    salut
    voici l'exemple ci-joint
    je veux que la combobox m'envoie la liste des articles qui se trouvent dans la colonne b de la feuille "mvt article"
    merci infiniment

  5. #5
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    feuil56 est bien le nom (Name) de la feuille et pas son nom de code (CodeName) ?

    [EDIT]
    Selon ton fichier, insère le code ci-dessous dans le module du UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    Me.ComboBox1.RowSource = Sheets("mvt article").Range("B2:B" & Sheets("mvt article").Cells(Rows.Count, 2).End(xlUp).Row).Address
    End Sub

  6. #6
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    slt
    merci bcp fring ça marche.

  7. #7
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    excuse moi fring
    j'ai un problème:
    si la feuille "mvt article" est masquée le combobox prend les valeurs de la feuille active à l'overture.
    merci.

  8. #8
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    j'ai bien essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Initialize()
    Sheets("mvt article").activate
    Me.ComboBox1.RowSource = Sheets("mvt article").Range("B2:B" & Sheets("mvt article").Cells(Rows.Count, 2).End(xlUp).Row).Address
    End Sub
    et ça marche mais le prob c'est que j'obtien un message:
    mémoire insuffisante pour afficher en entier.
    merci.

  9. #9
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    oups...sorry, je ne l'avais testé qu'avec la feuille active, le code ci-dessous fonctionne même si la feuille est masquée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_Initialize()
        Dim plage As Range, DerL As Integer
     
        With Sheets("mvt article")
            DerL = .Range("B65535").End(xlUp).Row
            Set plage = .Range("B2:B" & DerL)
        End With
     
        Me.ComboBox1.List = plage.Value
    End Sub

  10. #10
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    merci fring
    le code ça marche très bien
    est ce que vous pouvez m'expliquer la diffirence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerL = .Range("B65535").End(xlUp).Row
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = .Range("B2:B" & DerL)
    càd le 1er sans Set et le 2eme avec.
    autre chose; pourquoi vous avez changé :
    par
    merci
    n'oubliez pas que je suis un débutant.

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Pour ta première question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("B65535").End(xlUp).Row
    renvoie un numéro de ligne, que tu stockes dans DerL

    renvoie une référence à un objet de type Range, et on utilise Set pour affecter une référence à une variable. Si on n'avait pas mis Set, la ligne aurait affecté la valeur de la plage (Range.Value) à la variable, ce que l'on ne cherche pas à faire.
    Beaucoup de personnes te conseilleront de toujours mettre le .Value quand tu veux récupérer le contenu de ta plage, même si c'est bien souvent facultatif. En effet, comme ça on est sûr que c'est bien la valeur et pas la référence à la cellule qui est pris en compte, et en plus ça rend le code plus clair.

    Pour ta deuxième question:
    tu alimentes Rowsource avec une adresse, ce qui crée une liste pour ta combobx

    là tu alimentes List avec un tableau de valeurs, qui en l'occurence est le tableu de valeur renvoyé par plage.Value

    En fait ce sont juste 2 façons différentes de voir les choses. Après, le choix de l'une ou l'autre c'est selon le goût et l'envie d'écrire plus ou moins long ou performant.

  12. #12
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    merci
    mais pour ma 1ere question c'est sur le rôle de la proprieté Set
    merci

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Je te l'ai déjà expliqué, mais visiblement c'est pas bien passé.
    Je vais donc expliquer plus en détail.

    Pendant l'exécution, tu as des données stockées dans la RAM de ton PC: les variables, les objets et les références (en fait il y a d'autres trucs mais bon là je fais simple et je me limite au cadre qui nous intéresse).
    Pour affecter une valeur à une variable, simple tu fais:
    En revanche, un objet on ne peut le désigner qu'avec des références. Je ne vais pas te faire un cours sur les objets et références (tu as plein de tutos et FAQ pour ça), mais je vais te réexpliquer le rôle du Set.
    Si tu tapes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set mareference = Range("A1")
    VBA lit ça comme "déclare moi la variable mareference comme étant une référence à la plage A1"
    En revanche si tu tapes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mareference = Range("A1")
    VBA lit ça comme "donne moi la valeur de la plage A1 (Range("A1").Value) et stocke la dans la variable mareference". Et là en l'occurence mareference n'est pas une référence mais une bête variable.

    Bref, le mot clé Set (et c'est un mot clé, pas une propriété ) sert juste à dire à VBA que tu veux travailler avec la référence et non la valeur. A noter que cela est également valable pour d'autres objets que Range, mais là je n'ai pas d'exemple en tête. Dans d'autres langages (comme le C++), tu ne trouveras pas d'équivalent du mot clé Set car il n'y a pas besoin de mot clé pour préciser s'il s'agit d'une variable ou d'une référence.

  14. #14
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    merci bcp decondelite

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

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  3. [VB6] [Interface] Grille avec combobox
    Par khany dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 15/01/2003, 09h55
  4. combobox et readonly
    Par Mac leod dans le forum C++Builder
    Réponses: 6
    Dernier message: 28/11/2002, 10h27
  5. combobox->text
    Par clovis dans le forum C++Builder
    Réponses: 18
    Dernier message: 21/06/2002, 15h43

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