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 :

Définir un range row et peupler une Listbox avec les valeurs de cellules d'une colonne spécifique [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Technico commercial
    Inscrit en
    Juin 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technico commercial

    Informations forums :
    Inscription : Juin 2014
    Messages : 20
    Par défaut Définir un range row et peupler une Listbox avec les valeurs de cellules d'une colonne spécifique
    Bonjour à tous,

    Je suis confronté à un problème de remplissage de listbox.

    J'ai dans un userform "SRecherche", un textBox1 que je remplis manuellement sous la forme d'une date mm/aaaa. Je clique ensuite sur un bouton dans ce userform qui m'envoie vers un second userform "SFiches" dans lequel figure une listbox qui affiche les lignes dont la date correspond (colonne AA de la feuille Recap de mon classeur dans laquelle figurent l'ensemble de mes données) à celle entrée dans la textBox1 de l'userform précédent.

    Actuellement, le code entré me permet de lister les lignes de ma feuille, mais je ne sais pas comment afficher autre chose que le numéro de ligne. Ce que je souhaite, c'est afficher les valeurs des cellules de la colonne M (Société) de ces mêmes lignes, et non plus le numéro de ligne.

    Un aperçu de ma feuille Recap :
    Nom : Recap.jpg
Affichages : 1657
Taille : 491,0 Ko

    Userform Srecherche :
    Nom : SRecherche.jpg
Affichages : 1326
Taille : 48,8 Ko

    Userform SFiches :
    Nom : SFiches.jpg
