IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Grouper les lignes VBA suivant un niveau


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Grouper les lignes VBA suivant un niveau
    Bonsoir à tous,

    Je souhaite grouper des lignes d'un tableau excel . J'ai a disposition deux colonnes qui peuvent me décrire le groupement :

    Colonne C ---------Colonne D
    Arbre-----------------Niveau
    1----------------------1
    2-----------------------1
    3-----------------------1
    3.1-----------------2
    3.2-----------------2
    3.3-----------------2
    3.3.1-----------3
    3.3.2---------- 3
    3.3.3----------- 3
    3.3.4----------- 3
    3.4-----------------2
    3.4.1----------- 3
    3.4.2----------- 3
    3.4.3----------- 3
    3.4.4----------- 3
    3.5----------------- 2
    3.5.1----------- 3
    3.5.2----------- 3
    3.5.3----------- 3
    3.5.4----------- 3
    3.6----------------- 2
    3.6.1----------- 3
    3.6.2----------- 3
    3.6.3----------- 3
    3.6.4----------- 3
    4---------------------- 1
    5---------------------- 1

    Je pensais utiliser La colonne niveau mais je n'arrive pas à le programmer en VBA (je débute).
    Sur le forum il y a des pistes mais juste pour un seul niveau.

    Quelqu'un à une idée ?

    Merci beaucoup

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    As-tu absolument besoin d'un code VBA ?
    Parce-que si j'ai bien compris ce que tu veux voici une formule à placer en Colonne D.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NBCAR(SUBSTITUE(C4;".";""))
    Recopier ensuite vers le bas
    en C4 soit 2, 2.1 ou 2.1.1

    Bonjour,
    Solution en VBA avec une fonction personnalisée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function LevelCount(txt As String) As Long
     LevelCount = Len(Replace(txt, ".", ""))
    End Function
    Fonction que tu peux utiliser, avec Excel en tapant
    Ou en appelant la fonction depuis une autre procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
     Dim txt As String: txt = "2.5.1"
     MsgBox "Le niveau de " & Range("C4") & " est le " & LevelCount(Range("C4"))
     ' Ou encore
     MsgBox "Le niveau de " & txt & " est le " & LevelCount(txt)
    End Sub

  3. #3
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    Pour grouper ou dé-grouper des lignes dans Excel en VBA, il faut jouer avec la propriété OutlineLevel qui s'applique à un objet Range qui représente une ligne.
    Dans le cas présent, il suffit de parcourir les lignes et de leur affecter le OutlineLevel contenu dans la colonne D :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'Si NbLignes est le nombre de lignes,
    For i = 1 To NbLignes
       ActiveSheet.Rows(i).OutlineLevel = Range("D" & i).Value
    Next i

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Je m'étais mal exprimé, mais tdo01 a compris quand même.
    Merci beaucoup tdo01, c'est exactement ce que je souhaitais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim I As Integer
    I = 7
    Do Until Range("D" & I).Value = 0
       ActiveSheet.Rows(I).OutlineLevel = Range("D" & I).Value
    I = I + 1
    Loop

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] VBA grouper des lignes avec niveau
    Par llebucheur dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/11/2014, 15h02
  2. Grouper les lignes
    Par bouduch dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/07/2013, 15h18
  3. [SSRS][SSAS] Grouper les lignes de détails
    Par hirondelle_dorée dans le forum SSRS
    Réponses: 7
    Dernier message: 25/08/2010, 18h44
  4. [VBA-E]ComboBox + RowSource ne concerne que les lignes ?
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/04/2006, 15h29
  5. [VBA-E] Parcourir les lignes filtrées après un filtre auto
    Par leptitdave dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/10/2005, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo