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

  • Initiateur de la discussion Initiateur de la discussion Riko
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Bonjour Riko,
Pourquoi passer par du VBA et pas simplement par des MFC sur la feuille ?
Il y a partout des Validation de données avec des alertes donc pas de risque de se tromper. Ce serait plus simple.
 
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.
 
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

Dernière édition:
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.
 
Si j'ai compris, mais qu'appelez vous Niveau ?
Dans votre fichier rien ne dit qu'une cellule est de niveau 1 ou 2.
Qui plus est OutlineLevel n'est applicable que pour des lignes groupées.
 
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)👍
 
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
 
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

Bonsoir,
Il y a bien des données groupées ?
Elle n'étaient pas là dans le premier fichier, c'est là où j ne comprenais pas ce que vous appeliez level1 level2.
🙂🤞
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
121
Réponses
4
Affichages
259
  • Question Question
Réponses
7
Affichages
191
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…