ListView - mise en forme comme Feuil Excel source

Bonjour la communauté, j'espère que vous allez bien :)

S'il vous plait j'ai besoin d'aide pour la mise en forme d'une ListView comme la feuille Excel source. Voici une capture des deux :

capture1 capture2

Voici également le fichier test en pièce jointe.

Pouvez-vous m'aider à effectuer ce travail svp ?

Merci

32cameleontestv4.xlsm (23.64 Ko)

Bonjour Cameleon1881

Je ne sais pas si c'est ce que tu chercher :J'ai voulu mettre les titres "encaissement argent" et "Décaissements" en centré comme dans Excel, mais je n'y arrive pas.

Souhaites tu aussi mettre certains libellés en gras, j'ai peur que ce soit pareil.

Tout est défini au niveau de la listview mais pas au niveau de chaque ligne ou des subItems

Confirme pour ceux qui vont me succéder que c'est bien ce que tu cherches à faire

Cdlt

Merci scraper d'avoir pris du temps pour me répondre. oui ce que je cherche c'est exactement ce que tu expliques. Mais tout d'abord, est ce faisable ou pas ? Une listview peut être personnalisée ou pas ?

La seule chose que je trouve possible est de mettre une ligne en gras.

Set item = ListView1.ListItems.Add(Text:=Sheets(mSheet).Cells(i, 1))

Set sh = ThisWorkbook.Sheets(mSheet)
Set rg = sh.Cells(i, 1)
Application.DisplayAlerts = False
If rg.HorizontalAlignment = xlCenter Then

item.Bold= True

Bonjour

Peut être essayer comme ceci

Private Sub ActualisationResultat()
Dim item As ListItem
Dim DerLig As Integer, i As Integer

ListView1.ListItems.Clear
With Sheets("F1")
    DerLig = .Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To DerLig
        Set item = ListView1.ListItems.Add(Text:=.Cells(i, 1))
            item.SubItems(1) = .Cells(i, 2)
            item.SubItems(2) = .Cells(i, 3)
        If .Cells(i, 1) Like "Encaissement*" Or _
            .Cells(i, 1) Like "Décaissement*" Or _
            .Cells(i, 1) Like "Résultat*" Then
                item.ForeColor = vbRed 'vbyellow ou vbgreen ou vbblue
                item.Bold = True
        End If
    Next i
End With
End Sub

Cordialement

Bonjour Dan, merci pour ton appui. En effet, j'ai essayé ton code mais il beugue il me dit : erreur 9, l'indice n'appartient pas à la sélection ...

Merci également Scarper pour ta proposition.

Bon sinon j'avance de mon côté : (J'ai conclu qu'il n'est pas possible de fusionner deux cellules voisines sur une ListView!)

capture3

J'ai encore besoin de :

- Aligner l'écriture en rouge à droite de la cellule.

- Colorer le fond en gris là où est écrit "encaissement Argent" ... par la suite je reproduis.

Voici le code qui m'a permis d'atteindre ce résultat :

Private Sub UserForm_Initialize()
With ListView1
.Gridlines = True
.View = lvwReport
.FullRowSelect = True
.ColumnHeaders.Add Text:=Sheets("RESULTAT").Cells(1, 5), Width:=200, Alignment:=fmAlignmentLeft
.ColumnHeaders.Add Text:=Sheets("RESULTAT").Cells(1, 6), Width:=130
.ColumnHeaders.Add Text:=Sheets("RESULTAT").Cells(1, 7), Width:=40
.ColumnHeaders.Add Text:=Sheets("RESULTAT").Cells(1, 8), Width:=30
End With

Call ActualisationResultat

Call merge
End Sub

Private Sub ActualisationResultat()
Dim item As ListItem
Dim DerLig As Integer
Dim i As Integer

ListView1.ListItems.Clear
DerLig = Sheets("RESULTAT").Cells(Rows.Count, 5).End(xlUp).Row

For i = 2 To DerLig
    Set item = ListView1.ListItems.Add(Text:=Sheets("RESULTAT").Cells(i, 5))
        item.SubItems(1) = Sheets("RESULTAT").Cells(i, 6)
        item.SubItems(2) = Sheets("RESULTAT").Cells(i, 7)
        item.SubItems(3) = Sheets("RESULTAT").Cells(i, 8)

Next i
End Sub

Private Sub merge()
Dim i As Integer, j As Integer
For i = 1 To ListView1.ListItems.Count

    If ListView1.ListItems(i).ListSubItems(1) = "" And ListView1.ListItems(i) <> "Encaissement Argent" And ListView1.ListItems(i) <> "Encaissement Argent" And ListView1.ListItems(i) <> "Dépenses d'exploitation" And ListView1.ListItems(i) <> "Charges fixes" Then
       ListView1.ListItems(i).ListSubItems(1).Text = ListView1.ListItems(i)
       ListView1.ListItems(i).ListSubItems(1).Bold = True
       ListView1.ListItems(i).Text = ""
    End If
