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 :

Alim. ComboBox à partir list pls dimensions


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Alim. ComboBox à partir list pls dimensions
    Bonjour,
    Je souhaiterais alimenter une ComboBox à partir d'une zone de donnée (code - nom).
    Ex: 1-Toto/2-Tata en affichant que les noms.
    J'ai donc crée un type Information
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Type comboInformation
    code As Integer
    label As String
    End Type
    Puis le chargement du tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim tableau() as comboInformation
    tableau(1).code = 1
    tableau(1).label = "Toto"
    tableau(2).code = 1
    tableau(2).label = "Tata"
    Puis le chargement de ma combo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    comboBox1.List = tableau.label
    => Et donc c'est la que j'ai mon anomalie
    => "Erreur de compilation. qualificateur incorrect"

    Merci pour votre aide

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Tu parles d'une zone de données. J'en déduit qu'il s'agit d'un Range. Pourquoi passer par une variable tableau? Tu pourrais utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    comboBox1.RowSource = rngMonRange.Address
    par exemple...

    Ajout:
    Et salut à toi fred65200, suite à ton post suivant le mien...

  3. #3
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir,

    je n'ai pas tout compris mais voici une proposition tirée de l'aide

    tu peux aussi bien évidemment utiliser la propriété RowSource comme le suggère Singular que je salue

    cordialement
    Fichiers attachés Fichiers attachés

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ne pas utiliser des mots réservés comme Label.

    Starec

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Merci à tous. Je vais repréciser mon souhait, car je crois ne pas avoir été sufisamment clair

    Je souhaiterais donc alimenter une ComboBox à partir d'une zone de donnée (code - nom).
    Ex: 1-Toto/2-Tata en affichant que les noms.
    Soit un type salarie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Type salarie
    code As Integer
    nom As String
    End Type
    Puis le chargement du tableau personnel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim personnel() as salarie
    personnel(1).code = 1
    personnel(1).nom = "Toto"
    personnel(2).code = 2
    personnel(2).nom = "Tata"
    Puis le chargement de ma combo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    comboBox1.List = personnel.nom
    => pour charger ma combo, qu'a partir des noms. Mais cela ne marche pas.

    J'ai essayé de faire un tableau à 2 dimensions (cela me plait moins)
    Dim personnel(1 to 2, 1 to 2) as variant
    personnel(1,1) = 1
    personnel(2,1) = 2
    personnel(1,2) ="Toto"
    personnel(2,2) ="Tata"
    comboBox1.List = personnel
    = Fonctionne mais comment alors lui faire afficher que la colonne 2

    Merci pour votre aide. En espérant avoir été plus clair

  6. #6
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir,
    dans le classeur joint hier, remplace le code du UserForm_Initialize

    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub UserForm_Initialize()
    ComboBox1.ColumnCount = 2
    
    Dim tableau(1, 1) As Variant
    tableau(0, 0) = 1
    tableau(0, 1) = "Toto"
    tableau(1, 0) = 2
    tableau(1, 1) = "Tata"
     ComboBox1.List = tableau
    ComboBox1.ListIndex = 0 '
    '    OptionButton1.Caption = "List Index"
    '    OptionButton2.Caption = "Column 1"
    '    OptionButton3.Caption = "Column 2"
    '    OptionButton2.Value = True
    
    ComboBox1.ColumnWidths = "0;100"
    End Sub
    cordialement

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonsoir,

    il faut que ton combo ai 2 col
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UserForm1.ComboBox1.ColumnCount = 2

  8. #8
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    comme tu dis pathou
    Citation Envoyé par fred65200 Voir le message
    je n'ai pas tout compris mais voici une proposition tirée de l'aide


    cordialement

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Merci fred65200 pour ta réponse.
    Si quelqu'un a une piste sur ma 1ère proposition (tableau de type), je suis aussi preneur.

  10. #10
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    re

    je n'ai jamais travailé avec des types mais j'apprends. merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Private Type salarie
    code As Integer
    nom As String
    End Type
    Private Personnel() As salarie
     
    Private Sub UserForm_Initialize()
    ReDim Personnel(2)
    Personnel(0).code = 0
    Personnel(0).nom = "Toto"
    Personnel(1).code = 1
    Personnel(1).nom = "Tata"
    Personnel(2).code = 2
    Personnel(2).nom = "Titi"
    'nombre de colonnes
    ComboBox1.ColumnCount = 2
    'remplissage du combobox
    For i = LBound(Personnel) To UBound(Personnel)
    ' première colonne
    ComboBox1.AddItem Personnel(i).code
    ' seconde colonne
    ComboBox1.List(i, 1) = Personnel(i).nom
    Next
    'colonne des données récupérées
    ComboBox1.BoundColumn = 1
    'largeur des colonnes
    ComboBox1.ColumnWidths = "0;100"
    'affichage
    ComboBox1.ListIndex = 0
    End Sub
    OK?
    cordialement

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Hello Fred6520,
    En fait ce que je voulais c'était d'éviter de faire une boucle.
    De charger mon vecteur une fois (code - nom) puis d'alimenter directement ma combo
    => comboBox.list= personnel.nom
    Tu vois mieux ?

  12. #12
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Hello Fred65200,
    J'ai peut être trouvé une piste. Ce n'ai pas éxactement ce que je voulais faire mais ça y ressemble.
    Voila, avant j'étais partie dans l'idée de creér un type personne avec 2 propriétés codes et libellé. Mais je penses que ce n'ai pas possible, car la liste attend un tableau.
    Je suis donc partie sur un type liste avec 2 vecteurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Type personneListe
    code() As Long
    libelle() As String
    End Type
    puis déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       Dim liste As personneListe
       ReDim liste.code(1 To 2)
       ReDim liste.libelle(1 To 2)
    puis alimentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       liste.code(1) = 1
       listecode(2) = 2
       liste.libelle(1) = "toto"
       liste.libelle(2) = "tata"
    Et enfin chargement de la combo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       comboBox4.List = liste.libelle
    Voila. Le seul truc c'est que je n'ai pas de type unitaire personne. Mais bon Si quelqu'un a mieux je suis preneur.
    Autrement, il y a une chose que je n'ai pas compris, c'est pourquoi je ne dois oas faire de Set Liste = new personneListe
    Bonne soirée

  13. #13
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Tu ne peux pas utiliser Set car personneListe est un Type et non un Objet. Un Type peut ëtre vu comme une variable à plusieurs dimensions (sans être un tableau) dans laquelle chaque partie de la variable porte un nom d'accès.

    Pour éviter de travailler avec des Types, tu pourrais te créer un feuille de données invisible à l'utilisateur dans laquelle tu gardes un tableau de cellules concernant ce que tu veux charger dans la ComboBox.

    Ainsi, tu n'aurais qu'à écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        ' Ls ligne suivante assume que les données sont contenues dans les cellules
        '   "A2:B12" d'une feuille nommée "Personnel" dans le libellé de l'onglet.
        ComboBox1.RowSource = "Personnel!A2:B12"
        ComboBox1.ColumnHeads = False ' Mettre à True si l'entête de colonne doit
                                      '     être affichée dans la liste, en
                                      '     spécifiant A1 plutôt que A2 pour x
                                      '     RowSource.
        ComboBox1.ColumnCount = 2
        ComboBox1.ColumnWidths = "2 cm;6 cm"  ' Voir l'aide en ligne de la propriété.

  14. #14
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Si je te comprends bien, on ne peut donc pas faire de get ou de let sur un type.
    L'intérêt en serait très limité. En gros un type ne serait à utilisé que pour des types simples. Dis moi, si j'ai bien tout saisi.
    Je vais faire un essai en transformant mon type en classe pour voir.

  15. #15
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    En effet, l'intérêt en est limité mais très utile pour, par exemple, extraire ou enregistrer des données dans un fichier.

  16. #16
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup pour tes précisions. Car j'étais un peu perdu et je n'avais vu grand chose la dessus.


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

Discussions similaires

  1. Vba definir la liste d'une combobox à partir de sources differentes
    Par yann26 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/07/2014, 06h50
  2. Réponses: 2
    Dernier message: 21/03/2012, 10h21
  3. Liste combobox à partir des donnée d'une base
    Par blue_bird dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/03/2008, 16h30
  4. Réponses: 1
    Dernier message: 23/05/2007, 11h49
  5. [Débutant][Excel] ComboBox et liste de choix
    Par wanou44 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/12/2005, 17h36

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