Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Des conseils sur Do...Loop (Acc2000)

4 réponses
Avatar
JeanYves \(au pro\)
Bonjour,



Je suis en train de créer une routine pour le calcul d'heures
supplémentaires.



Dans une table qui s'appelle pour le moment @ESSAI j'ai les champs suivants



MATRICULE ce qui correspond au N° de matricule de l'employé

TPSPASSE rempli d'un "1" ce qui correspond à 1 minute sup

PAYE cumul des TPSPASSE



La table se présente comme suit :



MATRICULE TPSPASSE PAYE

256 1 1

256 1 2

256 1 3

256 1 4

256 1 5

256 1 6

512 1 1

512 1 2

1024 1 1

1024 1 2

1024 1 3

2048 1 1

2048 1 2

2048 1 3

2048 1 4

2048 1 5

2048 1 6

2048 1 7



J'ai choisi de créer un enregistrement par min supplémentaire car au début
les minutes sont payées et à partir d'un seuil elles sont récupérées. Le
seuil varie selon la catégorie de l'employé.



Dans une autre table @ESSAI_MAT, je n'ai que les MATRICULE.



Voici le code que j'ai crée :




Set Tb1 = MaBase.OpenRecordset("@ESSAI")

Set Tb2 = MaBase.OpenRecordset("@ESSAI_MAT")



MonMat1 = Tb1!MATRICULE

MonMat2 = Tb2!MATRICULE



Do Until Tb2.EOF

MonMat2 = Tb2!MATRICULE

TbCpt = DCount("MATRICULE", "@ESSAI", "[MATRICULE] =" & MonMat2)



CPT = 1

MonMat1 = MonMat2



Do While TbCpt >= CPT



Select Case CPT

Case Is = 1

NewPaye = 0

Case Is > 1

Tb1.MovePrevious

NewPaye = Tb1!PAYE

Tb1.MoveNext

End Select



MonTps = Tb1!TPSPASSE



Tb1.Edit

MaPaye = NewPaye + MonTps

Tb1!PAYE = MaPaye

Tb1.Update



Tb1.MoveNext

CPT = CPT + 1



Loop

Tb2.MoveNext

Loop



Cela fonctionne bien mais ce n'est pas fiable car si dans @ESSAI_MAT il me
manque par exemple le MATRICULE 512. Dans @ESSAI le 512 n'est pas sauté mais
les cumuls sont effectués sans tenir compte du N° qui manque et j'obtiens ce
résultat erroné :



MATRICULE TPSPASSE PAYE

256 1 1

256 1 2

256 1 3

256 1 4

256 1 5

256 1 6

1024 1 1

1024 1 2

1024 1 1

2048 1 2

2048 1 3

2048 1 4

2048 1 5

2048 1 6

2048 1 0

2048 1 0



La question découle, comment puis faire pour que les "512" soient sautés est
que ma répartition reprenne correctement son cours ?



D'avance merci

4 réponses

Avatar
Michel_D
Bonjour,

Hum, quel est la périodicité pour calculer le cumul ?

PS1:Une simple requête suffit pour calculer le cumul, pas besoin de vba.

PS2:Je ne comprends pas à quoi te sert la 2ème table @ESSAI_MAT


Bonjour,

Je suis en train de créer une routine pour le calcul d'heures
supplémentaires.

Dans une table qui s'appelle pour le moment @ESSAI j'ai les champs suivants

MATRICULE ce qui correspond au N° de matricule de l'employé

TPSPASSE rempli d'un "1" ce qui correspond à 1 minute sup

PAYE cumul des TPSPASSE

La table se présente comme suit :

MATRICULE TPSPASSE PAYE
256 1 1
256 1 2
256 1 3
256 1 4
256 1 5
256 1 6
512 1 1
512 1 2
1024 1 1
1024 1 2
1024 1 3
2048 1 1
2048 1 2
2048 1 3
2048 1 4
2048 1 5
2048 1 6
2048 1 7

J'ai choisi de créer un enregistrement par min supplémentaire car au début
les minutes sont payées et à partir d'un seuil elles sont récupérées. Le
seuil varie selon la catégorie de l'employé.

Dans une autre table @ESSAI_MAT, je n'ai que les MATRICULE.

Voici le code que j'ai crée :

Set Tb1 = MaBase.OpenRecordset("@ESSAI")
Set Tb2 = MaBase.OpenRecordset("@ESSAI_MAT")

MonMat1 = Tb1!MATRICULE
MonMat2 = Tb2!MATRICULE

Do Until Tb2.EOF
MonMat2 = Tb2!MATRICULE
TbCpt = DCount("MATRICULE", "@ESSAI", "[MATRICULE] =" & MonMat2)