Next i

For j = 1 To ListView1.ListItems.Count
    If ListView1.ListItems(j) = "Encaissement Argent" Or ListView1.ListItems(j) = "Dépenses d'exploitation" Or ListView1.ListItems(j) = "Charges fixes" Then
       ListView1.ListItems(j).Bold = True
       ListView1.ListItems(j).ForeColor = vbRed
    End If
Next j
End Sub

Merci

En effet, j'ai essayé ton code mais il beugue il me dit : erreur 9, l'indice n'appartient pas à la sélection ...

A quel endroit ?

Je n'ai aucun bug mais à nouveau je vous propose quelque chose puis vous changez par autre chose.
Pourquoi ajoutez-vous les 6 à 7 lignes de codes à la fin pour mettre la couleur alors que vous pouvez le faire directement au chargement de l'usf.

Là vous faites des tours dans vos codes et vous compliquez

Puis la fusion n'est pas possible dans une liste d'USF. D'ailleurs d'une manière général, oubliez les fusions avec VBA. On n'a que des soucis à terme

En fait c'est un état assez personnalisé. Je colore en rouge que quelque texte de la colonne et je met en gras quelques uns aussi, c'est pour ça que je boucle sur les lignes et j'applique la vbRed ...

Mais s'il te plait Dan pourrais tu m'aider sur l'alignement à droite de la cellule ?

Merci

Re Dan

Désolé ça marche en fait ton code. en voici une capture du résultat :

capture4

ça sera gentil de me dépanner sur l'alignement à droite des textes en rouge et de la couleur de fond en gris

Merci ;)

ça sera gentil de me dépanner sur l'alignement à droite des textes en rouge et de la couleur de fond en gris

Fond gris --> remplacez VBred par ceci --> RGB(128, 128, 128)
Alignement à droite : ce n'est pas possible. A ma connaissance, le contrôle alignement est effectué sur la colonne entière. Donc pour vos 3 colonnes vous pouvez définir 1 alignement sur chaque colonne

Crdlt

Il me semble aussi que le BackColor ne marche pas sur les ListView ... j'ai tant essayé !

Non l'instruction BackColor détermine uniquement la couleur de fond d'un objet.

Maintenant peut être qu'il existe une solution avec les modules de classe ou des fonctions genre Public declare Window, findwindow mais cela devenir des codes de malades.

Il y a peut être plus simple, c'est d'afficher votre feuille dans une userform...

Le spreadsheet ? !

Bonjour cameleon1881, Dan, le forum,

Pour un alignement à droite d'une seule ligne ... ce n'est pas parfait ... m'enfin ... c'est à toi de voir ...

Private Sub ActualisationResultat()
Dim item As ListItem
Dim DerLig As Integer, i As Integer, X As Integer, L As Integer

ListView1.ListItems.Clear
With Sheets("F1")
    DerLig = .Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To DerLig
        Set item = ListView1.ListItems.Add(Text:=.Cells(i, 1))
            item.SubItems(1) = .Cells(i, 2)
            item.SubItems(2) = .Cells(i, 3)
        If .Cells(i, 1) Like "Encaissement*" Or _
            .Cells(i, 1) Like "Décaissement*" Or _
            .Cells(i, 1) Like "Résultat*" Then
                item.ForeColor = vbRed 'vbyellow ou vbgreen ou vbblue
                item.Bold = True

            L = Len(.Cells(i, 1).Value2)
            Do While Len(item) < ((200 / 2.4) - L) '' << 200 est la largeur de la 1re colonne
                item = " " & item
            Loop

        End If
    Next i
End With
End Sub

ric

Le spreadsheet ? !

Non. L'option Spreadsheet permettait de mettre une feuille dans l'usf mais je ne la vois plus dans les options à cocher de l'editeur VBA

Maintenant si vous voulez mettre les montants et les totaux sur la droite, il suffit de définir l'alignement pour chaque colonne dans la Sub Initialize

Une autre solution est de créer 4 colonnes au lieu de trois. Mais ne faites pas trop compliqué car là avec les couleurs, cela parait très clair visuellement

Merci beaucoup Ric et Dan ça marche pour l'alignement à droite :) Je comprends que c'est une sorte de bricolage mais c'est bien rusé :)

Sujet Résolu et clos :)

à la prochaine

Me

Bonjour cameleon1881, Dan, le forum,

Concernant ma bidouille ... en utilisant une condition par mot afin d'ajuster la largeur individuellement et en utilisant la police non-proportionnelle "Courrier New" ... le résultat est meilleur ...

À toi de voir ...

À+

ric

32cameleontestv5.xlsm (27.76 Ko)

Merci beaucoup pour ton appui Ric :)

oui c'est plus pro avec le "Courrier New" ! ;)

Rechercher des sujets similaires à "listview mise forme comme feuil source"