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 :

Traitement récursif sur n passes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Consultant fonctionnel
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2006
    Messages : 32
    Par défaut Traitement récursif sur n passes
    Bonjour,

    Je suis confronté à une difficulté dans le développement d'une macro me permettant de mapper l'organisation de l'entreprise dans laquelle je travaille.

    J'ai reçu un fichier, lequel se présente de al manière suivante :

    CODE entité  | Libellé entité | Entité parente
    1	       CORP             NEANT
    2	       Cabinet          1086
    6	       Direction Juri   10
    10	       Secrét. Gnal     1086
    1086	       Présidence       1
    Comme vous le constatez, le traitement que je dois appliquer est récursif, puisque je dois faire la correspondance avec l'entité parente sur plusieurs passes jusqu'à arriver à obtenir la ligne 1 CORP NEANT.

    Le code que j'ai écrit effectue bien le traitement sur 5 passes. Mais je n'arrive pas à voir où mon code déraille (il finit par boucler sur le contenu des 2e et 3e passes). Je joins le fichier avec des exemples de ce que je souhaite obtenir ainsi que le code fonctionnel.

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Sub traitement()
    Application.ScreenUpdating = False
     
    ' définition des variables
    Dim entite_id, cur_passes, total_passes, end_ligne, cur_ligne As Integer
    Dim entite_label As String
    Dim found_cell As Range
     
    'Paramètres : nombre max de lignes, nombre de passes, colonne à utliliser pour récupérer le code entité
    end_ligne = Range("A65536").End(xlUp).Row
    total_passes = 5
    col_passes = 1
     
    ' traitement des n passes
    For cur_passes = 1 To total_passes
     
        ' déplace le curseur pour tenir compte des différentes passes
        If cur_passes >= 2 Then
     
        col_passes = col_passes + 2
     '   MsgBox col_passes
        End If
     
        'traitement sur l'ensemble des lignes
        For cur_ligne = 2 To end_ligne
            entite_id = Cells(cur_ligne, col_passes + 2)
            Set found_cell = Range(Cells(1, col_passes), Cells(end_ligne, col_passes)).Find(entite_id, lookat:=xlWhole)
     
            If found_cell Is Nothing Then
            Cells(cur_ligne, 1).Select
                With Selection.Interior
                .ColorIndex = 38
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                End With
     
            Else
         ' copie du label de l'entité et de son entité parente   
            found_ligne = found_cell.Row
            found_col = found_cell.Column
     
            Range(Cells(found_ligne, 2), Cells(found_ligne, 3)).Select
            Selection.Copy
            Cells(cur_ligne, col_passes + 3).Select
            ActiveSheet.Paste
     
            End If
        Next cur_ligne
     
    Next cur_passes
     
    Application.ScreenUpdating = True
     
    End Sub

    Je pense que mon problème réside dans la gestion du décalage de l'entité à rechercher au fur et à mesure des passes.
    Merci pour vos conseils

    Bien cordialement.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,

    je te propose une autre approche algorithmique :

    Tu fais une fonction qui te retourne
    > soit l'ID de l'entité Parente
    > Soit 0 (ou une autre valeur par défaut identifiée)

    Tu boucleras de façon récursive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = 2 to 6 'je prends ton fichier en exemple, on peut fixer imax à 6 ou à Range("A65536").End(XlUp).Row
    Do Until Mafonction(MonIdEnfant)=0
    'code de recopie dans les cellules
    'on peut utiliser Cells(i,256).End(XlToLeft).Column 
    Loop
    Next i
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

Discussions similaires

  1. [Oracle 9i] Traitement SQL sur une table
    Par Requin15 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 02/06/2006, 09h56
  2. [XSLT] Appliquer un traitement xslt sur un fichier XML distant
    Par mabig dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/03/2006, 09h38
  3. Réponses: 13
    Dernier message: 12/01/2006, 21h06
  4. Réponses: 3
    Dernier message: 18/11/2005, 16h58
  5. Traitement récursif ?
    Par Neilos dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/08/2005, 22h30

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