CPT = 1
MonMat1 = MonMat2

Do While TbCpt >= CPT

Select Case CPT
Case Is = 1
NewPaye = 0
Case Is > 1
Tb1.MovePrevious
NewPaye = Tb1!PAYE
Tb1.MoveNext
End Select

MonTps = Tb1!TPSPASSE

Tb1.Edit
MaPaye = NewPaye + MonTps
Tb1!PAYE = MaPaye

Tb1.Update
Tb1.MoveNext

CPT = CPT + 1
Loop
Tb2.MoveNext
Loop

Cela fonctionne bien mais ce n'est pas fiable car si dans @ESSAI_MAT il me
manque par exemple le MATRICULE 512. Dans @ESSAI le 512 n'est pas sauté mais
les cumuls sont effectués sans tenir compte du N° qui manque et j'obtiens ce
résultat erroné :

MATRICULE TPSPASSE PAYE
256 1 1
256 1 2
256 1 3
256 1 4
256 1 5
256 1 6
1024 1 1
1024 1 2
1024 1 1
2048 1 2
2048 1 3
2048 1 4
2048 1 5
2048 1 6
2048 1 0
2048 1 0

La question découle, comment puis faire pour que les "512" soient sautés est
que ma répartition reprenne correctement son cours ?

D'avance merci


Avatar
JeanYves \(au pro\)
Bonjour,

Je ne sais pas faire par requète.
Avec une requete je sais travailler enregistrement par enregistrement (ligne
par ligne)
La je cumule la valeur de l'enregistrement -1 à une valeur de
l'enregistrement en cours et ainsi de suite.
Les enregistrements sont déjà dans la table qui est mise à jour.

En ce qui concerne la 2ème table c'est la seule façon que j'ai trouvé de
faire les cumuls avec rupture à chaque matricule.


Merci


"Michel_D" a écrit dans le message de
news: eQgMQ$
Bonjour,

Hum, quel est la périodicité pour calculer le cumul ?

PS1:Une simple requête suffit pour calculer le cumul, pas besoin de vba.

PS2:Je ne comprends pas à quoi te sert la 2ème table @ESSAI_MAT


Bonjour,

Je suis en train de créer une routine pour le calcul d'heures
supplémentaires.

Dans une table qui s'appelle pour le moment @ESSAI j'ai les champs
suivants

MATRICULE ce qui correspond au N° de matricule de l'employé

TPSPASSE rempli d'un "1" ce qui correspond à 1 minute sup

PAYE cumul des TPSPASSE

La table se présente comme suit :

MATRICULE TPSPASSE PAYE
256 1 1
256 1 2
256 1 3
256 1 4
256 1 5
256 1 6
512 1 1
512 1 2
1024 1 1
1024 1 2
1024 1 3
2048 1 1
2048 1 2
2048 1 3
2048 1 4
2048 1 5
2048 1 6
2048 1 7

J'ai choisi de créer un enregistrement par min supplémentaire car au
début les minutes sont payées et à partir d'un seuil elles sont
récupérées. Le seuil varie selon la catégorie de l'employé.

Dans une autre table @ESSAI_MAT, je n'ai que les MATRICULE.

Voici le code que j'ai crée :

Set Tb1 = MaBase.OpenRecordset("@ESSAI")
Set Tb2 = MaBase.OpenRecordset("@ESSAI_MAT")

MonMat1 = Tb1!MATRICULE
MonMat2 = Tb2!MATRICULE

Do Until Tb2.EOF
MonMat2 = Tb2!MATRICULE
TbCpt = DCount("MATRICULE", "@ESSAI", "[MATRICULE] =" & MonMat2)

CPT = 1
MonMat1 = MonMat2

Do While TbCpt >= CPT

Select Case CPT
Case Is = 1
NewPaye = 0
Case Is > 1
Tb1.MovePrevious
NewPaye = Tb1!PAYE
Tb1.MoveNext
End Select

MonTps = Tb1!TPSPASSE

Tb1.Edit
MaPaye = NewPaye + MonTps
Tb1!PAYE = MaPaye

Tb1.Update
Tb1.MoveNext

CPT = CPT + 1
Loop
Tb2.MoveNext
Loop

Cela fonctionne bien mais ce n'est pas fiable car si dans @ESSAI_MAT il
me manque par exemple le MATRICULE 512. Dans @ESSAI le 512 n'est pas
sauté mais les cumuls sont effectués sans tenir compte du N° qui manque
et j'obtiens ce résultat erroné :

MATRICULE TPSPASSE PAYE
256 1 1
256 1 2
256 1 3
256 1 4
256 1 5
256 1 6
1024 1 1
1024 1 2
1024 1 1
2048 1 2
2048 1 3
2048 1 4
2048 1 5
2048 1 6
2048 1 0
2048 1 0

La question découle, comment puis faire pour que les "512" soient sautés
est que ma répartition reprenne correctement son cours ?

D'avance merci




Avatar
Michel_D
re,

Pour moi, il manque une info comme la date et éventuellement l'heure à
laquelle l'employé à réaliser un certain temps supplémentaires aprés
avec cette info c'est facile de faire la requête qui va calculer le
cumul (voir le SQL ci-dessous) :

SELECT T1.MATRICULE, T1.InfoDateTime, T1.TPSPASSE, Sum(T2.TPSPASSE) AS Cumul
FROM ESSAI AS T1 INNER JOIN ESSAI AS T2
ON (T1.MATRICULE=T2.MATRICULE) And (T1.InfoDateTime>=T2.InfoDateTime)
GROUP BY T1.MATRICULE, T1.InfoDateTime, T1.TPSPASSE;


Bonjour,

Je ne sais pas faire par requète.
Avec une requete je sais travailler enregistrement par enregistrement (ligne
par ligne)
La je cumule la valeur de l'enregistrement -1 à une valeur de
l'enregistrement en cours et ainsi de suite.
Les enregistrements sont déjà dans la table qui est mise à jour.

En ce qui concerne la 2ème table c'est la seule façon que j'ai trouvé de
faire les cumuls avec rupture à chaque matricule.


Merci


"Michel_D" a écrit dans le message de
news: eQgMQ$
Bonjour,

Hum, quel est la périodicité pour calculer le cumul ?

PS1:Une simple requête suffit pour calculer le cumul, pas besoin de vba.

PS2:Je ne comprends pas à quoi te sert la 2ème table @ESSAI_MAT


Bonjour,

Je suis en train de créer une routine pour le calcul d'heures
supplémentaires.

Dans une table qui s'appelle pour le moment @ESSAI j'ai les champs
suivants

MATRICULE ce qui correspond au N° de matricule de l'employé

TPSPASSE rempli d'un "1" ce qui correspond à 1 minute sup

PAYE cumul des TPSPASSE

La table se présente comme suit :

MATRICULE TPSPASSE PAYE
256 1 1
256 1 2
256 1 3
256 1 4
256 1 5
256 1 6
512 1 1
512 1 2
1024 1 1
1024 1 2
1024 1 3
2048 1 1
2048 1 2
2048 1 3
2048 1 4
2048 1 5
2048 1 6
2048 1 7

J'ai choisi de créer un enregistrement par min supplémentaire car au
début les minutes sont payées et à partir d'un seuil elles sont
récupérées. Le seuil varie selon la catégorie de l'employé.

Dans une autre table @ESSAI_MAT, je n'ai que les MATRICULE.

Voici le code que j'ai crée :

Set Tb1 = MaBase.OpenRecordset("@ESSAI")
Set Tb2 = MaBase.OpenRecordset("@ESSAI_MAT")

MonMat1 = Tb1!MATRICULE
MonMat2 = Tb2!MATRICULE

Do Until Tb2.EOF
MonMat2 = Tb2!MATRICULE
TbCpt = DCount("MATRICULE", "@ESSAI", "[MATRICULE] =" & MonMat2)

CPT = 1
MonMat1 = MonMat2

Do While TbCpt >= CPT

Select Case CPT
Case Is = 1
NewPaye = 0
Case Is > 1
Tb1.MovePrevious
NewPaye = Tb1!PAYE
Tb1.MoveNext
End Select

MonTps = Tb1!TPSPASSE

Tb1.Edit
MaPaye = NewPaye + MonTps
Tb1!PAYE = MaPaye

Tb1.Update
Tb1.MoveNext

CPT = CPT + 1
Loop
Tb2.MoveNext
Loop

Cela fonctionne bien mais ce n'est pas fiable car si dans @ESSAI_MAT il
me manque par exemple le MATRICULE 512. Dans @ESSAI le 512 n'est pas
sauté mais les cumuls sont effectués sans tenir compte du N° qui manque
et j'obtiens ce résultat erroné :

MATRICULE TPSPASSE PAYE
256 1 1
256 1 2
256 1 3
256 1 4
256 1 5
256 1 6
1024 1 1
1024 1 2
1024 1 1
2048 1 2
2048 1 3
2048 1 4
2048 1 5
2048 1 6
2048 1 0
2048 1 0

La question découle, comment puis faire pour que les "512" soient sautés
est que ma répartition reprenne correctement son cours ?

