Modifier un code d'une listview

lanoe

XLDnaute Occasionnel
Bonjour,

Je souhaites ajouter un élément sur un code de JP14. Actuellement j'ai un commande bouton qui prend les élements d'une listview (dont la colonne 12 est = "NF" ) et les colles sur la feuille facture. Je désirs en plus une formule qui enleve les 0 de la colonne 9. J'ai essayé le code en rouge mais je dois avoir un probleme...


Dim dl2 As Long ' dernière ligne
With ListView1
'Boucle sur toutes les lignes
dl2 = 16
For I = 1 To .ListItems.Count
If .ListItems(I).ListSubItems(12).Text = "NF" And .ListItems(I).ListSubItems(9).Text > "0,1" Then
Sheets("Factures").Cells(dl2, 27) = .ListItems(I).Text
'Boucle sur les colonnes
For j = 1 To .ColumnHeaders.Count - 1
Sheets("Factures").Cells(dl2, j + 27) = .ListItems(I).ListSubItems(j).Text
Next j
dl2 = dl2 + 1
End If
Next I

End With

Si vous avez une piste...

cordialement
lanoe
 

ChTi160

XLDnaute Barbatruc
Re : Modifier un code d'une listview

Salut lanoe
Bonjour le fil
bonjour le Forum

arff pas évident sur juste d'après un code

