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 :

Remplissage listbox sous condition [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 121
    Par défaut Remplissage listbox sous condition
    Bonjour,
    J'ai un soucis probablement très bête mais je n'arrive pas à le résoudre.
    Je cherche à remplir une listbox à partir de données d'une feuille excel en fonction d'une condition.
    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
    Private Sub CommandButton2_Click()
            k = 0
    Me.ListBox1.Clear
    With Sheets("BDD")
        DernLigne = .Range("A" & Rows.Count).End(xlUp).Row
        For Each cellule In .Range("A2:A" & DernLigne)
            If cellule = Me.TextBox1.Value Then
                Me.ListBox1.AddItem
                Me.ListBox1.List(k, 0) = cellule
                Me.ListBox1.List(k, 1) = cellule.Offset(0, 1)
                Me.ListBox1.List(k, 2) = cellule.Offset(0, 2)
                Me.ListBox1.List(k, 3) = cellule.Offset(0, 3)
            End If
            k = k + 1
        Next cellule
    End With
    End Sub
    Bien que la condition soit vérifiée, le remplissage ne se fait pas... Même lorsque cellule=Me.TextBox1.Value est vérifié, rien ne se passe.
    Dans le Range, les données saisies sont des années. Dans le TextBox l'utilisateur saisit également une année.
    Ce qui est étrange c'est que si je saisis dans le Range '2011 au lieu de 2011 par exemple, alors ça marche. Ce qui me fait penser qu'il s'agit simplement d'un problème de format, mais je ne trouve pas la solution...
    D'avance merci pour votre aide!

  2. #2
    Membre très actif Avatar de lionel86500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    Bonjour,

    Ta donnée cellule est considérée comme OBJECT
    transfert la dans une donnée string et fait le test avec la donnée string et ca marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim s1 as string
    s1 = cellule
    If s1 = Me.TextBox1.Value Then

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 121
    Par défaut
    merci mais ça ne fonctionne pas
    par contre ce code fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With Sheets("BDD")
        DernLigne = .Range("A" & Rows.Count).End(xlUp).Row
        For i = 2 To DernLigne
            If .Range("A" & i) Like Me.ComboBox2 Then
                Me.ListBox1.AddItem
                Me.ListBox1.List(k, 0) = .Range("A" & i)
                Me.ListBox1.List(k, 1) = .Range("B" & i)
                Me.ListBox1.List(k, 2) = .Range("C" & i)
                Me.ListBox1.List(k, 3) = .Range("D" & i)
            End If
            k = k + 1
        Next i
    End With
    mais j'ai un autre soucis...
    lorsque je sélectionne la première valeur de ma combobox comme critère de remplissage de la listbox, ça fonctionne.
    mais quand je sélectionne la seconde valeur, j'ai un message d'erreur : impossible de définir la propriété list index de table de propriétés non valide
    l'erreur pointe sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ListBox1.List(k, 0) = .Range("A" & i)
    je ne comprends pas...

  4. #4
    Membre très actif Avatar de lionel86500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    Comment est créé ton combobox

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    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 : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Un petit exemple qui fonctionne.
    La liste de données commence en cellule A1 de la feuille nommée [db] et les étiquettes de colonnes se trouvent en ligne 1.
    Le contrôle ListBox1 est alimenté par le nom et le prénom (Colonne 2 et 3 de la liste des données ) des personnes de sexe féminin ("F" dans la colonne 4 de la liste des données)
    La procédure avec en tête de module la déclaration des variables rng et rng_Data ainsi que la constante ConditionValue
    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
    Option Explicit
    Const ConditionValue As String = "F"
    Dim rng As Range, rng_Data As Range
    Private Sub UserForm_Initialize()
     Dim r As Long
     Set rng = ThisWorkbook.Worksheets("db").Range("A1").CurrentRegion
     With rng: Set rng_Data = .Offset(1).Resize(.Rows.Count - 1): End With
     With Me.ListBox1
     .ColumnCount = 3: .ColumnWidths = "25;50;50" ' Remplacer 25 par 0 pour ne pas afficher la première colonne
     End With
     With rng_Data
      For r = 1 To .Rows.Count ' Nbre de lignes de la liste de données
       If .Cells(r, 4).Value = ConditionValue Then
        Me.ListBox1.AddItem r ' N° de la ligne où se trouve les données répondant à la condition
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = .Cells(r, 2).Value
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = .Cells(r, 3).Value
       End If
      Next r
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Août 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Août 2017
    Messages : 32
    Par défaut
    Merci pour ce code très utile Philippe

    Néanmoins, serait-il éventuellement possible d'y insérer la largeur automatique des colonnes ?

    Les largeurs fixes ne sont pas vraiment esthétiques ni faciles à déterminer quand on ne connait pas préalablement les données.

    Merci d'avance.

    Vincent

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

Discussions similaires

  1. [XL-2007] Remplissage Cellules sous condition
    Par Averell1976 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 07/01/2014, 10h48
  2. [Toutes versions] remplissage d'une zone de liste sous condition
    Par chris_ij32 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/09/2012, 18h36
  3. [XL-2007] listbox vers feuille sous condition
    Par grisan29 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/11/2011, 21h56
  4. [XL-2007] Trier ListBox sous conditions - alimentation en cascade
    Par Batt04 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/10/2011, 20h50
  5. remplissage tableau sous condition
    Par gauguin dans le forum C
    Réponses: 6
    Dernier message: 15/02/2007, 17h06

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