D'avance merci








Avatar
JeanYves \(au pro\)
Merci Michel,

Ca fonctionne ! J'avais bien vu l'échange de post de la semaine dernière
mais je n'avais pas réussi à l'adapter à mon cas.

Merci encore !

"Michel_D" a écrit dans le message de
news: %
re,

Pour moi, il manque une info comme la date et éventuellement l'heure à
laquelle l'employé à réaliser un certain temps supplémentaires aprés
avec cette info c'est facile de faire la requête qui va calculer le
cumul (voir le SQL ci-dessous) :

SELECT T1.MATRICULE, T1.InfoDateTime, T1.TPSPASSE, Sum(T2.TPSPASSE) AS
Cumul
FROM ESSAI AS T1 INNER JOIN ESSAI AS T2
ON (T1.MATRICULE=T2.MATRICULE) And (T1.InfoDateTime>=T2.InfoDateTime)
GROUP BY T1.MATRICULE, T1.InfoDateTime, T1.TPSPASSE;


Bonjour,

Je ne sais pas faire par requète.
Avec une requete je sais travailler enregistrement par enregistrement
(ligne par ligne)
La je cumule la valeur de l'enregistrement -1 à une valeur de
l'enregistrement en cours et ainsi de suite.
Les enregistrements sont déjà dans la table qui est mise à jour.

En ce qui concerne la 2ème table c'est la seule façon que j'ai trouvé de
faire les cumuls avec rupture à chaque matricule.


Merci


"Michel_D" a écrit dans le message
de news: eQgMQ$
Bonjour,

Hum, quel est la périodicité pour calculer le cumul ?

PS1:Une simple requête suffit pour calculer le cumul, pas besoin de vba.

PS2:Je ne comprends pas à quoi te sert la 2ème table @ESSAI_MAT


Bonjour,

Je suis en train de créer une routine pour le calcul d'heures
supplémentaires.

Dans une table qui s'appelle pour le moment @ESSAI j'ai les champs
suivants

MATRICULE ce qui correspond au N° de matricule de l'employé

TPSPASSE rempli d'un "1" ce qui correspond à 1 minute sup

PAYE cumul des TPSPASSE

La table se présente comme suit :

MATRICULE TPSPASSE PAYE
256 1 1
256 1 2
256 1 3
256 1 4
256 1 5
256 1 6
512 1 1
512 1 2
1024 1 1
1024 1 2
1024 1 3
2048 1 1
2048 1 2
2048 1 3
2048 1 4
2048 1 5
2048 1 6
2048 1 7

J'ai choisi de créer un enregistrement par min supplémentaire car au
début les minutes sont payées et à partir d'un seuil elles sont
récupérées. Le seuil varie selon la catégorie de l'employé.

Dans une autre table @ESSAI_MAT, je n'ai que les MATRICULE.

Voici le code que j'ai crée :

Set Tb1 = MaBase.OpenRecordset("@ESSAI")
Set Tb2 = MaBase.OpenRecordset("@ESSAI_MAT")

MonMat1 = Tb1!MATRICULE
MonMat2 = Tb2!MATRICULE

Do Until Tb2.EOF
MonMat2 = Tb2!MATRICULE
TbCpt = DCount("MATRICULE", "@ESSAI", "[MATRICULE] =" &
MonMat2)

CPT = 1
MonMat1 = MonMat2

Do While TbCpt >= CPT

Select Case CPT
Case Is = 1
NewPaye = 0
Case Is > 1
Tb1.MovePrevious
NewPaye = Tb1!PAYE
Tb1.MoveNext
End Select

MonTps = Tb1!TPSPASSE

Tb1.Edit
MaPaye = NewPaye + MonTps
Tb1!PAYE = MaPaye

Tb1.Update
Tb1.MoveNext

CPT = CPT + 1
Loop
Tb2.MoveNext
Loop

Cela fonctionne bien mais ce n'est pas fiable car si dans @ESSAI_MAT il
me manque par exemple le MATRICULE 512. Dans @ESSAI le 512 n'est pas
sauté mais les cumuls sont effectués sans tenir compte du N° qui manque
et j'obtiens ce résultat erroné :

MATRICULE TPSPASSE PAYE
256 1 1
256 1 2
256 1 3
256 1 4
256 1 5
256 1 6
1024 1 1
1024 1 2
1024 1 1
2048 1 2
2048 1 3
2048 1 4
2048 1 5
2048 1 6
2048 1 0
2048 1 0

La question découle, comment puis faire pour que les "512" soient
sautés est que ma répartition reprenne correctement son cours ?

D'avance merci