2 votes

Dessiner un arbre/un treillis avec VBA en utilisant un tableau

J'essaie de générer un arbre binomial pour l'évaluation des options, et je veux dessiner un treillis en utilisant des valeurs qui proviennent d'un tableau où les valeurs sont déjà présentes.

En fait, j'ai un tableau dans mon VBA qui ressemble à ceci :

Mon tableau en vba

Et je veux coller une feuille Excel dans ce formulaire : Comment je veux coller dans ma feuille de travail

Je ne demande pas nécessairement un code, j'aimerais juste avoir une idée de l'algorithme utilisé pour créer l'arbre. J'ai vraiment essayé de voir un modèle et je n'ai pas trouvé.

Ce que j'ai identifié est que si le nombre de colonnes du tableau est (n+1), alors le nombre de lignes sera (2n-1).

Merci d'avance

1voto

John Coleman Points 4693

Cela pourrait vous donner une idée. Vous devrez le modifier si votre tableau n'est pas basé sur 1 :

Sub InsertTree(Nodes As Variant, RootNode As Range)
    'Assumes that Nodes is a 1-based array
    'That has data 1-element in its first
    'column, 2 in its second, etc. And that RootNode
    'Has been chosen so that there is enough room
    'for the tree
    Dim i As Long, j As Long, n As Long
    Dim TopNode As Range 'top node in each column

    n = UBound(Nodes, 2)
    Set TopNode = RootNode

    For j = 1 To n
        For i = 1 To j
            TopNode.Offset(2 * (i - 1)).Value = Nodes(i, j)
        Next i
        If j < n Then Set TopNode = TopNode.Offset(-1, 1)
    Next j
End Sub

À titre de test, j'ai configuré ma feuille de calcul de manière à ce que, à partir de A1, j'aie :

a b d g
  c e h
    f i
      j

Puis j'ai couru :

InsertTree Range("A1:D4").Value,Range("F10")

Et le résultat ressemble à ça :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X