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 :

utilisation de Rowsource dans la Combobox


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut utilisation de Rowsource dans la Combobox
    bonjour a tous. je suis en face d'un problème et je n'arrive pas à trouver la solution.

    j'ai un ensemble de données dans ma feuille excel. je lui ai attribué un nom afin de l'utiliser dans l'option "rowsource" de une "combobox". le souci est que mes données sont un ensemble de
    colonne ( range ("A1:L1")) . du coup, la combobox n'affiche que le premier élément de ma liste.

    comment faire pour qu'il puisse lire tous les éléments de mes données.

    merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,

    Le champ doit être vertical.
    RowSource est souvent source de pb. Il est préférable d'utiliser List ou Column
    Si le champ est horizontal, utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.combobox1.List=Application.Transpose(Range("A1:L1"))
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.combobox1.Column=Range("A1:L1")
    Boisgontier

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    svp je dois ecrire cette ligne de code dans quel evenement??

    dans Change ou autres ???

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Dans Initialize

    Boisgontier
    Fichiers attachés Fichiers attachés

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    désolé mais je n'arrive pas toujours à résoudre mon problème.si vous pouvez mieux m'expliquer la procédure ,ca m'aiderait beaucoup. merci

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour Jacques,
    Le champ doit être vertical.
    RowSource est souvent source de pb. Il est préférable d'utiliser List ou Column
    Ce n'est pas la propriété RowSource qui est source de problème mais la manière dont les utilisateurs construisent leurs données et sauf si une liste doit être affichée avec critères ou si je dois afficher le titre des colonnes d'une liste, je privilégie toujours cette propriété qui a l'avantage notamment d'afficher les titres de la liste de données.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    désolé mais je n'arrive pas toujours à résoudre mon problème.si vous pouvez mieux m'expliquer la procédure ,ca m'aiderait beaucoup.
    Comme expliqué par Jacques Boisgontier le code qu'il t'a proposé doit être placé dans la procédure événementielle Initialize de ton UserForm (UserForm_Initialize)
    Je suppose que si tu as pu alimenter la propriété RowSource tu sais où se trouve cette procédure

    Je crois qu'il a en plus déposé un classeur exemple. L'as tu ouvert ?

  8. #8
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    2 problèmes de Rowsource


    1er problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Initialize()
      Me.ComboBox1.RowSource = Range("A1:A10").Address
    End Sub
     
    Private Sub ComboBox1_Change()
       MsgBox "coucou"
    End Sub
    -utiliser le combobox une fois
    -si on modifie la source (A1:A10), déclenche l'événement change du combobox

    2e problème


    On ne peut filtrer le combobox en utilisant List ou Column

    cf x posts à ce sujet ( de débutants)


    Boisgontier
    Fichiers attachés Fichiers attachés

  9. #9
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Initialize()
      Me.ComboBox1.Column = Range("A1:M1").Value
    End Sub
     
    Private Sub ComboBox1_Change()
       MsgBox "coucou"
    End Sub

    Affichage des en-têtes d'une LListBox


    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
    Dim Rng, NbCol
    Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      Set Rng = f.Range("A2:D" & f.[A65000].End(xlUp).Row)
      NbCol = Rng.Columns.Count
      Me.ListBox1.ColumnCount = NbCol
      tblBD = Rng.Value
      Me.ListBox1.List = tblBD
      EnteteListBox
    End Sub
     
    Sub EnteteListBox()
      x = Me.ListBox1.Left + 8
      Y = Me.ListBox1.Top - 12
      For i = 1 To NbCol
        Set lab = Me.Controls.Add("Forms.Label.1")
        lab.Caption = Rng.Offset(-1).Cells(1, i)
        lab.Top = Y
        lab.Left = x
        x = x + Rng.Columns(i).Width * 1.1
        temp = temp & Rng.Columns(i).Width * 1.1 & ";"
      Next
      temp = Left(temp, Len(temp) - 1)
      Me.ListBox1.ColumnWidths = temp
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour Jacques,
    -si on modifie la source (A1:A10), déclenche l'événement change du combobox
    Je n'utilise pas l'événement Change (pour intercepter la sélection j'utilise Click) d'un ListBox ou ComboBox ce n'est donc pas un problème pour moi.
    La procédure événementielle Change réagit d'ailleurs également lorsque l'on clique sur un des éléments de la liste et cela que tu utilises la propriété RowSource, List ou la méthode AddItem
    Quant au 2ème problème
    On ne peut filtrer le combobox en utilisant List ou Column
    Si cette réponse m'était adressée, je ne pense pas avoir prétendu cela. Lorsque j'affiche une liste qui doit être filtrée, j'utilise la méthode Add

  11. #11
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    -Avec Click au lieu de change, je confirme le 1er problème (cf PJ)
    -Les débutants se font avoir. En utilisant Rowsource, ils ont Accès refusé
    s'ils essaient AddItem, List ou Column.

    Boisgontier
    Fichiers attachés Fichiers attachés

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je crois que c'est un dialogue de sourd.
    Je n'ai aucun problème avec RowSource et je ne mélange pas l'usage des propriétés pour un même contrôle.

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Perso, je charge les combobox et listbox avant le show dans la procédure qui appelle et affiche le formulaire, ce qui est grandement facilité par l'utilisation des tables de données, et on évite ainsi le hard coding dans le formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      With UserForm1
        .ListBox1.List = Range("t_contacts").Value
        .Show
      End With

    Je n'utilise jamais le rowsource qui pose au moins trois problèmes:

    1. Préciser que rowsource = feuil1!A1:A10 revient à pratiquer du hard coding, obligeant à modifier le userform si ce n'est plus A1:A10 (ajout ou suppression d'une ligne, déplacement de la plage, renommage de la feuille, etc).

    2. Si on tente de créer une plage nommée dynamique ou d'utiliser les références structurées dans le RowSource, l'ajout ou la suppression de lignes dans la source va planter Excel à l'ouverture suivante du userform.

    3. Si, durant l'utilisation du userform, on tente de modifier le rowsource, par exemple en ajoutant une ligne à la plage nommée/structurée, Excel va planter.

    On a donc moins de souplesse en fixant "en dur" la source du combobox/listbox.

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    merci à tous pour vos interventions toutes aussi édifiantes.
    grâce à vous, j'ai pu résoudre mon problème et mieux encore, j'appris de nouvelles commandes pour l'avenir.

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

Discussions similaires

  1. Utiliser la souris dans une combobox dans une UserForm
    Par Keops42800 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/01/2017, 13h33
  2. [XL-2007] RowSource dans une combobox
    Par manuseverine dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 23/08/2010, 15h48
  3. utiliser la valeur d'un combobox dans un autre formulaire
    Par le phoenyx dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/03/2010, 13h44
  4. Utiliser une valeur insérée dans une ComboBox
    Par Conico113 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/11/2008, 10h06
  5. Réponses: 4
    Dernier message: 15/04/2008, 18h52

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