[VBA-Excel] Construction d'un arbre d'appels

Construction d'un arbre d'appels [VBA-Excel] - VB/VBA/VBS - Programmation

Marsh Posté le 24-05-2007 à 10:16:15    

Bonjour,
 
Je me retrouve face à un petit problème, j'espère que vous saurez m'indiquer une direction…  ;)  
 
 
Voici la feuille Excel que j'ai en entrée ( chaque chaine se trouve dans une cellule à partir de la A1 ) :
 

Chaine3 Chaine4
Chaine3 Chaine7
Chaine1 Chaine2
Chaine1 Chaine3
Chaine6 Chaine5
Chaine6 Chaine3
Chaine5 Chaine4
Chaine5 Chaine7
Chaine7 Chaine8
Chaine7 Chaine9


 
 
Et voici la feuille Excel que je dois obtenir en sortie ( partir de la cellule A1 toujours ) :
 


Chaine1 Chaine2
        Chaine3 Chaine4
                Chaine7 Chaine8
                        Chaine9
Chaine6 Chaine5 Chaine4
                Chaine7 Chaine8
                        Chaine9
        Chaine3 Chaine4
                Chaine7 Chaine8
                        Chaine9


 
 
En gros, lorsqu'on parcourt les cellules de la première colonne, s'il s'avère que l'une d'entre elles se trouve aussi dans la seconde colonne, cela signifie que cette chaine est de second niveau, et doit donc être inscrite dans la colonne cible + 1, et non la colonne cible  :ouch:  
 
J'ai pensé à un algorithme de ce type :
 

Pour chaque cellule de la première colonne
 
 Chercher cette cellule dans la seconde colonne
   
  Si trouvée
   Alors cette celulle est de second niveau, donc on ne l'écrit pas encore
  Si non trouvée
   Alors écrire cette cellule dans la colonne cible de la seconde feuille
         écrire sa celulle adjacente dans la colonne cible adjacente de la seconde feuille      
  FinSi
   
 Passage à la cellule de la première colonne suivante
   
FinPour


 
 
Qu'est-ce que vous en pensez ? Avez-vous une idée du code ?
 
Je planche dessus depuis deux jours et j'avoue sécher complètement ...  :(  
 
Merci d'avance !


Message édité par fenx31 le 24-05-2007 à 12:05:49
Reply

Marsh Posté le 24-05-2007 à 10:16:15   

Reply

Marsh Posté le 24-05-2007 à 10:52:00    

2 solutions comme ca a cho :
1/
- un petit système récursif est pas mal
 
tu balances dans le tube ta valeur cherchée + la colonne où il figurera
 
ca donnera un truc du style
function recur(a,i) as integer qui te retourne le rang de ta "ChaineX"
 
2/
- tu listes les lignes dont la colonne A n'apparait dans aucune colonne B
=> rang 1
- tu listes les colonnes B de ces lignes
=> rang 2
- tu listes les lignes dont la colonne A est un rang 2, tu relèves les colonnes B
=> rang 3
- tu listes les lignes dont la colonne A est un rang 3, tu relèves les colonnes B
=> rang 4
etc.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed