Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 VBA problème remplissage ListBox avec .Column

agourn

XLDnaute Junior
Bonjour à tous,
merci de voir ce code qui me donne un message d'erreur : impossible de définir la propriété Column.
VB:
With Me.malistbox

Nb_list=.listcount

for i=0 to Nb_List-1

x=.List(i)

  'code pour calculer 6 paramètres Aj, j=1 à 6 fonction de x

.column(1,i)=A1

.column(2,i)=A2

'etc



next i
merci à vous
 
Solution
Bonjour agourn ,Thierry ,le Forum
je pensais a un truc comme ça ! Lol
VB:
Private Sub UserForm_Initialize()
Dim T As Variant
Dim f As Worksheet
Dim x  As Long
 f = Worksheets("A")
 T = f.Range("A2:A21").Value
    With Me.ListBox1
           .ColumnHeads = False
           .ColumnCount = 7
           .ColumnWidths = "35;100;40;40;40;60;50"
        For L = 1 To UBound(T, 1)
            x = T(L) * 100
           .AddItem x
                    A1 = Application.VLookup(x, PVLP.Range, 2, False)
                    A2 = Application.VLookup(x, PVLP.Range, 3, False)
                    A3 = Application.VLookup(x, PVLP.Range, 4, False)
                    A4 = Xquantite(i)
                    A5 = A3 / A1
                    A6 = A4 / A2...

agourn

XLDnaute Junior
on ne peut pas écrire .list(.listcount-1,1) seulement car je remplis les colonnes de toutes les lignes , pas seulement la dernière ligne. Donc dans la boucle i=0 to .listcount-1.

Malistbox est juste remplie par .list=un tableau 1D
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re bonjour @ tous

Désolé Jean Marie, voici la preuve par neuf sur fichier démo.

NOT GOOD :
VB:
Option Explicit
Private Sub UserForm_Initialize()
Dim R As Range
Dim T As Variant

Set R = Range("A2:A21")
T = R

With Me.ListBox1
.ColumnCount = 3
.ColumnWidths = "80, 80, 80"
.List = T
End With
End Sub


Private Sub CommandButton1_Click()
Dim x As Integer

With Me.ListBox1
For x = 0 To .ListCount - 1
.Column(1, x) = x + 1 & "-Zaza"
.Column(2, x) = x + 1 * 100
Next x
End With

End Sub


GOOD GOOD :
VB:
Option Explicit
Private Sub UserForm_Initialize()
Dim R As Range, C As Range

Set R = Range("A2:A21")

With Me.ListBox1
.ColumnCount = 3
.ColumnWidths = "80, 80, 80"

For Each C In R
.AddItem C
Next C
End With
End Sub


Private Sub CommandButton1_Click()
Dim x As Integer

With Me.ListBox1
For x = 0 To .ListCount - 1
.Column(1, x) = x + 1 & "-Zaza"
.Column(2, x) = x + 1 * 100
Next x
End With

End Sub

Tout dépend donc bien depuis quelle méthode on a commencé à alimenter la ListBox...

Bon Dimanche
@+Thierry

EDIT et j'ai essayé aussi :
VB:
With Me.ListBox1
For x = 0 To .ListCount - 1
.List(x, 1) = x + 1 & "-Zaza"
.List(x, 2) = x + 1 * 100
Next x
End With

Même "punition" si laListBox1 n'est pas alimentée originalement par AddItem...
 

Pièces jointes

  • XLD_agourn_Test_MaListBox_Column_Add_Items.xlsm
    19.1 KB · Affichages: 13
Dernière édition:

agourn

XLDnaute Junior
Merci Thierry. Je vais essayer et te dire.
Je me doutais bien qu'il y avait une histoire de l'origine de remplissage de la listbox. Comme j'ai écris plus haut :
j'ai l'impression que .Column ne fonctionne qu'après un .additem
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re @agourn , JM
Oui tu l'avais écrit, et du coup ça m'a turlupiné, et du coup j'ai fait le fichier démo pour en avoir le coeur net !
Bien à vous
@+Thierry

EDIT PS pour Jean Marie, oui je vais bien merci, juste un peu enquilosé après le confinement, mais bon on reprend du poil de la bête ! Et toi à quand un nouvel ordi alors ?
 

ChTi160

XLDnaute Barbatruc
Bonjour agourn ,Thierry ,le Forum
je pensais a un truc comme ça ! Lol
VB:
Private Sub UserForm_Initialize()
Dim T As Variant
Dim f As Worksheet
Dim x  As Long
 f = Worksheets("A")
 T = f.Range("A2:A21").Value
    With Me.ListBox1
           .ColumnHeads = False
           .ColumnCount = 7
           .ColumnWidths = "35;100;40;40;40;60;50"
        For L = 1 To UBound(T, 1)
            x = T(L) * 100
           .AddItem x
                    A1 = Application.VLookup(x, PVLP.Range, 2, False)
                    A2 = Application.VLookup(x, PVLP.Range, 3, False)
                    A3 = Application.VLookup(x, PVLP.Range, 4, False)
                    A4 = Xquantite(i)
                    A5 = A3 / A1
                    A6 = A4 / A2
                                
           .List(.ListCount - 1, 1) = A1
           .List(.ListCount - 1, 2) = A2
           .List(.ListCount - 1, 3) = A3
           .List(.ListCount - 1, 4) = A4
           .List(.ListCount - 1, 5) = A5
           .List(.ListCount - 1, 6) = A6
        Next L
    End With
End Sub
Non testé !
Bonne journée
jean marie
 

Discussions similaires

Réponses
17
Affichages
851
Réponses
6
Affichages
380
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…