Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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.
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…