Je profite de ce dimanche pour partager une petite macro Excel que j’utilise depuis quelques temps compte tenu de l’usage d’un format de nomenclature assez constant chez nos clients. Cette macro me permet de recréer des liens de nomenclature à partir d’un fichier Excel dans lequel on retrouve une liste d’articles avec leur niveau dans la nomenclature. C’est assez simple à lire pour l’être humain. On comprend rapidement que quand une ligne a le niveau 3 et que la suivante a le niveau 4, il y a un lien de nomenclature entre les deux. Cependant au niveau d’excel, il n’y a aucune relation. Seul notre regard et notre connaissance du concept de nomenclature nous permet d’en déduire une. Voila un aperçu de ce que je peux recevoir comme nomenclature.

nomenclature

Au passage vers la solution PLM il nous faut donc recréer ce lien. Il faut que l’on puisse indiquer pour chaque ligne quel est l’élément parent. Je rajoute donc une colonne après le niveau pour renseigner le part Number de l’élément parent. J’applique ensuite la macro suivante à adapter à votre fichier (Constantes initiales à modifier. Attention à commencer par la ligne en dessous de votre article de tête, 3 dans l’exemple).

 Sub rebuild()


' initialize constant for your excel file '
Dim StartingLine As Integer
StartingLine = 3
Dim Column_Level As Integer
Column_Level = 1
Dim Column_ParentRef As Integer
Column_ParentRef = 2
Dim Column_PartRef As Integer
Column_PartRef = 3

' other technical variables '
Dim j As Integer
Dim StoreParents(40) As String

'initialize first parent Part Number '
initParent = Cells(StartingLine, 5)

' Start rebuilding BOM '
j = StartingLine
While Cells(j, Column_Level) <> ""

    If (CInt(Cells(j, Column_Level)) > CInt(Cells(j - 1, Column_Level))) Then

        ' level has increased so parentref is previous line part ref '
        StoreParents(Cells(j - 1, Column_Level)) = Cells(j - 1, Column_PartRef)
        Cells(j, Column_ParentRef) = Cells(j - 1, Column_PartRef)

    ElseIf (CInt(Cells(j, Column_Level)) < CInt(Cells(j - 1, Column_Level))) Then

        ' level has decreased so parentref is the stored partRef of new level - 1 '
        Cells(j, Column_ParentRef) = StoreParents(Cells(j, Column_Level) - 1)

    Else

        ' no level change, we keep the same ParentRef '
        Cells(j, Column_ParentRef) = Cells(j - 1, Column_ParentRef)

    End If

    ' move to next line '
    j = j + 1

Wend
End Sub

Vous devriez donc obtenir un fichier avec les références parents indiquées. J’ai fait exprès de lister un article de niveau 3 puis de niveau 1 pour montrer que l’on peut remonter de plusieurs niveaux à la fois sans problème.

Nomenclature Remontée

 

Voilà mon petit cadeau du dimanche ! C’est pas compliqué mais ça peut servir de temps en temps.

Posted by Yoann Maingon

Consultant PLM avec des expériences autant côté métier que dans l'implémentation technique de solutions PLM et d'intégrations de systèmes, je partage avec vous mes expériences, mes recherches et mes développements à travers ce blog.