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

19classeur1.xlsm (25.41 Ko)

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+

40illyes.xlsm (34.18 Ko)

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 !

Rechercher des sujets similaires à "value listview"