raffraichir listview d'un Userform, error

news

XLDnaute Impliqué
Bonjour à tous du fourm,

je m'adresse à vous comme le listview5 d'un userform que j'utilise a encore un bug.

En supprimant une ligne ou en corrigeant une ligne de la feuille" dépenses" par une listview d'un Userform
( les boutons "delete" ou "Ok" ), le Userform est réinitialisé pour afficher le nouveau contenu de la feuille("dépenses") dans le listview5 et listview05.

Mais cela ne fonctione pas comme les nouvelles données ne sont pas remises de nouveau
dans le listview5 et listview05. Rien est affiché dans le listview !

Ne sais pas comment résoudre,

news
 
Dernière édition:

news

XLDnaute Impliqué
Re : raffraichir listview d'un Userform, error

Bonjour à tous du forum,

Re:
vba projet reférence est déverrouillé

Quel vba code est à utiliser afin de ne plus avoir de bug, que listview5 est alimenté après être raffraichi (le Userform est réinitialisé " Private Sub UserForm_Initialize()" ) ?
Chaque fois qu'on supprime ou corrige un item sélectionne de listview5, que les données sont corrigées dans la feuille et puis raffraichies dans la listview5.

Le vba code utilisé :

Private Sub UserForm_Initialize()
Dim i As Byte
Dim x As Byte
Dim c As Range
Dim j As Integer
Dim y As Integer

Worksheets("dépenses").Select
With Me.ListView5
.View = 3
.Gridlines = True
.FullRowSelect = True
.HideColumnHeaders = False
.LabelEdit = 1
With .ColumnHeaders
.Add , , Cells(2, 1), 46, 0
.Add , , Cells(2, 2), 74, 2
.Add , , Cells(2, 3), 270, 0
.Add , , Cells(2, 4), 60, 1
End With
.ListItems.Clear

For Each c In Worksheets("dépenses").Range("A3:A" & Range("A65536").End(xlUp).Row)
x = x + 1
.ListItems.Add , , c.Value
For j = 1 To 2
.ListItems(x).ListSubItems.Add , , c.Offset(0, j).Value
Next
For y = 3 To 3
.ListItems(x).ListSubItems.Add , , c.Offset(0, y).Text
Next
Next
End With
the_listview5_color
End Sub

Private Sub the_listview5_color() 'to put the color in listview5
Dim x As Byte, j As Byte
Dim Couleur As Single

With Me.ListView5
If Couleur = vbBlue Then Couleur = vbRed Else Couleur = vbBlue
For x = 1 To ListView5.ListItems.Count - 1
.ListItems(x).ForeColor = Couleur
For j = 1 To 3
.ListItems(x).ListSubItems(j).ForeColor = Couleur
Next
If .ListItems(x + 1).ListSubItems(1) > .ListItems(x).ListSubItems(1) Then
If Couleur = vbBlue Then Couleur = vbRed Else Couleur = vbBlue
End If
Next
'dernière ligne
If .ListItems(x).ListSubItems(1) > .ListItems(x - 1).ListSubItems(1) Then
.ListItems(x).ForeColor = IIf(.ListItems(x - 1).ForeColor = vbBlue, vbRed, vbBlue)
For j = 1 To 3
.ListItems(x).ListSubItems(j).ForeColor = .ListItems(x).ForeColor
Next
End If
End With
End Sub


ne sais pas comment résoudre,
merci d'avance d'éventuels astuces.

news
 

Pièces jointes

  • data.zip
    94.2 KB · Affichages: 122
  • data.zip
    94.2 KB · Affichages: 116
  • data.zip
    94.2 KB · Affichages: 129
Dernière édition:

kjin

XLDnaute Barbatruc
Re : raffraichir listview d'un Userform, error

Bonsoir,
J'ai juste conservé le code de la lvw5 (trop de bazar)
Je te laisse adapter
Reviens si tu ne t'en sort pas
A+
kjin
 

