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 :

Combobox ne reprend qu'une partie de la plage


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Par défaut Combobox ne reprend qu'une partie de la plage
    Bonjour à tous,

    Je me suis mis très recement au VBA avec Excel, ça fait un petit moment que je bloque sur quelquechose.

    J'ai donc un combobox en userform, je lui défini une plage à récupérer (qui se trouve en feuille 2, ce sont plusieurs cases d'une même ligne), et je suis parti sur ce type de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
       Combobox.RowSource = "feuille2!A1:Z1"
        End Sub
    seulement, il ne m'affiche que la 1ère cellule, c'est à dire, A1, dans la liste. Est-ce que je fait fausse route en partant sur ce code ou bien j'ai certainement dû oublier quelquechose en route

    une petite aide serait la bienvenue
    merci d'avance

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu as 26 colonnes dans ton Combo ?

    Edit
    Bon, je veux bien t'aider mais ce sera demain. Avec RowSource, ça marche pas, tu dois utilier Column et pour ça créer un tableau des données de ta ligne et mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Me.ListBox2.Column() = Tableau()
    Bonne nuit.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Par défaut
    Bonjour,

    j"ai réduit à 23 colonnes, un mot par colonne sur une même ligne

    merci

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu n'as comme limite que le nombre de colonnes de ta feuille de calculs. Pas de soucis là-dessus.

    A lire pour comprendre
    Pour présenter en colonne dans ton combo, des données présentées en ligne dans ta feuille, tu dois créer un tableau à deux dimensions pour que le combo ou listBox retrouve ses petits.
    Une dimension lignes
    Une dimension colonnes.

    Dans l'exemple que je te mets, tu ne lis qu'une ligne et tu n'auras donc qu'une colonne dans ton combo. Mais nous ne sommes pas limités.
    Par la même méthode tu peux avoir autant de colonnes dans ton combo que de lignes dans ta feuilles de calculs.

    Le code promis
    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
    Private Sub UserForm_Initialize()
    Dim DerLig As Long, DerCol As Integer, NoCol As Integer
    Dim Tableau(), NoLig As Long
     
        DerLig = 1  'Dernière ligne de la plage
        DerCol = 26  'Dernière colonne
        ReDim Tableau(DerLig, DerCol)
     
        'On fixe le nbre de colonnes de la liste au nombre de ligne
        Me.ComboBox1.ColumnCount = DerLig
     
        'Création du tableau : Pour chaque ligne, toutes les colonnes
        For NoLig = 1 To DerLig
            For NoCol = 1 To DerCol  '(NoLig-1 et NoCol-1) l'index commençant à 0
                Tableau(NoLig - 1, NoCol - 1) = Cells(NoLig, NoCol).Value
            Next
        Next
        Me.ComboBox1.Column() = Tableau()
    End Sub
    Dans cette macro j'ai donc limité le nombre de lignes... à 1. Mais tu peux très bien mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        DerLig = FL1.Range("A65535").End(xlUp).Row 'Dernière ligne de la plage
        DerCol = FL1.Range("IV1").End(xlToLeft).Column   'Dernière colonne
    Et tu pourras ainsi avoir autant de colonnes dans ton combo que tu as de lignes dans ta plage de données de la feuille Excel.
    En espérant t'avoir aidé
    A+

    NB - Par cet méthode je ne connais pas de solution pour avoir une ligne d'en-têtes

  5. #5
    Membre chevronné

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Autre solution:

    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 i As Long
        Dim rng As Range
     
        Set rng = Worksheets("Feuil1").Range("A1:Z1")
        For i = 1 To rng.Columns.Count
            ComboBox1.AddItem rng.Cells(1).Offset(0, i - 1).Value
        Next i
        ComboBox1.ListIndex = 0 ' Pour que la première ligne soit sélectionnée au départ
    End Sub

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour Singular,
    Pendant que je te tiens, as-tu une solution pour afficher un en-tête de colonne selon la méthode que tu utilises ou la mienne ? (ComboBox1.Column() ou ComboBox1.AddItem ?
    Merci pour ton travail.

    Juste une remarque à l'intention de Ginko :
    Additem ajoute une ligne à la list ou comboBox mais ne permet pas de renseigner plusieurs colonnes (ce qui n'est d'ailleurs pas demandé par Ginko ) Seule la première colonne est renseignée par cette méthode.
    Par contre, pour une seule colonne, Additem suffit mais est plus lent.
    (Tu me corriges si je me trompe, Singular )

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/11/2010, 12h23
  2. [XL-2007] Remplissage conditionnel d'une combobox sur une partie seulement de la base
    Par csempere dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/06/2010, 14h52
  3. [CVS]Gestion de 2 versions avec une partie commune
    Par Gromitou dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 19/02/2004, 14h32
  4. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 14h38
  5. selectionner une partie d'un TImage
    Par bidochon dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/02/2003, 19h08

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