Demande d'aide : Boucles

ha61@hotmail.fr

XLDnaute Nouveau
Bonsoir,

Je dois établir une liste de présence pour 4 personnes, par semaine et par année. Chaque jour est divisé en 4 parties: Matin, Après Midi, Soirée et Nuit.

Pour une personne qui travaille uniquement dans la journée pour un jour de semaine non férié:
M=PJ
AM=PJ
S=/
N=/

Pour une personne qui travaille la journée et la nuit pour un jour de semaine non férié:
M=PJ
AM=PJ
S=AO
N=AO

Pour une personne qui travaille la journée et la nuit pour un jour de semaine férié ou un dimanche:
M=AO
AM=AO
S=AO
N=AO

NB: on ne peut pas travailler la nuit et pas la journée pour un jour férié.

Pour une personne qui travaille un samedi non férié (samedi férié = jour férié):
M=PJ
AM=AO
S=AO
N=AO

Pour une personne qui est absente (samedi, dimanche et jours fériés):
M=/
AM=/
S=/
N=/

Ainsi une liste est établie prenant en considération l'emploi du temps des 4 personnes. Sont également prises en considération les absences au titre de:

Congés annuels:
M=CA
AM=CA
S=/
N=/

Congés Formation:
M=CF
AM=CF
S=/
N=/

Récupération:
M=PJ
AM=Réc
S=/
N=/
ou
M=Réc
AM=Réc
S=/
N=/

RTT
M=PJ
AM=RTT
S=/
N=/
ou
M=RTT
AM=RTT
S=/
N=/

Jusque là cela ne me pose pas de problèmes. La liste de gardes est établie avec les présences et absences. Une liste temporaire est générée pour étude. J'ai pu créer une boucle pour étudier l'activité de chacun pour une semaine en fonction de toutes le données. Par contre je n'arrive pas à étendre la boucle sur la semaine suivante. Je me retrouve en train de refaire le code 52 fois pour chaque personne; donc 52x4! je n'ai fait qu'une partie pour une personne AR.

Vous trouverez ci-joint le fichier.

Dans le module correspondant à AR,

on commence par "y" qui est = la 1ère colonne = la 1ère semaine = colonne F = 6
je fais ici un remplissage automatique de:
pour les jours de semaine:
PJ
PJ
/
/
et de (pour samedi et dimanche)
/
/
/
/
sans tenir compte de la liste de garde.
Ce n'est qu'ensuite que je demande au macro d'étudier, si la personne travaille, est en congés, quel type de congés, si elle travaille la nuit, s'il s'agit d'un jour de semaine, d'un samedi, d'un dimanche, ou d'un jour férié.
Jusque là, c'est bon, le macro marche bien.

Pour la 1ère semaine,
y=6
z = 1
C1 = 4
L1 = 3
C2 = 6
L2 = 10
G1 = 10
L3 = L1 + 7
'pour une semaine (L1=3, 3+7=10)
Do Until L1 = L3

Cette colonne se remplit sans problèmes.
Si je veux passer à la 2e colonne (2e semaine)
je dois modifier les paramètres:
y= + 8
L1 = + 7
C2 = + 8
Ansi valeur de y pour 52 semaines = 6 + (52*8) = 422. Or Excel ne semble pas générer 422 colonnes. Ce n'est pas un problème, puis que on peut faire deux sheets de 26 semaines.

Mon problème : je n'arrive pas à refaire la boucle pour prendre en considération les changements de y, L1 et C2 pour la 2e colonne et ainsi de suite.

Votre aide serait la bienvenue. Merci.

Dr HA
ha61@hotmail.fr
 

Pièces jointes

  • Gardes 2013D.xls
    780 KB · Affichages: 46
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Demande d'aide : Boucles

Bonjour..
comment dire.. c'est totalement incompréhensible..
y'en a dans tous les sens.. et meme si on a le courage de tout lire (ce n'est pas mon cas, meme après trois tentatives) on ne voit meme pas de quel onglet et quelle macro tu parles....
apparemment c'est un fichier qui a déjà quelques années d'existence.. il faudrait aller à l'essentiel pour plus de clarté
la on se sent.. noyé ;-)
 

ha61@hotmail.fr

XLDnaute Nouveau
Re : Demande d'aide : Boucles

J'ai simplifé. Voilà mon code:

Sub Essai99()

Dim x As Integer, y As Integer, L1 as Integer, C1 as Integer, L2 as Integer, C2 as Integer
y = 6
For x = 10 To 30 Step 5
Sheets("2013a").Cells(x, y) = "PJ"
Sheets("2013a").Cells(x + 1, y) = "CA"
Next x

L1 = 3
C1 = 4
L2 = 6
C2 = 10
Do Until L1 = 17

If Sheets("Temp").Cells(L1, C1).Value = "AR" Then Sheets("2013a").Cells(L2 + 0, C2).Value = "PJ"
If Sheets("Temp").Cells(L1, C1).Value = "AR" Then Sheets("2013a").Cells(L2 + 1, C2).Value = "RU"

L1 = L1 + 1
L2 = L2 + 5
Loop

End Sub

Le code fonctionne bien.
Mon problème : je dois le refaire 52 fois!
C'est-à-dire à la fin du Loop,
Je dois reprendre les valeurs initiales de y-L1-C1-L2-C2-Do Until avec les modifications suivantes:

rajouter 8 à y; donc y=y+8 (6;14;22;30.....)
rajouter 7 à L1; donc L1=L1+7 (3;10;17;24.....)
C1 n'est pas modifié = 4, c'est un constant (4;4;4;4.....)
L2 n'est pas modifié = 6, c'est un constant (6;6;6;6....)
rajouter 8 à C2; donc C2=C2+8 (10;18;26;34.....)
rajouter 7 à Do Until L1= (10;17;24;31...)

Les nouvelles valeurs de y-L1-C1-L2-C2-Do Until ... sont reinjectées au début et le Loop se fait,
pour générer une 2e série de résultats,
ainsi de suite,
jusqu'à ce que y atteint la valeur de 6+(52x8)= 422

Votre sera très appréciée.

ha61@hotmail.fr
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Demande d'aide : Boucles

Essaie avec ce code

Code:
Sub Essai99()

Dim x As Integer, y As Integer, L1 As Integer, L1_Last As Integer, C1 As Integer, L2 As Integer, C2 As Integer
    
    y = 6
    C2 = 10
    L1 = 3
    
While y < 422
    For x = 10 To 30 Step 5
        Sheets("2013a").Cells(x, y) = "PJ"
        Sheets("2013a").Cells(x + 1, y) = "CA"
    Next x

    C1 = 4
    L2 = 6
    Do Until L1_Last = L1 + 7
        If Sheets("Temp").Cells(L1_Last, C1).Value = "AR" Then Sheets("2013a").Cells(L2 + 0, C2).Value = "PJ"
        If Sheets("Temp").Cells(L1_Last, C1).Value = "AR" Then Sheets("2013a").Cells(L2 + 1, C2).Value = "RU"
    
        L1_Last = L1_Last + 1
        L2 = L2 + 5
    Loop
    C2 = C2 + 8
    y = y + 8
    L1 = L1 + 7
Wend
End Sub
 

ha61@hotmail.fr

XLDnaute Nouveau
Re : Demande d'aide : Boucles

Hello,

En effet Do Until est toujours à + 7 (pour faire la semaine)
J'avais posté la même question sur un autre forum et une réponse m'a été donnée.
Je l'ai essayée: elle est excellente:

Option Explicit

Sub Essai99()
Dim I As Integer
Dim x As Integer, y As Integer, L1 As Integer, C1 As Integer, L2 As Integer, C2 As Integer

For I = 0 To 52 ' Faire 53 fois
y = 6 + (I * 8)
For x = 10 To 30 Step 5
Sheets("2013a").Cells(x, y) = "PJ"
Sheets("2013a").Cells(x + 1, y) = "CA"
Next x

L1 = 3 + (I * 7)
C1 = 4
L2 = 6
C2 = 10 + (I * 8)
Do Until L1 = 10 + (I * 7) '17
If Sheets("Temp").Cells(L1, C1).Value = "AR" Then Sheets("2013a").Cells(L2 + 0, C2).Value = "PJ"
If Sheets("Temp").Cells(L1, C1).Value = "AR" Then Sheets("2013a").Cells(L2 + 1, C2).Value = "RU"
L1 = L1 + 1
L2 = L2 + 5
Loop
Next I
End Sub

Je vais essayer votre code, afin d'apprendre un peu plus.
Merci de votre aide.
 

Discussions similaires

Réponses
5
Affichages
374

Statistiques des forums

Discussions
312 895
Messages
2 093 383
Membres
105 714
dernier inscrit
POKITO