Recherche d'antecedant et successeur vba

fmaneglia

XLDnaute Nouveau
Bonjour,
Je suis en train de realiser en vba sous excel une macro permettant de realiser un diagramme de GANTT. Je me heure a un probleme: Comment retrouver les antecedants d'une tache parmis n taches liees?
Pour etre plus clair voici un exemple:
Tache B (successeur) Tache A (predecesseur)
3 7
3 1
4 7
4 2
5 3
6 4
6 5
5 2
si je cherche les plus lointains antecedants de la tache 6, je devrais trouver:
6->4->2
6->4->7
6->5->2
6->5->3->7
6->5->3->1
Je devrais donc avoir comme resultats : 2,7,2,7,1
J'ai fait une fonction mais je n'obtiens qu'un resultat partiel.
J'ai essaye de la modifier mais je n'arrive pas a faire en sorte de ne pas creer de redondance cyclique.
Quelqu'un aurait il une idee sur comment faire?

Ci-apres la procedure que j'ai fait:
-------------------------------------------------------------------------------------
Function recherche_antecedants(f As Integer) As Boolean 'f=numero tache a tester
Dim i, j, b, d, k, m, n As Integer
Application.DisplayAlerts = False
If feuille_existe("antecedants") = True Then 'cree la feuille antecedant pour la recherche des redondances cycliques
Sheets("antecedants").Delete
End If
Application.DisplayAlerts = True
Sheets.Add.Name = "antecedants"
Sheets("antecedants").Activate

b = Sheets("predecesseurs").Range("A65536").End(xlUp).Row 'determine la derniere ligne non vide de la 1ere colonne
'-------------------------------------------------------------------------------
'---- Recherche du nombre de fois que la tache a ete entree en tache B ----
'-------------------------------------------------------------------------------
m = 0
d = 2
i = 2
'd = Sheets("antecedants").Range("A65536").End(xlUp).Row 'determine la derniere ligne non vide de la 1ere colone
Do Until i > b 'cherche les lignes ou il y a des antecedants
If Sheets("predecesseurs").Cells(i, 1) = f Then
m = m + 1
Sheets("antecedants").Cells(1, d) = i 'Stocke le numero de la ligne
d = d + 1
i = i + 1
Else
i = i + 1
End If
Loop

d = 2
If m > 1 Then
For j = 1 To m
i = Sheets("antecedants").Cells(1, d)
n = f
Do Until i > b
If Sheets("predecesseurs").Cells(i, 1) = n Then 'cherche si parmi les taches B il trouve f
n = Sheets("predecesseurs").Cells(i, 2) 'change la valeur de f pour faire une recherche d'antecedent
i = 2 'repart a zero pour faire la recherche d antecedant avec la nouvelle valeur de f
End If
i = i + 1
Loop
d = d + 1
MsgBox n
Next
Else
i = 2
n = f
Do Until i > b
If Sheets("predecesseurs").Cells(i, 1) = n Then 'cherche si parmi les taches B il trouve f
n = Sheets("predecesseurs").Cells(i, 2) 'change la valeur de f pour faire une recherche d'antecedent
i = 2 'repart a zero pour faire la recherche d antecedant avec la nouvelle valeur de n
Else
i = i + 1
End If
Loop
MsgBox n
End If

End Function
---------------------------------------------------------------------------------------
Cette fonction va rechercher dans une feuille excel les donnees dont elle a besoin. Les donnees sont sous la forme suivante:
Numero tache Numero predecesseur Type de decalage duree du decalage Unite du decalage
3 7 FD 4 H
3 1 FD 4 H
4 7 FD 4 H
4 2 FD 4 H
5 3 FD 3 H
6 4 FD 4 H
6 5 FD 5 H
5 2 FD 6 H

D'avance merci.
 

Discussions similaires

Statistiques des forums

Discussions
312 795
Messages
2 092 193
Membres
105 268
dernier inscrit
mimi 25