Zone de liste à 2 colonnes

A

Arsene

Guest
Bonjour à tous!! J'espere que ce début de semaine se déroule bien pour vous tous! ( Bientôt Noël! youpi! lol )
Bien, hormis la joie qui m'envahie à l'idée de fêter Noël ( et de ne pas aller au boulot vendredi ^^), j'aimerai trouver réponse à ma question aupres de vous.

La voici:

J'aimerai afficher dans un formulaire, une zone de liste comportant 2 colones ( par exemple un champ "Année" et un champ " Chiffre d'affaire" ).
Voilà je voudrais donc savoir tout ce que dois faire pour y arriver...

En attendant votre réponse je vous prie d'agréer blablablabla... ^^
Merci d'avance!
 
C

Charlie

Guest
Bonjour,

Méthode récupérée sur ce forum :
Faire une liste de validation (Menu Données) avec la première colonne nommée (Menu Isertion).
La liste installée, modifier la référence du nom de la plage en englobant les deux colonnes.

Charlie
 
A

Arsene

Guest
Merci beaucoup pour tes indications, même si j'avoue n'avoir pas saisie grand chose à tes explications... ( finalement je dois bien être un noob du VBA ^^ )

Aurais tu ( ou quelqu'un d'autre ) le lien vers la réponse existante sur ce forum?

Merci beaucoup, et merci d'avance!
 
M

michel

Guest
bonjour Arsene , bonjour Charlie

j'espere que l'exemple joint pourra t'aider

michel
lapin4.gif
 

Pièces jointes

  • Listbox_multicolonne.zip
    14.2 KB · Affichages: 56
C

Charlie

Guest
Pas à pas :

Les deux colonnes existantes en A et B.
Sélectionne la colonne A
Menu Insertion / Nom / Définir / donne un nom, par exemple : année / OK
Sélectionne la plage devant contenir la liste de validation, par exemple C1:C10
Menu Données / Validation / Autoriser : liste / Source : =année / OK
Menu Insertion / Nom / Définir / choisi : année / Source : modifie $A:$A en $A:$B
En sélectionnant une cellule de la plage C1:C10 les données des colonnes A et B s'afficheront comme suit : A1, B1, A2, B2, A3, B3, ...
En cliquant sur une des données, celle-ci s'affichera dans la cellule
 
A

Arsene

Guest
Super!! Merci beaucoup de me fournir ce code qui fonctionne parfaitement!
Je vais encore t'embetter, mais si tu ( ou quelqu'un d'autre ) pouvais m'expliciter le code en lui même...
A quoi correspond un objet de type byte?
Que fait cette instruction? Z = Sheets(1).Range("A65536").End(xlUp).Row - 1

Enfin là j'indique les gros points noirs, mais si on pouvais m'indiquer de façon détaillé ce que fait en gros chaque ligne du code...

Je sais, je suis chiant avec mes questions! ^^
Encore merci, et merci d'avance!
 
C

coco

Guest
Bonjour arsene, le forum.
Pour tes deux colonnes à afficher, tu peux aussi dans les propriétés de ton listbox donner la valeur "2" à la propriété columncount. Tu peux aussi régler la position de tes colonnes en jouant sur la propriété columnwidths.
En ce qui concerne l'instruction Z= sheets(1). ran....... il s'agit de donner à la variable "Z" le numéro de ligne de l'avant dernière cellule non vide de la colonne "A".
Enfin un conseil que j'ai lu à maintes reprise sur ce forum et dont les résultats sont hyper bénéfiques : c'est l'usage de l'aide sous VBA (F1 sur une propriété d'objet par exemple).
Bonnes fêtes à tous.
Coco
 
M

michel

Guest
bonsoir

j'ai essayé de commenter la procédure , mais je ne suis pas sur d'etre tres clair dans mes indications
comme le faisait justement remarquer Coco , tu pourras aussi avoir d'autres infos interessantes en utilisant la touche F1

je joins aussi une liste de description des differentes variables


Private Sub UserForm_Initialize() 'initialisation de l'Userform lors de son chargement
'Dim val As String ' variable sans utilité ... je devais encore avoir la tete ailleurs...
Dim W As Integer 'variable pour le numero de ligne du classeur dans la boucle
Dim X As Byte ' variable pour incrementer le tableau dynamique
Dim Z As Byte ' variable pour le nombre de lignes total à recuperer
Dim Myarray() 'tableau dynamique pour recuperer les données

'Le nombre de colonnes dans la listbox est défini dans les propriétés
' ( ColumnCount ) = 2 dans l'exemple

Label1.Caption = "Liste des C.A. : " ' texte dans Label1
Label2.Caption = Sheets(1).Cells(1, 1) 'texte de la cellule A1dans Label2 ANNEE
Label3.Caption = Sheets(1).Cells(1, 2) 'texte de la cellule B1 dans Label3 CHIFFRE D'AFFAIRE

Z = Sheets(1).Range("A65536").End(xlUp).Row - 1 'definit le nombre de lignes dans le tableau
' -1 pour enlever la 1ere ligne qui ne correspond pas à un chiffre d'affaire

ReDim Myarray(2, Z) ' redimensionnement (REDIM) du tableau dynamique
'2=nombre colonnes et Z le nombre de lignes
'particularité des tableaux dynamiques : Myarray(Colonne ,Ligne), avec "l'index" de la premiere ligne
' et de la premiere colonne =0
' par exemple Myarray(0,X) pour le remplissage de la premiere colonne

For W = 2 To Z + 1 ' boucle de la ligne 2 , à la derniere ligne non vide , pour remplir le tableau dynamique
Myarray(0, X) = Sheets(1).Cells(W, 1)
Myarray(1, X) = Sheets(1).Cells(W, 2)
X = X + 1
Next

'*************************************************************************
'en me relisant , une autre version sans utiliser la variable X
'For W = 2 To Z + 1
' Myarray(0, W - 2) = Sheets(1).Cells(W, 1)
' Myarray(1, W - 2) = Sheets(1).Cells(W, 2)
'Next
'**************************************************************************

ListBox1.Column() = Myarray 'remplissage de la Listbox à partir du tableau dynamique

End Sub


bonne soirée
michel
lapin4.gif
 

Discussions similaires

Statistiques des forums

Discussions
313 020
Messages
2 094 434
Membres
106 027
dernier inscrit
DonSparks