sancho12345
Messages postés131Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention18 mars 2012
-
11 févr. 2010 à 21:20
sancho12345
Messages postés131Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention18 mars 2012
-
12 févr. 2010 à 21:10
Bonsoir à vous,
Pouvez-vous m?aider à résoudre ce problème s'il a une solution.
Voilà, j'ai une listview1 avec la config suivante:
With ListView1
.MultiSelect = True ' Séléction de plusieur lignes
.HideSelection = False ' Même sans le focus, la séléction reste
.FullRowSelect = True ' Séléctionne la ligne entière
.GridLines = True ' Affiche les lignes de la grille
.View = lvwReport ' Affichage en grille
'--------------------------------------------------------------------------
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders(1).Text = "Réfèrence " ' Spécifie la caption de la première colonne
.ColumnHeaders(1).Width = .Width / 4
.ColumnHeaders(2).Text = "GGGGG" ' Spécifie la caption de la deuxième colonne
.ColumnHeaders(2).Width = .Width / 4
.ColumnHeaders(3).Text = "PPPPPP" ' Spécifie la caption de la première colonne
.ColumnHeaders(3).Width = .Width / 4
.ColumnHeaders(4).Text = "MMMMM" ' Spécifie la caption de la première colonne
.ColumnHeaders(4).Width = .Width / 4
.Arrange = lvwAutoLeft ' Range tout à gauche
End With
Dans la colonne principale j'ai des références et dans les sub j'ai des quantités ( des nombres) mais il est possible que certaines références soient en doubles.
Est-ce possible lorsque 2 références sont identiques d'additionner le sub(1) de la première référence avec celui de la deuxième sub (1) même références et ceci avec les 3 sub et ensuite supprimer la ligne de la deuxième référence.
Toutes les autres références dans la listview1 ne doivent pas bouger.
Une form avec 2 listview (Listview1 et Listview2) de taille identique
Ensuite le code à insérer dans la form (voir ci-dessous)
tu n'as plus qu'à t'en inspirer pour résoudre ton problème
Private Type lignedata
reference As String
data1 As Long
data2 As Long
data3 As Long
End Type
Private data() As lignedata ' données d'une ligne de la listview
Private Sub Form_Load()
' Initialisation Listview1 et Listview2
With ListView1
.MultiSelect = True ' Sélection de plusieurs lignes
.HideSelection = False ' Même sans le focus, la sélection reste
.FullRowSelect = True ' Sélectionne la ligne entière
.GridLines = True ' Affiche les lignes de la grille
.View = lvwReport ' Affichage en grille
'--------------------------------------------------------------------------
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders(1).Text = "Réfèrence " ' Spécifie la caption de la première colonne
.ColumnHeaders(1).Width = .Width / 4
.ColumnHeaders(2).Text = "GGGGG" ' Spécifie la caption de la deuxième colonne
.ColumnHeaders(2).Width = .Width / 4
.ColumnHeaders(3).Text = "PPPPPP" ' Spécifie la caption de la troisième colonne
.ColumnHeaders(3).Width = .Width / 4
.ColumnHeaders(4).Text = "MMMMM" ' Spécifie la caption de la quatrième colonne
.ColumnHeaders(4).Width = .Width / 4
.Arrange = lvwAutoLeft ' Range tout à gauche
End With
With ListView2
.MultiSelect = True ' Sélection de plusieurs lignes
.HideSelection = False ' Même sans le focus, la sélection reste
.FullRowSelect = True ' Sélectionne la ligne entière
.GridLines = True ' Affiche les lignes de la grille
.View = lvwReport ' Affichage en grille
'--------------------------------------------------------------------------
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders.Add ' Ajout d'une colonne
.ColumnHeaders(1).Text = "Réfèrence " ' Spécifie la caption de la première colonne
.ColumnHeaders(1).Width = .Width / 4
.ColumnHeaders(2).Text = "GGGGG" ' Spécifie la caption de la deuxième colonne
.ColumnHeaders(2).Width = .Width / 4
.ColumnHeaders(3).Text = "PPPPPP" ' Spécifie la caption de la troisième colonne
.ColumnHeaders(3).Width = .Width / 4
.ColumnHeaders(4).Text = "MMMMM" ' Spécifie la caption de la quatrième colonne
.ColumnHeaders(4).Width = .Width / 4
.Arrange = lvwAutoLeft ' Range tout à gauche
End With
' Chargement de la Listview 1
Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "Test"
.SubItems(1) = "2"
.SubItems(2) = "5"
.SubItems(3) = "6"
End With
Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "Test"
.SubItems(1) = "1"
.SubItems(2) = "8"
.SubItems(3) = "4"
End With
Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "zozo"
.SubItems(1) = "2"
.SubItems(2) = "2"
.SubItems(3) = "2"
End With
Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "Titi"
.SubItems(1) = "3"
.SubItems(2) = "2"
.SubItems(3) = "5"
End With
Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "zozo"
.SubItems(1) = "1"
.SubItems(2) = "8"
.SubItems(3) = "4"
End With
Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "Test"
.SubItems(1) = "2"
.SubItems(2) = "9"
.SubItems(3) = "10"
.Text = "zozo"
End With
Set Lview = ListView1.ListItems.Add()
With Lview
.Text = "Titi"
.SubItems(1) = "7"
.SubItems(2) = "6"
.SubItems(3) = "11"
End With
'Création et remplissage du tableau
' C'est le début de la résolution du problème <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ATTENTION
ReDim data(0 To ListView1.ListItems.Count - 1)
i& = 0
For Each lstItm In ListView1.ListItems
With data(i&)
.reference = lstItm.Text
.data1 = Val(lstItm.SubItems(1))
.data2 = Val(lstItm.SubItems(2))
.data3 = Val(lstItm.SubItems(3))
End With
i& = i& + 1
Next
' Tri du tableau
For i& = 0 To UBound(data) - 1
For j& = i& + 1 To UBound(data)
If data(i&).reference <> "" Then
If data(i&).reference = data(j&).reference Then
data(j&).reference = ""
data(i&).data1 = data(i&).data1 + data(j&).data1
data(i&).data2 = data(i&).data2 + data(j&).data2
data(i&).data3 = data(i&).data3 + data(j&).data3
data(j&).data1 = 0
data(j&).data2 = 0
data(j&).data2 = 0
End If
End If
Next j&
Next i&
' remplissage de la listview2 pour contrôle
For i& = 0 To UBound(data)
If data(i&).reference <> "" Then
Set Lview = ListView2.ListItems.Add()
With Lview
.Text = data(i&).reference
.SubItems(1) = Str$(data(i&).data1)
.SubItems(2) = Str$(data(i&).data2)
.SubItems(3) = Str$(data(i&).data3)
End With
End If
Next i&
End Sub
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 12 févr. 2010 à 08:52
Bonjour,
Et d'où proviennent les données initiales. Il me semble plus simple d'agir en amont par tri sur ton recordset par exemple si c'est de cla qu'il s'agit.
sancho12345
Messages postés131Date d'inscriptionjeudi 21 mai 2009StatutMembreDernière intervention18 mars 2012 12 févr. 2010 à 09:19
Salut,
Les données initiales proviennent d'un import GMAO dont je n'ai pas la main, c'est pour cette raison que j'essaye de travailler directement dans la LISTVIEW. Sinon effectivement cela serait bien plus simple.
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 12 févr. 2010 à 09:50
C'est dommage.
Sinon, j'ai peut-être une idée mais je ne sais pas ce que cela pourrait donner je ne l'ai pas testé, je te laisse ce soin.
En partant du principe que chaque noeud parent contient une référence, il te faudra jouer sur la clé de ce noeud et tenter une insertion avec récupération d'erreur (et en gardant en mémoire la quantité). A partir de là tu devrais pouvoir faire quelque chose.
Je sais que c'est très flou ce que je dis, mais je n'ai pas VB6 sur ce micro pour le tester et je te donne une idée telle qu'elle me vient à l'esprit.
Bon courage.
Calade
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 12 févr. 2010 à 16:45
Bonjour, Galain,
Ne serait-il pas plus simple de trier la listview, puis de boucler de bas en haut en (chaque fois que l'item de la ligne au dessus est le même que celui de la ligne en cours):
- faisant les additions des subitems de la ligne en cours et de ceux de la ligne au-dessus
- détruisant la ligne en cours ?
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est