Affichages : 1486
Taille : 175,4 Ko
    La liste des numéros de lignes dont les dates en colonne AA (feuille "Recap") correspondent à celle saisie dans le Textbox1 de SRecherche

    Le code dans l'userform SFiches :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Private Sub ListBox1_Click() 'OK
    With Me.ListBox1
      AfficheTextBox .ListIndex + 2 ' N° d'index + 2 parce-que le premier élément est 0 et la ligne des données commence à 2
     End With
    End Sub
    Sub AfficheTextBox(Ligne) 'OK
    Dim c As Byte, d As Byte, e As Byte
     
    For c = 2 To 4
     ' Place dans TextBox + c la valeur de la colonne C + 1 (a partir de la colonne ) de la ligne définie par l'argument ligne
       Me.Controls("TextBox1") = Sheets("Recap").Cells(ListBox1.Value, 1)
       Me.Controls("TextBox" & c) = Sheets("Recap").Cells(ListBox1.Value, c + 1)
       Me.Controls("TextBox5") = Sheets("Recap").Cells(ListBox1.Value, 9)
     Next c
     
     For d = 6 To 19
       Me.Controls("TextBox" & d) = Sheets("Recap").Cells(ListBox1.Value, d + 6)
       Next d
     
     For e = 20 To 21
       Me.Controls("TextBox" & e) = Sheets("Recap").Cells(ListBox1.Value, e + 6)
       Next e
     
     For f = 1 To 3
       Me.Controls("ComboBox" & f) = Sheets("Recap").Cells(ListBox1.Value, f + 5)
       Next f
     
     
     End Sub
     
    Private Sub NouvelleRecherche_Click() 'OK
    SRecherche.TextBox1 = ""
    Unload Me
    SRecherche.Show
    End Sub
     
    Private Sub UserForm_initialize()
    Dim cell As Range, myRange As Range
    Dim x As Long
    Sheets("Recap").Activate
    x = Range("A65536").End(xlUp).Row
    Set myRange = Sheets("Recap").Range("AA2" & ":" & "AA" & x)
    ListBox1.Clear
    For Each cell In myRange
     With Me.ListBox1
     If Format(cell.Value, "mm/yyyy") = SRecherche.TextBox1.Value Then
        ListBox1.AddItem cell.Row
        End If
        End With
    Next
    End Sub
    Si quelqu'un sait comment faire et souhaite m'aider.

    Merci d'avance.

    Aëthan

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Peut-être comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     If Format(cell.Value, "mm/yyyy") = SRecherche.TextBox1.Value Then
        ListBox1.AddItem Range("M" & cell.Row)

  3. #3
    Membre averti
    Homme Profil pro
    Technico commercial
    Inscrit en
    Juin 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technico commercial

    Informations forums :
    Inscription : Juin 2014
    Messages : 20
    Par défaut
    Bonjour Parmi,

    à nouveau tu es mon sauveur !!!

    Merci infiniment pour ton efficacité et ta rapidité !!!

    J'ai bloqué toute la journée hier dessus. Tu me retires une grosse épine du pied !

    En revanche maintenant, j'ai une erreur d’exécution 13 : incompatibilité de type à partir de la ligne 11 dans ma fonction AfficheTextBox(Ligne)

    Du coup c'est vrai pour toutes les lignes de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("TextBox1") = Sheets("Recap").Cells(ListBox1.Value, 1)
    de ma fonction.

    Je suppose que je dois modifier le type dans "Sheets("Recap").Cells(ListBox1.Value, 1) mais je t'avoue que je ne suis pas encore suffisamment familier avec la syntaxe VBA pour comprendre où ça bugue.

    Merci pour ton aide.

    Aëthan

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Je pense que ce serait plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("TextBox1") = Sheets("Recap").Cells(Ligne, 1)
    Ligne étant le paramètre que tu passes à ta procédure...

  5. #5
    Membre averti
    Homme Profil pro
    Technico commercial
    Inscrit en
    Juin 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technico commercial

    Informations forums :
    Inscription : Juin 2014
    Messages : 20
    Par défaut
    Bonjour Parmi,

    Merci pour ta réponse. En effet, en applicant ton code, le problème d'incompatibilité de type disparaît mais les données qui remontent dans les textbox du userform ne suivent plus les numéros de lignes auxquelles elles sont censées correspondre dans la listbox. Elles suivent simplement l'ordre linéaire de la feuille à laquelle elles sont rattachées (A1, A2, A3...)

    Néanmoins, grâce à ton code , j'ai pu trouver la solution au problème en ajoutant une colonne à la listbox (largeur 0 pour la rendre invisible pour l'utilisateur) et en déclarant une variable ainsi :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Option Explicit
    
    Private Sub ListBox1_Click() 'OK
    With Me.ListBox1
      AfficheTextBox .ListIndex + 2 ' N° d'index + 2 parce-que le premier élément est 0 et la ligne des données commence à 2
     End With
    End Sub
    Private Sub AfficheTextBox(Ligne) 'OK
    Dim c As Byte, d As Byte, e As Byte, f As Byte, lignebd As Long
    lignebd = ListBox1.List(Ligne - 2, 0)
    For c = 2 To 4
     ' Place dans TextBox + c la valeur de la colonne C + 1 (a partir de la colonne ) de la ligne définie par l'argument ligne
       Me.Controls("TextBox1") = Sheets("Recap").Cells(lignebd, 1)
       Me.Controls("TextBox" & c) = Sheets("Recap").Cells(lignebd, c + 1)
       Me.Controls("TextBox5") = Sheets("Recap").Cells(lignebd, c + 9)
     Next c
     
     For d = 6 To 19
       Me.Controls("TextBox" & d) = Sheets("Recap").Cells(lignebd, d + 6)
       Next d
       
     For e = 20 To 21
       Me.Controls("TextBox" & e) = Sheets("Recap").Cells(lignebd, e + 6)
       Next e
       
     For f = 1 To 3
       Me.Controls("ComboBox" & f) = Sheets("Recap").Cells(lignebd, f + 5)
       Next f
       
     End Sub
    
    Private Sub NouvelleRecherche_Click() 'OK
    SRecherche.TextBox1 = ""
    Unload Me
    SRecherche.Show
    End Sub
    
    Private Sub UserForm_initialize() 'OK
    Dim cell As Range, myRange As Range
    Dim x As Long
    ListBox1.Clear
    Me.ListBox1.ColumnCount = 2
    Me.ListBox1.ColumnWidths = "0;140"
    
    Sheets("Recap").Activate
    x = Range("A65536").End(xlUp).Row
    Set myRange = Sheets("Recap").Range("AA2" & ":" & "AA" & x)
    
    For Each cell In myRange
     With Me.ListBox1
     If Format(cell.Value, "mm/yyyy") = SRecherche.TextBox1.Value Then
        ListBox1.AddItem cell.Row
       ListBox1.List(ListBox1.ListCount - 1, 1) = Range("M" & cell.Row)
        End If
        End With
    Next
    End Sub
    En tout cas, merci encore infiniment pour ton temps et ton expertise.

    C'est grâce à des gens comme toi qu'on progresse.

    Aëthan.

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

Discussions similaires

  1. [Toutes versions] Remplir une ListBox avec les données d'une autre feuille
    Par Valoche37 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/01/2012, 17h25
  2. [XL-2007] Remplir une ListBox avec les captions de CheckBoxs
    Par brunounours dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/11/2011, 11h36
  3. Réponses: 3
    Dernier message: 29/09/2009, 13h06
  4. [C#] Peupler une listBox avec les controls d'un panel ?
    Par clinic dans le forum Windows Forms
    Réponses: 5
    Dernier message: 11/07/2007, 21h41
  5. Réponses: 12
    Dernier message: 22/06/2006, 13h09

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