je pense qu'il faut (hormis peut être la mise en forme) tester la colonne 9
exemple
For j = 1 To .ColumnHeaders.Count - 1
Sheets("Factures").Cells(dl2, j + 27) = .ListItems(I).ListSubItems(j).Text
'ici on va tester pour voir ce que contient la cellule cible lorsque le numéro de la colonne de la listview est 9
if J =9 then 'si j =9 (colonne de la listview)
Sheets("Factures").Cells(dl2, j + 27) =IIf(Sheets("Factures").Cells(dl2, j ) ="0","",Sheets("Factures").Cells(dl2, j + 27)
End if
'le IIf veut dire si la cellule cible contient un 0 on met un vide ,sinon on laisse la valeur
Next j
il y a peut être moyen de faire autrement c'est a dire faire le test lors du remplissage de la listview ??? mais sans fichier !!!!!!
Bonne journée
 

lanoe

XLDnaute Occasionnel
Re : Modifier un code d'une listview

Re,

Et merci pour ton aide. Aprés pas mal de tentatives je suis parvenu à réduire le fichier. Le code doit s'adapter sur le bouton facturation. Pour remplir la listview cocher d'abord le chexBox 1 puis selectionner avec le combobox.

Le code a été développé avec l'aide de JP14 -encore merci à lui..., je l'ai bricolé aprés d'ou peut-être des imperfections dans la rédaction du code.

Pour revenir à ma question de départ: Actuellement le bouton facturation prend les élements de listview (dont la colonne 12 est = "NF" ) et les colles sur la feuille facture. Je désirs en plus une formule qui enleve les 0 de la colonne 9

cordialement
lanoe
 

Pièces jointes

  • Listview9.zip
    47.5 KB · Affichages: 72
  • Listview9.zip
    47.5 KB · Affichages: 71
  • Listview9.zip
    47.5 KB · Affichages: 72

ChTi160

XLDnaute Barbatruc
Re : Modifier un code d'une listview

Re
je viens de tester vite fait il faut que je parte au boulot lol
ce n'est la colonne 9 mais 8 qu'il faut tester les colonnes de la listview commancent à 0
ce code fonctionne
Code:
For j = 1 To .ColumnHeaders.Count - 1
            Sheets("Factures").Cells(dl2, j + 27) = .ListItems(I).ListSubItems(j).Text
           [I] If[COLOR=red] j = 8[/COLOR] Then[/I]
[I]             Sheets("Factures").Cells(dl2, j + 27) = IIf(Sheets("Factures").Cells(dl2, j + 27) = [COLOR=red]0[/COLOR], "", Sheets("Factures").Cells(dl2, j + 27))[/I]
[I]            End If[/I]
        Next j
Bonne journée
 

lanoe

XLDnaute Occasionnel
Re : Modifier un code d'une listview

Re,

Je viens de tester ton code: éffectivement le zero n'apparait plus, mais je souhaite qu'il ne colle pas la ligne ou il y a un zero en colonne quantité. Dans mon fichier, il doit exporter uniquement la 2éme ligne.

cordialement
lanoe
 

ChTi160

XLDnaute Barbatruc
Re : Modifier un code d'une listview

Re

je n'avais pas compris comme cela
voila la macro modifiée ainsi
j'ai ajouté un test de la colonne 8 (en rouge dans le texte)
Code:
For I = 1 To .ListItems.Count
    If .ListItems(I).ListSubItems(12).Text = "NF" [COLOR=red]And .ListItems(I).ListSubItems(8).Text <> "0"[/COLOR] Then
        Sheets("Factures").Cells(dl2, 27) = .ListItems(I).Text
        'Boucle sur les colonnes
        For j = 1 To .ColumnHeaders.Count - 1
            Sheets("Factures").Cells(dl2, j + 27) = .ListItems(I).ListSubItems(j).Text
        Next j
        dl2 = dl2 + 1
        End If
    Next I
Bonne fin de Soirée
 

lanoe

XLDnaute Occasionnel
Re : Modifier un code d'une listview

Bonjour,

Je reprend le même fil, car ma question est toujours sur le même code.

ChTi160, m'a aidé à la modifier le code sa réponse est parfaite. Mais je viens de me rendre compte d'un probleme toujours sur le même bouton "facture" qui prend les élements de le listview pour aller les coller sur une autre page: Dans la listview 4 colonnes sont au format date et je souhaite que le format date soit conserver au collage.

Cordialement

lanoe
 

Pièces jointes

  • Listview9.zip
    40.8 KB · Affichages: 91
  • Listview9.zip
    40.8 KB · Affichages: 94
  • Listview9.zip
    40.8 KB · Affichages: 95

lanoe

XLDnaute Occasionnel
Re : Modifier un code d'une listview

Re,

Il y en a bien 4:
Colonne 2 Date DLC
Colonne 3 BL du mois
Colonne 6 Jour DLC
Colonne 7 Mois DLC

Mise en forme avec le code:

Private Sub formatlistview()
Dim £i As Long
For £i = 1 To ListView1.ListItems.Count
With ListView1.ListItems(£i).ListSubItems(2)
If IsDate(.Text) Then .Text = Format((CDate(.Text)), "dd")
End With
With ListView1.ListItems(£i).ListSubItems(3)
If IsDate(.Text) Then .Text = Format((CDate(.Text)), "mmm-yy")
End With
With ListView1.ListItems(£i).ListSubItems(6)
If IsDate(.Text) Then .Text = Format((CDate(.Text)), "dd")
End With
With ListView1.ListItems(£i).ListSubItems(7)
If IsDate(.Text) Then .Text = Format((CDate(.Text)), "mmm-yy")
End With
Next £i
End Sub

lanoe
 

ChTi160

XLDnaute Barbatruc
Re : Modifier un code d'une listview

Re
effectivement
mais comment revenir à la date initialement formatée Lol ou alors
mettre les colonnes ou sont transférées les dates au format adéquat (soit D et H)
ou alors utiliser la propriété Tag de la listview pour stocker la date avant formatage ???
avoir je dois partir
Bonne fin de journée
 
Dernière édition:

jp14

XLDnaute Barbatruc
Re : Modifier un code d'une listview

Bonsoir ChTi160
Bonsoir lanoe

Dans une listview les données sont de type alphanumériques (de ce fait on ne peut pas trier une colonne avec des dates).

Pour retrouver les dates avec une forme exploitable avec excel il faut revenir à la base de données.

Modification de la procédure "Private Sub Facturation_Click()"
Code:
 For I = 1 To .ListItems.Count
    
    If .ListItems(I).ListSubItems(12).Text = "NF" And .ListItems(I).ListSubItems(9).Text <> "0" Then
        'Sheets("Factures").Cells(dl2, 27) = .ListItems(I).Text
        'Boucle sur les colonnes
        'For j = 1 To .ColumnHeaders.Count - 1
            'Sheets("Factures").Cells(dl2, j + 27) = .ListItems(I).ListSubItems(j).Text
        'Next j
        ligne1 = Mid(.ListItems(I).Key, 2, 50) ' pour retrouver le numéro de la ligne
        
' ecrire les correpondances entre la BDD et la facture
        
        
        dl2 = dl2 + 1
        End If
    Next I
JP
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re : Modifier un code d'une listview

Salut lanoe
Bonjour le fil (un coucou particulier à jp14)
Bonjour le Forum

bien qu'une solution ait été trouvée

je vous avais parlé de la propriété Tag des ListSubItems de la ListView

j'ai donc approfondi (d'après des infos trouvés sur le net )et j'ai fait ce petit fichier , cela peut permettre à certains d'approfondir Lol

cela permet le tri des dates directement dans la listview

LeFichier : Regarde la pièce jointe Tag tri Dates 2.zip

Bonne journée
 

Discussions similaires

Réponses
0
Affichages
157

Statistiques des forums

Discussions
312 347
Messages
2 087 502
Membres
103 563
dernier inscrit
samyezzehar