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 :

Algorithme récursif sur un arbre [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Par défaut Algorithme récursif sur un arbre
    Bonjour tout le monde,
    Voilà je galère un peu sur un algo que je cherche à faire, je m'explique :
    J'ai dans un classeur Excel, une colonne remplie par 1 chiffre de 1 à 4 qui correspondent à des niveaux et sous niveaux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    1
    2
    2
    3
    3
    2
    3
    4
    4
    2
    1
    2
    Je souhaiterais parcourir cette colonne et pour chaque ensemble de niveau et sous niveau faire un groupement de ligne.
    dans mon exemple cela donnerais cela (en imaginant que les tirets sont les regroupement des lignes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    1
    -2
    -2
    --3
    --3
    -2
    --3
    ---4
    ---4
    --2
    1
    -2
    J'avais trouvé un algo de regroupement sur 3 niveau non récursif mais mon chef vient de changer d'idée et veux sur 4 niveaux, et comme je galère pour faire mon 4 ème niveau j'aurais voulut explorer l'idée d'utiliser les fonction récursives pour faire mon bousin. Sauf que la récursivité c'est assez complexe à représenter dans un algo.

    Auriez vous quelques idées, quelques pistes autre que l'exemple de la fonction factorielle () ? Et je suis aussi preneur sur la capacité à réfléchir à l'élaboration d'une fonction récursive.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Par défaut
    Bon au final j'ai trouvé une solution super plus simple que ce que j'avais avant mais ça reste de l'itératif.
    Si ça peut en aider d'autres voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    'procédure de regénération des groupes de niveau
    Public Sub Regen_LevelGroup()
    Dim l_i_LineStart As Integer, l_i_LineEnd As Integer
    Dim l_i_Start As Integer
    Dim l_i As Integer, l_j As Integer
     
       On Error GoTo Gest_Err
     
       'récupération de la 1ère ligne de niveau
       l_i_LineStart = Range("A1").End(xlDown).Row
     
       'récupération de la dernière ligne de niveau
       l_i_LineEnd = Range("A65535").End(xlUp).Row
     
       'on ne groupe que les niveau 4, 3 et 2
       For l_j = 4 To 2 Step -1
          'pour chaque lignes de niveau
          For l_i = l_i_LineStart To l_i_LineEnd
     
             'si le niveau en cours est trouvé
             If (Cells(l_i, 1).Value = l_j) Then
                l_i_Start = l_i
     
                'tant que la valeur du niveau en cours est supérieur ou égal à celui du groupement
                Do While Cells(l_i, 1).Value >= l_j
                   l_i = l_i + 1
                Loop
     
                l_i = l_i - 1 'on enlève le dernier élément car < niveau recherché
     
                If (l_i_Start <= l_i) Then Rows(l_i_Start & ":" & l_i).Rows.Group
             End If
     
          Next l_i
       Next l_j
     
    FIN:
       Exit Sub
     
    Gest_Err:
       MsgBox "Regen_LevelGroup : " & Err.Description, vbCritical, C_S_MESS_ERR
       Resume FIN
     
    End Sub

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

Discussions similaires

  1. [PHP 5.4] Algorithme récursif sur tableau
    Par gotomtom dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2015, 09h29
  2. Aide sur un algorithme récursif
    Par christianf dans le forum Débuter
    Réponses: 2
    Dernier message: 20/08/2010, 04h35
  3. Tutoriel sur les arbres
    Par emidelphi77 dans le forum Langage
    Réponses: 2
    Dernier message: 09/10/2005, 23h09
  4. problème algorithme récursif
    Par seb888 dans le forum Général Java
    Réponses: 11
    Dernier message: 04/06/2005, 21h35
  5. Recherche documentation sur les arbres
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 22/09/2004, 01h40

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