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.
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.