Excel - Créer une liste d'étape à partir d'une base

Bonjour,

j'ai une liste des avec ID et des levels. Je souhaiterais qu'excel me liste automatiquement une numérotation scientifique à partir de l'ID et du niveau.

J'ai essayé et finalement réussi mais en réalisant une véritable usine à gaz en terme de formule. Je me demande s'il n'y a pas une méthode simple pour y arriver

Merci à vous

Voici ce que j'ai

NiveauIDDescription
1100Achat de matière première
2110Verification du stock
3110Vérification du produit 28 du stock
4111Verification du l'état du produit 28 du stock
3139Verification du produit 13 du stock
4142Verification de l'étape du produite 13 du stock
3156Verification du produit 82 du stock
2189Verification de la date de livraison
1212Vente du produti fini

Voici ce que j'aimerais :

NiveauIDEtapeDescription
11001.Achat de matière première
21101.1Verification du stock
31101.1.1Vérification du produit 28 du stock
41111.1.1.1Verification du l'état du produit 28 du stock
31391.1.2Verification du produit 13 du stock
41421.1.2.1Verification de l'étape du produite 13 du stock
31561.1.3Verification du produit 82 du stock
21891.2Verification de la date de livraison
12122.Vente du produti fini

bonjour,

2 propositions une fonction personnalisée et une macro.

Function level(tabid)
    ' attribue un numéro hierarchique la cellule en fonction d'une table de niveaux qui contient la séquence des niveaux jusqu'à et y compris la cellule concernée.
    ' exemple pour mettre en colonne C : le numéro hiérarchique de la ligne 2, mettre en C2 la fonction = level($A$2:$A2) et tirer vers le bas
    Dim tabn(1 To 10) 'max 10 niveaux hiérarchiques.
    For Each ID In tabid
        If tabn(ID) = "" Then
            If ID = 1 Then
                tabn(ID) = ".1"
            Else
                tabn(ID) = tabn(ID - 1) & ".1"
            End If
        Else
            tabn(ID) = Left(tabn(ID), InStrRev(tabn(ID), ".")) & Mid(tabn(ID), InStrRev(tabn(ID), ".") + 1) + 1
            For j = ID + 1 To 10
                tabn(j) = ""
            Next
        End If
        r = Mid(tabn(ID), 2)
    Next ID
    level = r
End Function

Sub numlevel()
    'macro
    ' attribue un numéro hiérarchique sur base de niveaux en situés en colonne A à partir de la ligne 2
    etape = "C2" ' à adapter colonne dans laquelle mettre la numérotation par niveau
    dl = Cells(Rows.Count, 1).End(xlUp).Row
    Dim tabr()
    ReDim tabr(1 To dl, 1 To 1)
    Dim tabn(1 To 10)
    For i = 2 To dl
        ID = Cells(i, 1)
        If tabn(ID) = "" Then
            If ID = 1 Then
                tabn(ID) = ".1"
            Else
                tabn(ID) = tabn(ID - 1) & ".1"
            End If
        Else
            tabn(ID) = Left(tabn(ID), InStrRev(tabn(ID), ".")) & Mid(tabn(ID), InStrRev(tabn(ID), ".") + 1) + 1
            For j = ID + 1 To 10
                tabn(j) = ""
            Next
        End If
        tabr(i - 1, 1) = "'" & Mid(tabn(ID), 2)
    Next i
    Range(etape).Resize(dl - 1, 1) = tabr
End Sub

Super je teste et je vous fais un retour

Juste une question à vous deux : pourquoi 142 correspond à 1.1.2.1 ? J'aurais bien vu 1.1.1.2 dans une autre logique.
Pas compris l'algo. Merci.

Hello,

j'ai testé, ca marche parfaitement :) Merci beaucoup c'est top.

Pour répondre à optimix, l'ID est en fait un nombre aléatoire qui provient de plusieurs sources de data. Si effectivement j'avais pu me baser sur cet ID, ca m'aurait facilité le travail !

Merci en tous cas, ca fonctionne vraiment bien :) je suis fan

Ca ne répond pas vraiment à ma question : oublions le 142 et parlons en n° de ligne :
si la 4 (4-111) donne 1.1.1.1 pour quoi la 6 (4-142) ne donne pas 1.1.1.2 ?
C'est juste la logique qui m'intéresse.

Ah dsl, je reviens, j'ai un petit bug. A partir du lvl 2, lorsqu'il y a 2.1, il continue la suite 1.x.x au lieu de 2.1.1. Ca se remet comme il faut à partir du level 2.2

Work Breakdown Structure Template

12002
22002.1
32111.4.7
32121.4.8

Merci beaucoup

Bonjour Optimix,

j'ai compris qu'il s'agissait d'une numérotation de type chapitres et sous-chapitres.

donc chaque fois qu'on reste à un niveau le niveau augmente de 1 et les sous-niveaux suivants reviennent à 1.

1> 1.

1> 2.

2> 2.1.

3> 2.1.1.

2> 2.2.

3> 2.2.1.

3> 2.2.2.

4> 2.2.2.1.

4> 2.2.2.2.

3> 2.2.3.

4> 2.2.3.1

1> 3.

@emiate, je ne parviens pas à reproduire l'erreur que tu mentionnes

Hello, je mets en PJ le fichier avec l'erreur

Merci beaucoup pour vos efforts !

Merci pour les infos H2sO4. Joli programme.

@Emiate,

En effet, il y avait bien un bug, c'est corrigé

super, merci. J'espère un jour avoir ce niveau sur VBA & excel, grand grand merci :)

Rechercher des sujets similaires à "creer liste etape partir base"