Création d'un code arborescent

Bonjour,

Je souhaite créer une arborescence de type :

A . BLABLA

A1 . Blabla

A1.1 blablabla

B. BLIBLI

B1 Bliblibli

B1.1 bliblibli

L'idée est que lorsque j'ajoute / supprime / déplace une ligne, l'arborescence se mette à jour.

Auriez-vous de quoi m'aidez svp ??

Merci beaucoup !

Bonjour,

je ne comprends pas le

A.1.2.2    Banque d'accueil - billetterie

cela devrait être le A.1.2.1 ?

Exercice intéressant ... le VBA est obligatoire, il faut jouer avec la propriété IndentLevel de l'objet Range

Bon je vais regarder dans mes quelques heures de loisir ...

Bonsoir,

Dim TblBD(), NBLig
Sub CreeID()
      NBLig = [Tableau1].Rows.Count
      ReDim TblBD(1 To NBLig, 1 To 2)
      For i = 1 To NBLig
        TblBD(i, 1) = [Tableau1].Item(i, 1)
        TblBD(i, 2) = [Tableau1].Item(i, 1).IndentLevel + 1
      Next i
      TblBD(1, 2) = "1-1-"
      itemp = TblBD(1, 2)
      For i = 2 To NBLig
        niv = TblBD(i, 2)
        If nivprecedent = niv Then
          tmp = maxi2(niv)
          x = Right(tmp, 2)
          y = Left(x, 1) + 1
          TblBD(i, 2) = Left(tmp, niv * 2) & y & "-"
        Else
          If niv > nivprecedent Then
            tmp = itemp
            TblBD(i, 2) = tmp & "1-"
          Else
            tmp = maxi2(niv)
            x = Right(tmp, 2)
            y = Left(x, 1) + 1
            TblBD(i, 2) = Left(tmp, Len(tmp) - 2) & y & "-"
          End If
        End If
        nivprecedent = niv
        itemp = TblBD(i, 2)
        [Tableau1].Item(i, 2) = TblBD(i, 2)
      Next i
      [b2].Resize(NBLig, 1) = Application.Index(TblBD, , 2)
End Sub

Function maxi(niv)
 For j = 1 To NBLig
  If Len(TblBD(j, 2)) = niv * 2 Then
      If TblBD(j, 2) > mx Then mx = TblBD(j, 2)
  End If
 Next j
 maxi = mx
End Function

Function maxi2(niv)
 For j = 1 To NBLig
  If Len(TblBD(j, 2)) = niv * 2 + 2 Then
      If TblBD(j, 2) > mx Then mx = TblBD(j, 2)
  End If
 Next j
 maxi2 = mx
End Function

Boisgontier

5creeid.zip (18.37 Ko)

Bonjour,

Par rapport au code proposé ci-dessus par Jacques Boisgontier que je salue, je me pose la question des données d'entrée ... que faut-il mettre à jour par rapport à quelles données ?

Je vais partir sur la mise à jour des codes colonnes 2, 3 et 4 par rapport au formatage de la colonne 5.

Proposition

Sub numeroter()
chapitre = 64
Columns("B:D").ClearContents
For i = 1 To Cells(Rows.Count, 5).End(xlUp).Row
    If Cells(i, 5) <> "" Then
        If Cells(i, 5) <> "Appellations" Then
            If Cells(i + 1, 5) = "Appellations" Then
                chapitre = chapitre + 1
                souschapitre = 0
                paragraphe = 0
                Item = 0
                Cells(i, 2) = Chr(chapitre)
            Else
                Select Case Cells(i, 5).IndentLevel
                    Case 0
                        souschapitre = souschapitre + 1
                        paragraphe = 0
                        Item = 0
                        Cells(i, 2) = Chr(chapitre) & souschapitre
                    Case 1
                        paragraphe = paragraphe + 1
                        Item = 0
                        Cells(i, 3) = Chr(chapitre) & souschapitre & "." & paragraphe
                    Case 2
                        Item = Item + 1
                        Cells(i, 4) = Chr(chapitre) & souschapitre & "." & paragraphe & "." & Item
                End Select
            End If
        End If
    End If
Next
End Sub

En complément ...

Les modifications comme ajout, suppression de lignes sont automatiquement prises en compte. Mais je n'ai pas réussi à capter l’événement d’indentation qui nécessite alors de relancer la numération par le bouton.

Merci de vos réponses !

Le problème c'est que je n'ai pas idée de ce que sont tous ces codes....!

Y a t-il une manipulation "classique" sans macro pour arriver à construire ça ?

Non, macro obligatoire ...

Rechercher des sujets similaires à "creation code arborescent"