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 :

Générer liste de références "parents" d'une BDD de nomenclature


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 10
    Par défaut Générer liste de références "parents" d'une BDD de nomenclature
    Bonjour,

    Je suis plutôt novice en VBA et je travaille sur un projet de base de données de nomenclature dans ma société. Je n'arrive pas à générer de façon bouclé une liste de toutes les références d'assemblages "parents" d'un composant.

    Je m'explique : un composant peut être présent dans plusieurs assemblages parents directs et chacun de ces assemblages peut aussi être composer d'assemblages parents et ainsi de suite.
    La référence de l'assemblage "maître" est 9000001, c'est le système en entier, donc le dernier niveau. Je souhaiterai générer une sorte de matrice qui par niveau (ligne) me met les références parents à la suite. J'ai fait un exemple sur la deuxième feuille du tableur joint.

    Ma base de données est composée d'uniquement 2 colonnes, la première concerne les références enfants (niveau n) et la seconde les références parents (niveau n+1). La macro fera des va et vient entre ces deux colonnes pour trouver les valeurs.

    J'ai essayé avec des boucles "while" et des commandes "find" sans arriver au résultat escompté...

    Je sollicite donc l'aide du forum! Je ne sais pas si j'ai été très clair...

    Merci beaucoup d'avance pour toute aide de votre part.

    Rico

    Matrice des assemblages parents.xls

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Malgré ton fichier, la logique n'est pas limpide
    Pourquoi met ton 9000006 et 9000005 au même niveau ?
    9000003 ne devrait il pas être aussi sur ce niveau?

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Octobre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 10
    Par défaut
    Bonjour,

    Tout d'abord merci de l'attention que vous portez à mon problème.

    Effectivement je ne suis pas assez clair sur le raisonnement. La liste que je souhaite générer ici (équivalent à ce qu'il y a dans la feuille "MatriceNiveaux") est la liste de tous les assemblages parents de 9000022, or les assemblages parents directs sont 9000005, 9000006 et 9000004. Ces 3 assemblages sont donc sur le même niveau et ont aussi chacun des assemblages parents qui seront sur le niveau plus haut (9000012,9000007,9000001).

    Je veux faire une boucle qui s'arrête uniquement lorsque 9000001 est atteint.

    Merci pour l'aide!

    Rico

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Ca me semble bon, a toi de confirmer

    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
    Sub TriParentsEnfants()
     
     
    Dim i As Long
    Dim Rg As Range
     
    Dim COlCible As Byte
    Dim ligneCible As Long
     
    Dim ShCible As Worksheet
     
    Set ShCible = Sheets("MatriceNiveaux")
     
    For i = 2 To Range("A65536").End(xlUp).Row
     
        'Recherche le parent
        Set Rg = ShCible.Cells.Find(what:=Range("A" & i).Value, Lookat:=xlWhole)
     
        If Rg Is Nothing Then
            'Si pas trouvé on cherche l'enfant on écrit parent ligne 3
            Set Rg = ShCible.Cells.Find(what:=Range("B" & i).Value, Lookat:=xlWhole)
            If Rg Is Nothing Then
                COlCible = ShCible.Cells(3, Me.Columns.Count).End(xlToLeft).Column + 1
                ShCible.Cells(3, COlCible).Value = Range("A" & i).Value
                COlCible = ShCible.Cells(4, Me.Columns.Count).End(xlToLeft).Column + 1
                ShCible.Cells(4, COlCible).Value = Range("B" & i).Value
            Else
                'Si enfant trouvé, on place le maitre ligne de dessus
                COlCible = ShCible.Cells(Rg.Row - 1, Me.Columns.Count).End(xlToLeft).Column + 1
                ShCible.Cells(Rg.Row - 1, COlCible).Value = Range("A" & i).Value
            End If
     
        Else
        'On cherche enfant
            ligneCible = Rg.Row
            Set Rg = ShCible.Cells.Find(what:=Range("B" & i).Value, Lookat:=xlWhole)
     
            If Rg Is Nothing Then
                COlCible = ShCible.Cells(ligneCible + 1, Me.Columns.Count).End(xlToLeft).Column + 1
                ShCible.Cells(ligneCible + 1, COlCible).Value = Range("B" & i).Value
            End If
     
        End If
     
    Next i
     
     
    End Sub

Discussions similaires

  1. Réponses: 9
    Dernier message: 30/04/2008, 10h54

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