Microsoft 365 Récupération INDENTLEVEL si modification de ce dernier

  • Initiateur de la discussion Initiateur de la discussion GGPS58
  • 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 !

GGPS58

XLDnaute Occasionnel
Bonjour à tous,
J'ai une colonne (B) contenant des cellules avec une mise en forme pour laquelle je récupérer le niveau d'indentation du contenu (Texte)
Je récupérer le niveau d'indentation dans une colonne contigüe (C)
Je souhaite réaliser une macro qui mette à jour la valeur d'indentation en colonne (C) si je modifie le niveau d'indentation en colonne (B).
J'ai réussi si je traite une seule cellule mais je n'y arrive pas sur une plage de cellule (j'ai testé moultes astuces évoquées dans ce forum mais mes tentatives se son révélées infructueuses.
Je vous joins un exemple simplifié de mon problème.
Si l'un de vous a une idée où s'il vois où je me trompe, je suis preneur de vos conseils.

D'avance merci.
 

Pièces jointes

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range("B3:b6")    ' Range à surveiller
If Intersect(Target, rng) Is Nothing Then Exit Sub  ' en dehors de rng
Target.Offset(0, 1).Value = Target.IndentLevel
End Sub
 
Merci Laurent,
J'ai testé mais sans succés.
Si je modifie la valeur cela fonctionne parfaitement par contre si je modifie uniquement le niveau d'indentation la mise à jour ne se fait pas.
Je vais fouiller encore, je vais bien finir par toruver quelque chose.
 
Bonjour,

un changement d'indentation ne génère pas d'événement.
La mise à jour ne pourra s'effectuer qu'au moment du changement de sélection suivant :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static pl As Range
    Dim c As Range
    If Not pl Is Nothing Then
        Set pl = Intersect(pl, [B2:B1000]) ' adapater plage à superviser
        If Not pl Is Nothing Then
            Application.ScreenUpdating = False
            For Each c In pl
                c.Offset(, 1).Value = c.IndentLevel
            Next c
        End If
    End If
    Set pl = Target
End Sub
Plus simplement tu pourrais changer l'indentation sur saisie de son niveau en colonne C
eric
 
Dernière édition:
Bonjour Eric,
Merci pour ces solutions.
Je vais orienter mon choix vers une mise à jour de la colonne C à chaque changement de sélection dans la colonne B, c'est moins optimisé sans doute, mais cela semble convenir aux utilisateurs.
Ta deuxième (que j'avais déjà testé), ne convenant pas aux utilisateurs de mon fichier.
Merci à tous de votre temps et conseils.
Bonne journée.
 
- 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
1
Affichages
218
Réponses
8
Affichages
619
Retour