Mise en forme d'une listbox dans un userform

Résolu
chris09300 Messages postés 140 Date d'inscription lundi 9 juin 2008 Statut Membre Dernière intervention 18 avril 2012 - 4 nov. 2011 à 21:16
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 5 nov. 2011 à 11:20
J'espere que cette fois je suis dans le bon theme, a chaque fois je mis perd.
excuser moi encore

je travaille sur excel 2007
je le probleme suivant.
j'ai un userform dans lequel j'ai une listbox alimentee par des donnees d'une feuille.
j'ai bien le resultat escompter, sans mise en forme, je souhaiterais mettre ces donnees sous forme d'un tableau.
merci pour vos conseil
cris

voici le code que j'ai.

Code Visual Basic :

Option Explicit

Const LIGNE_DEBUT_LISTE As Integer = 2
Const LIGNE_FIN_LISTE As Integer = 70 'est la limite à modifier en fonction de la longueur de la liste du tableau Excel

Const COLONNE_Nº As Integer = 1
Const COLONNE_PRENOM As Integer = 2
Const COLONNE_Nom As Integer = 3
Const COLONNE_datenaissance As Integer = 4

Dim iLigne As Integer


Private Sub Userform_Initialize()
With ThisWorkbook.Sheets(3) 'ou : With ThisWorkbook.Sheets("BD1")
ListBox1.ColumnCount = 3
ListBox1.ColumnWidths = "20;60;60"
For iLigne = LIGNE_DEBUT_LISTE To LIGNE_FIN_LISTE
ListBox1.AddItem
ListBox1.List(iLigne - LIGNE_DEBUT_LISTE, 0) = .Cells(iLigne, COLONNE_Nº).Value
ListBox1.List(iLigne - LIGNE_DEBUT_LISTE, 1) = .Cells(iLigne, COLONNE_PRENOM).Value
ListBox1.List(iLigne - LIGNE_DEBUT_LISTE, 2) = .Cells(iLigne, COLONNE_Nom).Value
Next iLigne
End With
ListBox1.Selected(0) = True
End Sub

Private Sub ListBox1_Click()
For iLigne = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(iLigne) = True Then
datenaissance ThisWorkbook.Sheets(3).Cells(iLigne + LIGNE_DEBUT_LISTE, COLONNE_datenaissance).Value 'datenaissance ... au lieu de : TextBox_datenaissance = ... car le TextBoax se nomme : datenaissance
End If
Next iLigne
End Sub
Private Function fctAge(ByVal DN As Variant) As String
If IsDate(DN) Then
fctAge = CStr(DateDiff("yyyy", Me.datenaissance.Value, Date))
Else
fctAge = ""
End If
End Function
Private Sub datenaissance_Change()
If IsDate(Me.datenaissance.Value) Then Me.Age.Value = fctAge(Me.datenaissance.Value)
End Sub

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
5 nov. 2011 à 11:20
Bonjour,

J'ai toujours des difficultés à comprendre, dans les cas comme celui-ci (où il s'agit de quoi ? ==>> de "réafficher" finalement en moins bien une portion de feuille) l'utilité de passer par un autre contrôle alors que Excel est le meilleur outil en soi pour présenter des "tableaux".
Même s'il s'agissait de s'offrir la possibilité d'utiliser, dans un userform, une portion de feuille, on peut toujours le faire simplement en créant une nouvelle feuille (y compris temporaire) ne contenant que les données concernées et insérée directement dans le userform (qu'on rend parent de cette feuille). Les avantages sont multiples (mise en forme, calculs éventuels, etc...). Qui plus est : si, pour une raison ou une autre, on souhaite garder ce "tableau", rien de plus simple : on garde cette feuille dans le classeur et on la réaffiche dans le userform à la prochaine ouverture.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3