Mise en forme d'une listbox dans un userform [Résolu]

Messages postés
140
Date d'inscription
lundi 9 juin 2008
Dernière intervention
18 avril 2012
- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
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

Merci ucfoutu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Pas bonjour non plus

Apparemment, tu n'as pas compris ce que "coloration syntaxique" veut dire :
Colle ton code ici
Sélectionne le code collé entièrement
Clique si la 3ème icone à droite
C'est tout, ne touche plus à rien, ne supprime pas de balise.

"je souhaiterais mettre ces donnees sous forme d'un tableau."
Ca ne veut rien dire

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
140
Date d'inscription
lundi 9 juin 2008
Dernière intervention
18 avril 2012
0
Merci
sur les anciens posts j'ai dis bonjour, ce que je fait toujours en general.
alors bonsoir a tous

je souhaite avoir dans une viewlist mes donnees avec une visualisation comme sur une feuille excel , cest a dire avec des lignes et des colonnes pour mieux m'y retrouver.



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
Commenter la réponse de chris09300
Messages postés
14321
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
13 décembre 2018
0
Merci
Bonjour,

Ressemble à un doublon :
http://www.vbfrance.com/forum/sujet-VBA-MISE-FORMED-LISTBOX-DANS-USERFORM_1554329.aspx

Sinon, voici comment tu devrais faire :
[code=vb]MonCode[/ code]

(sans l'espace pour le /code bien sûr)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Je ne m'exciterais pas sur la méthode à utiliser pour coloriser du code, je pense que c'est peine perdue.
Oh pis si.
Est-ce que tu prends le temps de lire ce qu'on t'écrit ?
[i]Colle ton code ici
Sélectionne le code collé entièrement
Clique si la 3ème icone à droite
C'est tout, ne touche plus à rien, ne supprime pas de balise./i
Est-ce que c'est si dure à appliquer ?

Quant à ton problème :
Tu nous dis en quelques mots ce que tu souhaites, puis tu nous colles du code, y compris du code qui n'a rien à voir avec le problème.
La prochaine fois, ne colle que la partie qui remplit ta ListView, le reste, on s'en fiche. Pourquoi voudrais-tu qu'un Clic change quoi que ce soit aux données ou à leur présentation ?

Prends le temps d'exposer clairement ton problème.
Dire que ça ne marche pas ne suffit pas.
Que reproches-tu à ton code ?
Que vois-tu ?
Qu'est ce qui ne te plait pas dans ce que tu vois ?

On n'est pas sur un Chat, c'est un forum.
Il faut être clair, précis et donner le maximum de détails à la première demande. N'attends pas qu'on te les demande - on n'est pas 24h/24 devant l'écran pour les doux yeux des autres - si ton problème traine en longueur, on risque de ne plus aller le suivre ...
Commenter la réponse de cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
PS : Pour quelque chose qui ressemble plus à une feuille Excel, je trouve que le DataGridView serait plus adapté esthétiquement parlant.
Commenter la réponse de cs_Jack
Messages postés
140
Date d'inscription
lundi 9 juin 2008
Dernière intervention
18 avril 2012
0
Merci
bonjour
j'ai regarder pour faire un datagridview mais je n'est pas trouver de tutos. je veux bien essayer. Connais tu un lien ou je pourrais trouver des infos, mercia toi
cris
Commenter la réponse de chris09300

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.