Bonsoir
Une solution consiste effectivement à noter dans une colonne tous les jours, ...
Pas si simple. Si tu as par ex 6 jours de congés ou fériés, tu vas rajouter 6. Mais dans ces 6 jours rajoutés, il y a peut-être d'autres RDV, jours de congés...Réponse question 1):
Effectivement la colonne risque d'être longue, cela dit le tableau fera 50 lignes max à la fin.
Peut on utiliser ta méthode de décompte des minutes pour les RDV seulement.
Pour les congés et jours feriés une formule du genre:
=SOMMEPROD(NB.SI.ENS(A2:A17;"<="&jours;B2:B17;">="&jours)*(JOURSEM(jours;2)<6))))
jours=LIGNE(INDIRECT(Début&":"&Fin))
afin de calculer le nb de jours ouvrés a ajouter.
En fait, la formule dans la colonne I n'est pas si compliquée que ça, mais un peu "répétitive"... En VBA, ce n'est certainement pas très compliqué, avec quelques tests et une boucle ajoutant les bonnes minutes. Mais bon...Réponse question 2):
OK, effectivement, dans ces conditions, si, sur une ligne, on met une période de calcul trop petite, Excel ne trouve pas la réponse, et toutes les lignes suivantes donnent #Nombre.Réponse avec fichier 7:
J'ai mis les taches les unes à la suite des autres, la date de début correspond à la date de fin de la tache antérieure.
Bonjour Cisco,
....
2) Faut il penser à transposer ou pas en VBA pour augmenter la vitesse des calculs ?
Merci et A+
Sub Finpiece()
Dim ligne As Integer
Dim k As Integer
Dim minut As Integer
Dim tempsefficace As Integer
Dim tempsecoulé As Integer
For ligne = 29 To 38
début = Cells(ligne, 3) + Cells(ligne, 5)
tempsefficace = 0
tempsécoulé = 1
tempsnécessaire = Cells(ligne, 6) * 24 * 60
While tempsefficace < tempsnécessaire
minut = 1
test = début + tempsécoulé / (24 * 60)
'Est-ce que la minute en cours est travaillée ou pas ? Si oui, minut = 1, sinon, minut = 0
If (test - Int(test)) <= Cells(2, 3) Then ' trop tot
minut = 0
ElseIf (Cells(3, 3) < (test - Int(test)) And (test - Int(test)) <= Cells(5, 3)) Then ' repos de midi
minut = 0
ElseIf Cells(6, 3) < (test - Int(test)) Then ' trop tard
minut = 0
ElseIf Weekday(test, 2) = 6 Or Weekday(test, 2) = 7 Then 'Samedi, dimanche ?
minut = 0
'tempsécoulé = Int(tempsécoulé + (Int(test + 1) - test) * 24 * 60)
End If
' 10 lignes de RDV, congés...
For k = 1 To 10
If minut = 1 And Cells(13 + k, 8) < test And test <= Cells(13 + k, 9) Then
minut = 0
'tempsécoulé = Int(tempsécoulé + (Cells(13 + k, 9) - test) * 24 * 60)
k = 10
End If
Next
tempsefficace = tempsefficace + minut
tempsécoulé = tempsécoulé + 1
Wend
'Affichage du résultat
Cells(ligne, 9) = test
Next ligne
End Sub
FREQUENCE(H$29+LIGNE(INDIRECT("1:"&Feuil1!$G$29))/(24*60);T1:T8)
* EST.IMPAIR(EQUIV(H29+listemin/(24*60);K$13:$K$23;1))
*EST.IMPAIR(EQUIV(H29+listemin/(24*60);PETITE.VALEUR(H$13:I$23;LIGNE(INDIRECT("1:"&2*LIGNES($13:$23))));1))
*EST.IMPAIR(EQUIV(H29+listemin/(24*60);PETITE.VALEUR(H$13:I$50;LIGNE(INDIRECT("1:"&2*LIGNES($13:$50))));1))