Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/08/2011, 18h16   #1
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Par défaut (Débutant) ListBox à deux colonnes

Bonjour à tous,

Je rame pas mal, même après avoir parcouru la documentation sur ce site.
J'arrive à afficher dans une Listox les données d'une colonne ("A") selon une condition, mais je n'arrive pas à afficher les données de la colonne ("D") selon la même condition

Pour faire simple, voici le code,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
Private Sub UserForm_Activate()
ListBox1.Clear
ListBox1.Visible = True
ListBox1.ColumnCount = 2
ListBox1.ColumnWidths = "50;50"
ListBox1.TextAlign = fmTextAlignCenter
        Worksheets("Feries").Select
        Range("A1").Select
 
    Dim i, j, x, y As Integer
    i = Range("A1048576").End(xlUp).Row
    On Error Resume Next
    x = 1
    For j = 2 To i
    If Range("D" & j) = Label1.Caption Then
    ListBox1.AddItem Format(Range("A" & j).Value, "dd/mm/yyyy")
    ' Ici ajouter une colonne dans la ListBox et afficher les données de la colonne ("D") de la feuille excel
    x = x + 1
    End If
    Next j
End Sub
Merci de m'avoir lu

Fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 18h47   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 889
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 889
Points : 7 162
Points : 7 162
Bonjour,

Essai cette ligne

Code :
ListBox1.List(ListBox1.ListCount - 1, 1) = Range("D" & j).Value
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2011, 21h22   #3
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 692
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 692
Points : 1 443
Points : 1 443
Bonjour,

J’obtiens le résultat avec

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub UserForm_Activate()
Dim i As Long, j As Long
    ListBox1.Clear
    ListBox1.Visible = True
    ListBox1.ColumnCount = 2
    ListBox1.ColumnWidths = "50;50"
    ListBox1.TextAlign = fmTextAlignCenter
    With Worksheets("Feries")
        i = .Range("A" & .Rows.Count).End(xlUp).Row
        On Error Resume Next
        For j = 2 To i
            If Range("D" & j) = Label1.Caption Then
                ListBox1.AddItem Format(.Range("A" & j).Value, "dd/mm/yyyy")
                ListBox1.List(j - 2, 1) = .Range("D" & j)
            End If
        Next j
    End With
End Sub
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 08h42   #4
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Par défaut Merci, mais....

Merci à jfontaine et à gFZT82 pour votre précieuse aide.

Mais simplement faire un copier-coller ne me suffit pas.

J'ai testé les deux exemples, J'ai repris le code en entier de gFZT82 qui ne m'affiche dans la ListBox qu'une seule colonne avec :

Code :
1
2
3
4
5
6
7
ListBox1.AddItem Format(.Range("A" & j).Value, "dd/mm/yyyy")
ListBox1.List(j - 2, 1) = .Range("D" & j)
 
J'ai donc remplacé la deuxième ligne de code par celle jfontaine :
 
ListBox1.AddItem Format(.Range("A" & j).Value, "dd/mm/yyyy")
ListBox1.List(ListBox1.ListCount - 1, 1) = Range("D" & j).Value
et j'ai testé en ajoutant des colonnes dans la ListBox et cela fonctionne.

Que signifie donc, (j - 2, 1) ou (ListBox1.ListCount - 1, 1)

Encore merci pour votre aide.

Fasedan
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 08h59   #5
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonjour,

Une autre façon très similaire mais avec column. Quand, pour indiquer une colonne dans la listbox, on utilise l'index de la boucle il faut bien faire attention à partir de quelle valeur on commence (j = 2 to i), ici j commence à 2 alors que la listbox est en base 0, il faut alors déduire 2 à j pour faire référence à la bonne ligne. C'est pour cette raison qu'il est préférable d'incrémenter une variable dédiée (dans mon exemple, x) ou d'utiliser "ListBox1.ListCount - 1" :
Code :
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
 
Private Sub UserForm_Initialize()
 
    Dim I As Long
    Dim j As Long
    Dim x As Long
 
    With ListBox1
 
        .Clear
        .Visible = True
        .ColumnCount = 2
        .ColumnWidths = "50;50"
        .TextAlign = fmTextAlignCenter
 
    End With
 
 
    With Worksheets("Feries")
 
    I = Range("A" & .Rows.Count).End(xlUp).Row
 
        For j = 2 To I
 
            If .Range("D" & j) = Label1.Caption Then
 
                ListBox1.AddItem Format(.Range("A" & j).Value, "dd/mm/yyyy")
                ListBox1.Column(1, x) = .Range("D" & j)
                x = x + 1
 
            End If
 
        Next j
 
    End With
 
End Sub
Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 19h13   #6
Candidat au titre de Membre du Club
 
Inscription : septembre 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 48
Points : 11
Points : 11
Par défaut Merci à tous

Encore merci à tous pour avoir éclairé ma lanterne.
Je reviendrais surement plus tard pour d'autres questions.

Fasedan.
fasedan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h24.


 
 
 
 
Partenaires

Hébergement Web