Value d'une listview
Bonjour
je vous remercie d'avance pour la response
Y a t il un de lire la valeur ( .value) et non pas le texte ( .text) d'une cellule d'une listview ???
merci encore une fois
Bonjour a tous
merci pour la lecture de ma demande ( mais pas encore de réponse)
je re-formule
(j'ai pris le fichier en piece jointe dans le forum, merci au créateur)
j'aimerais l'adapter à mon fichier, voici mon problème
tous fonctionne bien!!!! j'aimerais ajouter une chose
au trie du ComboBox "CbbStatut" (bien sur le trie peu se faire sur plusieurs ComboBox) j'aimerais qu'il y ai un ajout (comme ligne)à la ListView ou il y aurais le total de la colonne 4 (ou bien le total de toutes les colonnes quan les cellules sont remplies de chiffres et non pas de lettre)
merci énormément pour l'aide
Re- Bonjour
j'ai réussi à réaliser ma demande,
pour celui qui aimerais avoir cela, je joint les code
créer un userform, avec 3 Combobox (ComboBox1, ComboBox2, ComboBox3)
la feuille est nommé "VENTE" avec 10 colonnes
le trie se fait sur les colonnes B, C et D
les résultats sont ceux des colonnes H, I et J
Pour celui qui à une meilleur idée, je suis toujours preneur, je ne clore pas le sujet pour le moment
Option Explicit
Option Compare Text
Dim V As Worksheet
Private Sub ComboBox1_Change() ' CbbMandant_Change() MondicoMand
RemplissageListView
End Sub
Private Sub ComboBox2_Change() ' CbbResponsable_Change() MondicoResp
RemplissageListView
End Sub
Private Sub ComboBox3_Change() ' CbbStatut_Change() MondicoStat
RemplissageListView
End Sub
Private Sub UserForm_Initialize()
Dim MondicoCbB1 As Object, MondicoCbB2 As Object, MondicoCbB3 As Object
Dim J As Long, T2
Dim l As Integer, i As Integer, q As Integer
Dim n, m, lg, cl As Long
Set V = Sheets("VENTE")
Set MondicoCbB1 = CreateObject("Scripting.dictionary")
Set MondicoCbB2 = CreateObject("Scripting.dictionary")
Set MondicoCbB3 = CreateObject("Scripting.dictionary")
With V
For J = 2 To .Range("A" & Rows.Count).End(xlUp).Row
If .Range("B" & J) <> "" Then MondicoCbB1(.Range("B" & J).Value) = ""
If .Range("C" & J) <> "" Then MondicoCbB2(.Range("C" & J).Value) = ""
If .Range("D" & J) <> "" Then MondicoCbB3(.Range("D" & J).Value) = ""
Next J
End With
If MondicoCbB1.Count > 0 Then T2 = MondicoCbB1.keys: Tri T2, LBound(T2), UBound(T2): Me.ComboBox1.List = T2
If MondicoCbB2.Count > 0 Then T2 = MondicoCbB2.keys: Tri T2, LBound(T2), UBound(T2): Me.ComboBox2.List = T2
If MondicoCbB3.Count > 0 Then T2 = MondicoCbB3.keys: Tri T2, LBound(T2), UBound(T2): Me.ComboBox3.List = T2
UserForm3.ListView1.FullRowSelect = True ' surligne la ligne entière de la sélection
UserForm3.ListView1.Gridlines = True ' Quadrillage activé
UserForm3.ListView1.LabelEdit = 1 ' empêche la modification des données
'----- remplissage ListView------------------------
With UserForm3.ListView1
With .ColumnHeaders
.Clear 'Supprime les anciens entêtes
For l = 2 To 10
.Add , , V.Cells(1, l), 62
Next l
End With
RemplissageListView
End With
'--------------------------------------------------
UserForm3.ListView1.View = lvwReport
End Sub
Sub RemplissageListView()
Dim J As Long
Dim i, l, Nb As Integer
Dim Cumul, Cumul1, Cumul2 As Double
i = 0
With Me.ListView1
.ListItems.Clear
For J = 2 To Range("B" & Rows.Count).End(xlUp).Row
If V.Range("B" & J) Like Me.ComboBox1 & "*" And _
V.Range("C" & J) Like Me.ComboBox2 & "*" And _
V.Range("D" & J) Like Me.ComboBox3 & "*" Then
.ListItems.Add , V.Cells(J, "B").Address, V.Cells(J, "B")
Nb = Nb + 1
For l = 2 To .ColumnHeaders.Count
.ListItems(Nb).ListSubItems.Add , , V.Cells(J, l + 1)
Next l
End If
Next J
'Boucle sur toutes les valeurs de la 7eme colonne
On Error Resume Next
For i = 1 To ListView1.ListItems.Count
Cumul = Cumul + CDbl(ListView1.ListItems(i).ListSubItems(6).Text)
Cumul1 = Cumul1 + CDbl(ListView1.ListItems(i).ListSubItems(7).Text)
Cumul2 = Cumul2 + CDbl(ListView1.ListItems(i).ListSubItems(8).Text)
Next i
ListView1.ListItems.Add (.ListItems.Count + 1), , "TOTAL"
ListView1.ListItems(.ListItems.Count).ListSubItems.Add , , ""
ListView1.ListItems(.ListItems.Count).ListSubItems.Add , , ""
ListView1.ListItems(.ListItems.Count).ListSubItems.Add , , ""
ListView1.ListItems(.ListItems.Count).ListSubItems.Add , , ""
ListView1.ListItems(.ListItems.Count).ListSubItems.Add , , ""
ListView1.ListItems(.ListItems.Count).ListSubItems.Add , , CStr(Cumul)
ListView1.ListItems(.ListItems.Count).ListSubItems.Add , , CStr(Cumul1)
ListView1.ListItems(.ListItems.Count).ListSubItems.Add , , CStr(Cumul2)
If CStr(Cumul) < CStr(Cumul1) Then
ListView1.ListItems(.ListItems.Count).ForeColor = &HFF&
ListView1.ListItems(.ListItems.Count).ListSubItems(7).ForeColor = &HFF&
End If
If CStr(Cumul) > CStr(Cumul1) Then
ListView1.ListItems(.ListItems.Count).ForeColor = &HC000&
ListView1.ListItems(.ListItems.Count).ListSubItems(7).ForeColor = &HC000&
End If
End With
End Sub
Bonjour
j'ai omie d'ajouter le module trie
je vous joint le fichier fonctionnelle
cordialement
PS : je suis toujours preneur pour une solution plus simple
Bonjour,
L'utilisation d'un ListView n'est jamais simple !
Je n'ai pas encore testé votre code juste lu sommairement, mais vous semblez avoir suivi le bon processus : C'est juste un peu fouillis.
Décomposez votre code en opérations élémentaires pour pouvoir le factoriser (généraliser)
Tout ce bazar n'a rien à fiche dans le UserForm initialize :
Le UserForm_Initialize doit comporter juste quelques déclarations et les principaux appel de routines...
InitVariables '(instanciation)
InitData '(Affectation des variables aux Sources, Chargement des Dicos)
InitControls '(TextBox,Combo...)
InitListViews '(Chez moi cette routines se décompose généralement en plusieurs sous-routines: InitProperty, InitHeader, initListRw...
ReadRecord...
En dernier ressort terminer l'optimisation : A l'intérieur de la boucle "With Me.Listview1" il n'est pas normal de trouver 17 fois le terme "Listview1"
D'ailleurs personnellement plus loin j'aurais réécris la procédure de chargement de la manière suivante :
With .ListItems(.ListItems.Count).ListSubItems
.add, , ""
.add, , ""
'...
Enfin n'utilisez pas de variables à un seul caractères : ni même T2
Dim J As Long, T2
Dim l As Integer, i As Integer, q As Integer
Dim n, m, lg, cl As Long
...En particulier le "l" qu'on confond facilement avec un 1 dans le code ...
Contentez vous à la rigueur de "i" que vous pouvez à la rigueur utiliser dans une courte boucle de contrôle dans une expression "For i = ...Next"
Mais si la boucle est longue utilisez plutôt iR ou iC si cette variable identifie des N° de ligne(iR) ou de colonne(iC) ...
Ces variables à un seul digit rendent votre code illisible, et ne permettent pas la recherche et le remplacement des variables: Cela ne donne vraiment pas envie de vous aider...
Edit : Je viens seulement de lire votre dernier fichier. T2 ne semble pas défini : Je comprend que T2 est un Array ? Dans ce cas utilisez la variable "Arr" ou "Tablo". Tout le monde comprendra ! mais surtout définissez le contenu de ce tableau parce qui Tri T2 ne signifie rien si T2 est vide !
Edit(2) : quand vous écrivez :
Dim Cumul, Cumul1, Cumul2 As Double
'seul Cumul2 est défini "as Double" Cumul et Cumul1 sont variant. Utilisez :
Dim CumulAs Double, Cumul1As Double, Cumul2 As Double 'ou mieux :
Dim Cumul#, Cumul1#, Cumul2#
A+
Pour conclure, votre fichier modifié (en pièce jointe) pour tenir compte de mes indications précédentes.
Nota : Je l'ai juste restructuré un peu pour lui donner un peu de lisibilité, mai j'ai gardé votre approche qui n'est pas si mal que ça !
Vous pouvez le prendre pour un compliment !
Les axes d'améliorations possible surtout si la base de données est importante (Plusieurs dizaines (centaines ?) de milliers de lignes...
Utiliser un seul dico au lieu de 3
Pour charger le Dico au lieu de parcourir la feuille Charger un Array avec les valeur de la plage
Dim Tablo
Tablo = Ws.[A1].CurrentRegion.Value
et parcourir Tablo pour charger le Dico.
Dans cet exemple le gain de temps serait invisible, avec 600 000 lignes le temps serait divisé par 20... (environ)
Pour charger le ListView refactoriser au moins les ListItems... (dans la dernière partie) Pas de gain de temps mais visuellement c'est plus clair !
A+
Bonjour Galopin01, Bonjour à tous..
je te remercie enormement d'etre penché sur ce fichier,
c'est grace à ce forum que j'ai appris et j'apprendrais toujours
merciiiiiiiiiiiiii
le remue ménage est parfait!!!!
quand est ce que je saurais faire des choses pareil !!!
merci ncore une fois
Re bonjour Galopin01
je me permet de poser une question!!
quel est la diference entre
Dim iR as integer
et
Dim iR%
Merci d'avance
Aucune !