XL 2016 [RESOLU] MFC VBA sur N° ligne d'un groupe

Riko

XLDnaute Occasionnel
Bonjour,
je souhaiterai pouvoir faire une MFC en VBA différente sur chaque ligne d'un Groupe niveau 2 (ligne en dessous du"+").
J'ai réussi à le faire sur la ligne niveau 1 par contre je bute sur le niveau 2.
Je vous joins un exemple de ce que je souhaite faire c'est plus facile à expliquer.
Pourriez vous me donner un coup de main SVP ?
Merci d'avance.;)
 

Pièces jointes

  • TestRiko.xlsm
    26.5 KB · Affichages: 14

Riko

XLDnaute Occasionnel
Merci de ta réponse,
J'avais fait des MFC par simplicité mais cela devient un peu compliqué à maintenir car je me retrouve avec beaucoup de lignes à gérer. (voir illustration ci-dessous pour une seule MFC)
De plus quand le fichier est modifié (supp / insertion lignes groupées + ajout colonne) les MFC s'accumulent et le fichier devient beaucoup plus lent.
Capture d’écran 2021-03-08 164349.jpg
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
ok.
OutlineLevel donne le niveau de plan actif, donc les lignes doivent faire l'objet d'un "Grouper"
J'ai fait un essai en groupant les lignes 5:8 .... , et en faisant cette macro :
Code:
Sub essai()
    For L = 4 To 19
        Cells(L, "Q") = Cells(L, "C").Rows.OutlineLevel
    Next L
End Sub
On obtient le niveau en colonne Q. Voir PJ
 

Pièces jointes

  • TestRiko (2).xlsm
    26.4 KB · Affichages: 5
Dernière édition:

Riko

XLDnaute Occasionnel
merci.
mais je me suis surement mal expliqué (comme d'hab)
Je voudrais que lorsque l'on inscrit une valeur dans les cellules de niveau 2 :
  • Si le contenu d'une cellule > 0 dans la 1ére ligne de niveau 2 → cellule de couleur Rouge
  • Si le contenu d'une cellule > 0 dans la 2ième ligne de niveau 2 → cellule de couleur Bleu
  • Si le contenu d'une cellule < 0 dans la la 3ième ligne de niveau 2 → cellule de couleur Verte
  • Si le contenu d'une cellule="OK" dans la 5ième ligne de niveau 2 → cellule de couleur Jaune.
 

Riko

XLDnaute Occasionnel
Dans votre fichier rien ne dit qu'une cellule est de niveau 1 ou 2.
Oui en effet, je n'ai pas mis les différents essais que j'ai effectué en vba car ils ne fonctionnent pas.
Je cherche à reproduire le même résultat que la MFC sur les lignes (5 à 8, 10 à 13 et 15 à 18).
mais qu'appelez vous Niveau
Si je me trompe pas les lignes de niveau 2 sont les lignes masquées par l'appui sur +/- (à gauche des N° de lignes)👍
 

Riko

XLDnaute Occasionnel
je crois que j'ai un bon début.
VB:
Sub ColoreCelGrp2()
    Dim CelGrp2 As Range, PremLigGrp1 As Long
    Set CelGrp2 = ActiveCell

    'Vérifie que la cellule fait partie d'un groupe
    If CelGrp2.Rows.OutlineLevel > 1 Then
        PremLigGrp1 = CelGrp2.Row

        If CelGrp2.Row > 1 Then
            'première ligne qui n'est pas groupée
            For i = CelGrp2.Row - 1 To 1 Step -1
                If Cells(i, CelGrp2.Column).Rows.OutlineLevel = 1 Then
                    PremLigGrp1 = i
                    Exit For
                End If
            Next i
        End If
        MsgBox PremLigGrp1
        Select Case CelGrp2.Row
            Case PremLigGrp1 + 1
                CelGrp2.Interior.ColorIndex = 5
            Case PremLigGrp1 + 2
                CelGrp2.Interior.ColorIndex = 6
            Case PremLigGrp1 + 3
                CelGrp2.Interior.ColorIndex = 7
            Case PremLigGrp1 + 4
                CelGrp2.Interior.ColorIndex = 8
        End Select
    
    
    End If


End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Sinon pour respecter :
MFC sur les lignes (5 à 8, 10 à 13 et 15 à 18).
Il y a plus simple : Row Mod 5 si le résultat est 4 c'est du Level 1 sinon c'est du level 2.
Ex en PJ avec :
VB:
Sub Essai()
For L = 4 To 43
    Cells(L, "A") = L
    If L Mod 5 = 4 Then
        Cells(L, "B") = "Level 1"
    Else
        Cells(L, "B") = "Level 2"
    End If
Next L
End Sub
 

Pièces jointes

  • TestRiko (V2).xlsm
    12.6 KB · Affichages: 7

Discussions similaires