XL 2016 Formule complexe. Je ne m'en sors pas..

Gturkmen

XLDnaute Nouveau
Bonjour, j'ai créé un tableau de production.

Je n'arrive pas concernant la formule : onglet "Données" en E3 qui doit être :

Date de livraison - date du jour - les jours férié - les jours de fermeture de l'atelier. Le résultat dois me donner une amplitude de production en heure.
Dans l'onglet "parametre', j'ai les heures d'ouverture de l'atelier et un autres onglet "jours férié".

Si vous pouviez m'aider !Merci à vous !!
 

Pièces jointes

  • Plan de charge guven.xlsx
    66.3 KB · Affichages: 27
Solution
Bonsoir Gturkmen, job75, le fil,

bienvenue sur le site XLD ! 🥳

Image.jpg


dans cette fenêtre "Microsoft Visual Basic", fais Alt i m pour insérer un module « standard ». :)

soan

job75

XLDnaute Barbatruc
Bonjour Gturkme, bienvenue sur XLD,

Voyez le fichier joint et cette fonction VBA :
VB:
Function HProduction(deb#, fin#, t1#, t2#, t3#, t4#, fer As Range)
Dim n&, datheure#, dat&, test As Boolean, heure#, minutes&
For n = 1440 * deb To 1440 * fin
    datheure = n / 1440
    If Int(CDec(datheure)) > dat Then
        dat = Int(CDec(datheure))
        test = Weekday(dat, 2) < 6 And Application.CountIf(fer, dat) = 0
    End If
    heure = datheure - dat
    If test And (heure > t1 And heure <= t2 Or heure > t3 And heure <= t4) Then minutes = minutes + 1
Next
HProduction = minutes / 1440
End Function
Le code doit être placé impérativement dans un module standard.

Formule en E3 à tirer vers le bas :
Code:
=HProduction(C3;D3;_dmat;_fmat;_dapm;_fapm;_off)
A+
 

Pièces jointes

  • Plan de charge guven(1).xlsm
    72.2 KB · Affichages: 6

job75

XLDnaute Barbatruc
D'évidence dans le fichier précédent les minutes indiquées en E3 E6 E7 ne sont pas correctes.

Cela est dû à la comparaison des heures, pour y remédier il faut arrondir les heures à la 6ème décimale.

Utilisez donc ce fichier (2) :
VB:
Function HProduction(deb#, fin#, t1#, t2#, t3#, t4#, fer As Range)
Dim n&, datheure#, dat&, test As Boolean, heure#, minutes&
t1 = Application.Round(t1, 6): t2 = Application.Round(t2, 6)
t3 = Application.Round(t3, 6): t4 = Application.Round(t4, 6)
For n = 1440 * deb To 1440 * fin
    datheure = n / 1440
    If Int(CDec(datheure)) > dat Then
        dat = Int(CDec(datheure))
        test = Weekday(dat, 2) < 6 And Application.CountIf(fer, dat) = 0
    End If
    heure = Application.Round(datheure - dat, 6)
    If test And (heure > t1 And heure <= t2 Or heure > t3 And heure <= t4) Then minutes = minutes + 1
Next
HProduction = minutes / 1440
End Function
 

Pièces jointes

  • Plan de charge guven(2).xlsm
    71.8 KB · Affichages: 5

Gturkmen

XLDnaute Nouveau
Merci Job 75, Franchement je suis toujours épanoui par les personne qui maîtrise excel à fond.
Est il possible toujours dans la cellule E3 de dire qu'il prenne pas automatiquement la date du jour mais la date la plus prêt de la date de livraison Entre la date du jour et la date de début de production.

Dans le message précédent, tu me dis : "Le code doit être placé impérativement dans un module standard" Pour tout te dire, je ne vois pas du tout ce que c'est le mode standard.

En ter remerciant beaucoup !!!!!
 

Discussions similaires

Statistiques des forums

Discussions
312 087
Messages
2 085 198
Membres
102 815
dernier inscrit
Henridic