Microsoft 365 Déterminer le nombre de chèques emploi

Aragorn31470

XLDnaute Nouveau
Bonjour
Chaque mois je dois avec les heures des 4 personnes s'occupant de ma mère déterminer pour chacune le nombre de chèques emploi à leur donner pour les payer. J'ai 4 type de chèque avec des montants différents (par exemple 22€, 11,56€, 8,65€ et 4,12€). J'ai un nombre de chèque défini chaque mois. Comment automatiser le nombre de chèque à donner selon le montant de ces derniers et le montant à les payer. Elles ne travaillent pas avec des horaires identiques....Le montant payé ne peut être là somme à payer mais doit dépasser ce montant avec une différence positive la plus petite possible. Merci d'avance
 

Aragorn31470

XLDnaute Nouveau
Bonjour @patricktoulon
J'ai joint ce que j'avais fait initialement (onglet janvier 2023), je rempli les 4 tableaux dans l'ordre A,B,C et D. J'ai regardé votre fichier - malheureusement tout changement entraine une source d'erreur !? Merci
 

Pièces jointes

  • SUIVI REGLEMENTS CESU CORINNE & SILVANA & LAURE VER TEST JPC NE PAS OUVRIR .xlsx
    87.7 KB · Affichages: 3

Katido

XLDnaute Occasionnel
Bonjour,

Une solution VBA qui teste toutes les configs à la bourrin, vu le petit nombre de personnes et de types de chèque. Extensible à plus de 4 types de chèque et plus de 4 personnes.

Attention, on suppose que le nombre de chèques disponibles est donné pour chaque personne et non pour l'ensemble, ce qui serait plus complexe.
 

Pièces jointes

  • NbCheques.xlsm
    27.3 KB · Affichages: 2

Aragorn31470

XLDnaute Nouveau
Bonsoir Katido

Merci pour ta proposition. Malheureusement le nombre de chèque concerne l'ensemble des 4 personnes
Voir onglet Janvier 2023 dans fichier en PJ. C'est râlant j'ai l'impression qu'à chaque fois il manque pas grand chose.
 

Pièces jointes

  • SUIVI REGLEMENTS CESU CORINNE & SILVANA & LAURE VER TEST JPC NE PAS OUVRIR .xlsx
    87.7 KB · Affichages: 1

job75

XLDnaute Barbatruc
Désolé pour ma 1ère réponse à coté de la plaque, je n'avais rien compris au problème.

Voyez le fichier joint et cette fonction VBA (matricielle) :
VB:
Function Nombre(Apayer, cheques, nmax)
'les plages cheques et nmax sont des vecteurs lignes
Dim a%(), mini#, n1%, n2%, n3%, n4%, paye#
Apayer = Apayer.Value2
cheques = Application.Transpose(Application.Transpose(cheques.Value2))
nmax = Application.Transpose(Application.Transpose(nmax.Value))
ReDim a(1 To 4)
mini = 1000000000
For n1 = 0 To nmax(1)
    For n2 = 0 To nmax(2)
        For n3 = 0 To nmax(3)
            For n4 = 0 To nmax(4)
                paye = n1 * cheques(1) + n2 * cheques(2) + n3 * cheques(3) + n4 * cheques(4)
                If paye > Apayer Then
                    If paye < mini Then
                        mini = paye
                        a(1) = n1
                        a(2) = n2
                        a(3) = n3
                        a(4) = n4
                    End If
                End If
Next n4, n3, n2, n1
Nombre = a 'matrice à une ligne
End Function
Le résultat n'est pas le même que celui trouvé par JHA.
 

Pièces jointes

  • Chèques(1).xlsm
    19.1 KB · Affichages: 5

Aragorn31470

XLDnaute Nouveau
Désolé pour ma 1ère réponse à coté de la plaque, je n'avais rien compris au problème.

Voyez le fichier joint et cette fonction VBA (matricielle) :
VB:
Function Nombre(Apayer, cheques, nmax)
'les plages cheques et nmax sont des vecteurs lignes
Dim a%(), mini#, n1%, n2%, n3%, n4%, paye#
Apayer = Apayer.Value2
cheques = Application.Transpose(Application.Transpose(cheques.Value2))
nmax = Application.Transpose(Application.Transpose(nmax.Value))
ReDim a(1 To 4)
mini = 1000000000
For n1 = 0 To nmax(1)
    For n2 = 0 To nmax(2)
        For n3 = 0 To nmax(3)
            For n4 = 0 To nmax(4)
                paye = n1 * cheques(1) + n2 * cheques(2) + n3 * cheques(3) + n4 * cheques(4)
                If paye > Apayer Then
                    If paye < mini Then
                        mini = paye
                        a(1) = n1
                        a(2) = n2
                        a(3) = n3
                        a(4) = n4
                    End If
                End If
Next n4, n3, n2, n1
Nombre = a 'matrice à une ligne
End Function
Le résultat n'est pas le même que celui trouvé par JHA.
Bonjour. De mon côté je n'avais pas été très clair. Je regarde votre proposition dès que j'arrive. Dans tous les cas de figure merci beaucoup
 

job75

XLDnaute Barbatruc
Bonjour Aragorn31470, le forum,

Une solution plus conventionnelle sans les Application.Transpose avec ce fichier (2) :
VB:
Function Nombre(Apayer As Range, cheques As Range, nmax As Range)
'les plages cheques et nmax sont des vecteurs lignes
Dim xApayer#, xcheques, xnmax, a%(), mini#, n1%, n2%, n3%, n4%, paye#
xApayer = Apayer.Value2
xcheques = cheques.Value2 'matrice, plus rapide
xnmax = nmax.Value'matrice, plus rapide
ReDim a(1 To 4)
mini = 1000000000
For n1 = 0 To xnmax(1, 1)
    For n2 = 0 To xnmax(1, 2)
        For n3 = 0 To xnmax(1, 3)
            For n4 = 0 To xnmax(1, 4)
                paye = n1 * xcheques(1, 1) + n2 * xcheques(1, 2) + n3 * xcheques(1, 3) + n4 * xcheques(1, 4)
                If paye > xApayer Then
                    If paye < mini Then
                        mini = paye
                        a(1) = n1
                        a(2) = n2
                        a(3) = n3
                        a(4) = n4
                    End If
                End If
Next n4, n3, n2, n1
Nombre = a 'matrice à une ligne
End Function
En plus le recalcul est plus rapide : 1,4 milliseconde au lieu de 3,6 millisecondes avec le fichier (1).
 

Pièces jointes

  • Chèques(2).xlsm
    19.5 KB · Affichages: 4

Katido

XLDnaute Occasionnel
Rebonjour,

Il est peut-être un peu tard pour poster une réponse, mais tant pis. Ce problème intéressant m'était resté dans un coin de cervelle.
Contrairement à ma version précédente, il est supposé que le nombre de chèques disponibles est donné pour l'ensemble des personnes. Ça devrait répondre au besoin pour les mois qui viennent.
 

Pièces jointes

  • Cheques.xlsm
    29 KB · Affichages: 1

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 738
Messages
2 112 339
Membres
111 512
dernier inscrit
Gilles727