Pièces jointes

  • news.zip
    25.1 KB · Affichages: 101
  • news.zip
    25.1 KB · Affichages: 113
  • news.zip
    25.1 KB · Affichages: 114

news

XLDnaute Impliqué
Re : raffraichir listview d'un Userform, error

Bonjour à tous du fourm

Re:kjin

merci pour réponse,
j'ai remarqué que le vba code a été très changé, le fichier"news" fonctionne,
mais en copiant le vba code dans mon exemple de fichier, cela ne fonctionne pas !

J'ai fait différent tests,
et le problème vient que le Userform.repaint ou réinitialiser le USF
( Ini_lvw5 ) ne fonctionne pas.

Tous les macro lesquels sont activés en dehors de Private Sub UserForm_Initialize(),
comme "Ini_lvw5" ne sont pas activé et ne fonctionnent pas.

J'ai repris mon exemple de fichier avec les vba codes existants auparavant,
et j'ai modifié que le vba code lorsqu'on clique sur le bouton "delete"

'Ini_lvw5 (n'est pas activé)
Unload Me
info_correction.Show 'the Userform is opened

Le Userform se ferme et s'ouvre de nouveau et puis cela fonctionne !:D

Mais quels sont les raisons pourquoi un refresh du Userform ou de réinitialiser le Userform ne fonctionnent pas ? :(

news
 
Dernière édition:

kjin

XLDnaute Barbatruc
Re : raffraichir listview d'un Userform, error

Bonsoir,
Je pense que ton application mériterait d'être revu complétement, cela reste mon avis et je te laisse juge.
Entre les contrôles masqués, désactivés, verrouillés...on ne s'y retrouve plus !
Je passe sur le reste
J'ai donc fait au mieux sans modifier le fonctionnement initial
A+
kjin
 

Pièces jointes

  • news_v2.zip
    61.7 KB · Affichages: 122

news

XLDnaute Impliqué
Re : raffraichir listview d'un Userform, error

Bonjour à tous du forum,

merci kjin de réponse, d'avoir pris le temps et d'adapter les changements dans le fichier existent.

J'ai repris hier le fichier et tes vba codes mises et pour les tester.
Cela fonctionne,

mais pour chaque autre date il y a des erreurs d'affichage de différentes couleurs.
Cela ne fonctionne pas encore tout à fait. Lorsque j'ai ajouté des lignes dans la feuille "dépenses", c'est à dire pour la même date il y a plusieurs données/lignes, la couleur ne change pas avec chaque autre date.

Pour une date est prise une couleur, p.ex rouge, pour la prochaine date ( toutes les données de cette date) figure une autre date (p.ex. vert ),

02/10/2009
02/10/2009
02/10/2009


04/10/2009

05/10/2009
05/10/2009

19/11/2009
19/11/2009
19/11/2009
19/11/2009


08/12/2009
08/12/2009


Comme ajuster le code vba afin de modifier que pour chaque autre date y figure différente couleur.

merci d'avance de réponse,

news
 

Pièces jointes

  • news_v2_couleur_verify.zip
    53.1 KB · Affichages: 91
Dernière édition:

Lii

XLDnaute Impliqué
Re : raffraichir listview d'un Userform, error

bonsoir

ces 2 lignes consécutives bien placées permettent de réactualiser l'USF, en évitant d'écrire les lignes de réinitialisation des List..., TextBox ... :

Code:
  Unload Me
  xxx.Show 'xxx étant le nom de l'USF
Si on veut garder des contenus, cela se complique mais pas beaucoup, enfin selon les cas.
 

news

XLDnaute Impliqué
Re : raffraichir listview d'un Userform, error

Bonsoir à tous du forum.

merci Lii pour réponse,

d'accord en fermant USF et rouvrant de nouveau, les données sont mises à jour,
mais alors l'USF vibre ou bien on remarque que l'USF se ferme et se rouvre.

mais il y a un bug restante avec l'affichage de différentes couleurs pour chaque autre date,

news
 
Dernière édition:

news

XLDnaute Impliqué
Re : raffraichir listview d'un Userform, error

Bonsoir à tous du forum,

je relance le sujet comme je n'ai pas encore pu résoudre,
que pour chaque autre date il y a une autre couleur dans listview5 d'un Userform.

Un bug est, s'il n'y a pas de données mis dans la feuille ("dépenses"),
le listview ne fonctionne pas ou bug en lançant le Userform ou avec le tri du Userform. :mad:

Un autre bug est que le button "OK" ne fonctionne pas correctement :
Si on met un autre montant dans Textbox5, et en cliquant sur le boutton "OK",
est à changer les données dans lsitview5 et dans la feuille("dépenses").
De mme si on clique sur le bouton "delete" lês données ne sont pas effacées dans listview5 et la feuille.

Comme j'ai ajouté uen autre colonne dans le lsitview, par après cela ne fonctionnait plus pour modifier le montant aves les botuons "OK" et "delete".

Comment résoudre ?

merci d'avance d'une astuce pour avancer,

news
 

Pièces jointes

  • news_couleur.zip
    51.1 KB · Affichages: 142
Dernière édition:

jp14

XLDnaute Barbatruc
Re : raffraichir listview d'un Userform, error

Bonjour

Ci dessous la procédure qui permet de modifier la couleur lorsque on change de date.

Code:
Sub Ini_lvw5()
Dim i As Long, X As Byte, plage As Range, C As Range, j As Integer, y As Integer
Dim anciennevaleur As String
Dim couleur As String
On Error Resume Next
    With Sheets("dépenses")
        Set plage = .Range("A3:A" & .Range("A65536").End(xlUp).Row)
    End With
    
    With ListView5
        .ListItems.Clear
        .Sorted = False
        For Each C In plage
          .ListItems.Add , , C.Value
          'X = .ListItems.Count
        For j = 1 To 4
          .ListItems(.ListItems.Count).ListSubItems.Add , , C.Offset(0, j).Value
        Next
        'For y = 4 To 4
          '.ListItems(.ListItems.Count).ListSubItems.Add , , C.Offset(0, y).Text
        'Next
          .ListItems(.ListItems.Count).ListSubItems.Add , , C.Row

          Next C
    
'
Tri ListView5, 1    'to sort listview

' couleur

couleur = vbBlue
    'Boucle sur toutes les lignes
    For i = 1 To ListView5.ListItems.Count
        With .ListItems(i)
        
        If .ListSubItems(1).Text = anciennevaleur Then
            .ForeColor = couleur
            For j = 1 To 4
                .ListSubItems(j).ForeColor = couleur
            Next
                
        Else
             anciennevaleur = .ListSubItems(1).Text
            Select Case couleur
                Case vbBlue
                    couleur = vbRed
                Case vbRed
                    couleur = vbBlue
            End Select
              .ForeColor = couleur
            For j = 1 To 4
                .ListSubItems(j).ForeColor = couleur
            Next
        End If
        End With
    Next i
End With

End Sub


A tester

JP
 
Dernière édition:

jp14

XLDnaute Barbatruc
Re : raffraichir listview d'un Userform, error

Bonjour (re)

Bonsoir à tous du forum,
Un bug est, s'il n'y a pas de données mis dans la feuille ("dépenses"),
le listview ne fonctionne pas ou bug en lançant le Userform ou avec le tri du Userform. :mad:
Ci dessous le code pour corriger ce dysfonctionnement

Code:
Sub Ini_lvw5()
Dim i As Long, X As Byte, plage As Range, C As Range, j As Integer, y As Integer
Dim anciennevaleur As String
Dim couleur As String
On Error Resume Next

    With Sheets("dépenses")
        [COLOR="Red"]If .Range("A65536").End(xlUp).Row < 3 Then Exit Sub[/COLOR]
        Set plage = .Range("A3:A" & .Range("A65536").End(xlUp).Row)
    End With
La plage commence à la ligne 3, s'il n'y a pas de données on a un résultat bizarre.

Un autre bug est que le button "OK" ne fonctionne pas correctement :
Si on met un autre montant dans Textbox5, et en cliquant sur le boutton "OK",
Ci dessous le code qui fonctionne et qui met à jour la listview.
Les problèmes provenaient de la dernière question, la valeur de N n'était pas bonne ( il fallait 5 au lieu de 4 CLng(.ListSubItems(4)).
Un message indiquant l'erreur est très utile.
Code:
On Error Resume Next
    
           [COLOR="Red"] If L = 0 Or nuitem = 0 Then
                Call MsgBox("Vous devez sélectionner une ligne" _
                            & vbCrLf & "" _
                            , vbInformation, Application.Name)
                
                Exit Sub
            End If[/COLOR]

        With Worksheets("dépenses") 'the data are replaced in Worksheets("dépenses")
            .Cells(L, 1).Value = TextBox1.Text
            .Cells(L, 2) = (CDate(TextBox2.Text))   'Date format = dd/mm/yyyy
            .Cells(L, 2).NumberFormat = "dd/mm/yyyy"
            .Cells(L, 3) = TextBox3.Value
            .Cells(L, 4) = TextBox4.Value
            .Cells(L, 5) = Round(CSng(Trim(TextBox5.Value)), 2)
            .Cells(L, 5).NumberFormat = "0.00_ ;[Red]-0.00 "
            .Cells(L, 7) = TextBox3.Value + ", " + TextBox4.Value
       End With
        [COLOR="Red"]For k = 1 To 4
            ListView5.ListItems(nuitem).SubItems(k) = Controls("TextBox" & k + 1)
        Next[/COLOR]

L = 0


De même si on clique sur le bouton "delete" les données ne sont pas effacées dans listview5 et la feuille.

ci dessous le code pour supprimer une ligne dans la listview
Code:
Private Sub CommandButton6_Click()  ' button "delete" to delete rows of previous input of costs in Worksheets("dépenses")
On Error Resume Next
    [COLOR="Red"]If L = 0 Or ListView1.SelectedItem.Index = 0 Then
        Call MsgBox("Vous devez sélectionner une ligne" _
                    & vbCrLf & "" _
                    , vbInformation, Application.Name)
        
        Exit Sub[/COLOR]
    End If
    With Worksheets("dépenses")         ' the data are deleted in Worksheets("dépenses")
        .Rows(L).EntireRow.Delete
   End With
   [COLOR="Red"]ListView5.ListItems.Remove (ListView1.SelectedItem.Index)[/COLOR]
   nuitem = 0
    L = 0



Comme j'ai ajouté uen autre colonne dans le lsitview, par après cela ne fonctionnait plus pour modifier le montant aves les botuons "OK" et "delete".
news

Il faut modifier le code suivant, de cette manière si on rajoute une colonne on n'est pas obligé de modifier le numéro de la colonne

Code:
With ListView5.SelectedItem
......................................
    'L = CLng(.ListSubItems(4)) ' ligne
   [COLOR="Red"] L = CLng(.ListSubItems(ListView5.ColumnHeaders.Count-1)) [/COLOR]' cette ligne permet d'ajouter des colonnes sans changer le code

end with


Bon week end

JP
 

news

XLDnaute Impliqué
Re : raffraichir listview d'un Userform, error

Bonjour à tous du forum,

great,
enfin cela fonctionne avec couleur, tri, valider bouton "OK" ou "delete" :D
merci jp14 d'avoir pris le temps et d'aider avec tes astuces vba.

news
 
Dernière édition:

Discussions similaires

Réponses
11
Affichages
538
Réponses
45
Affichages
3 K
Réponses
8
Affichages
665

Statistiques des forums

Discussions
312 249
Messages
2 086 598
Membres
103 253
dernier inscrit
alscanv974