Utilisation de variable tableau

Bonjour,

Je travaille dans un Foyer d'Hébergement (FH) accueillant des personnes handicapées,
ces personnes ont un studio au FH et travaillent sur le même site (soit à l'ATELIER soit à la PENSION POUR ANIMAUX)
et J'ai créé un fichier excel pour gérer les présences des résidents au FH et aux repas.
J'ai besoin d'aide pour améliorer mon code qui n'est pas satisfaisant au niveau de la vitesse d'exécution de ce code.

Ci joint un petit échantillon de ce fichier => 3 feuilles :
- "2021" : Planning de travail des résidents
- "Fiche_Resident" : Liste des résidents avec le numéro de ligne de chaque résident dans la feuille "2021" et le numéro de ligne dans la feuille "Stats Repas"
- "Stats Repas" : Planning des présences des résidents au FH et aux repas (Midi et Soir)

Si les personnes travaillent (feuille "2021"), ils sont présents au FH, si ils ne travaillent pas ils sont présent au FH si ils sont renseignés présents au FH dans la ligne+2 de la feuille "Stats Repas".

J'ai mon code ci-dessous qui fonctionne et qui me permet de reporter les plannings de travail des résidents ("2021") sur le planning des présences FH ("Stats Repas") et avec ces données et les données de la ligne+2 de la feuille "Stats repas" je peux calculer si ils sont présent ou pas au FH et remplir la ligne+1 de la feuille "Stats repas" : soit avec "FH" si ils ne travaillent pas, soit avec la valeur du code travail (1 pour Atelier en orange OU 2 pour la Pension en vert).
L'exécution du code est trop lente, j'ai donc réduit ce code pour les colonnes du 10 au 25 Aout.
Ce code s'exécute en cliquant sur la forme de ligne 54 ("Copie Planning ESAT ...").

Sub TestCopieEsatVersFH()
Application.Calculation = xlCalculationManual: Application.ScreenUpdating = False: ActiveSheet.DisplayPageBreaks = False: Application.DisplayAlerts = False: Application.EnableEvents = False
Dim col As Integer: Dim ligneR As Integer: Dim LigneESAT As Integer: Dim ligne As Integer: Dim numres As Integer: Dim LL As Integer
For ligne = 4 To 39 'Parcours les lignes de la feuille Fiche_Resident
    numres = ligne - 3 'calcul le numéro du résident selon le numéro de ligne car la liste des résidents commence à la ligne 4 de la feuille Fiche_Resident
    If Sheets("Fiche_Resident").Cells(ligne, 4) <> "" Then 'si la ligne de Fiche_Resident n'est pas vide
        With Sheets("Fiche_Resident")
        'Alors affectation de la var LigneR(numéro de ligne du résident
        'dans la feuille Stats Repas) ET la var LigneESAT (numéro de ligne du résident dans la feuille 2021)
            ligneR = .Cells(numres + 3, 4): LigneESAT = .Cells(numres + 3, 8)
        End With
        With Sheets("Stats repas")
           ' Pour parcourir le tableau feuille Stats Repas, normalement de la colonne 12 à 375 mais trop long
           ' donc je fais un echantillon de la colonne 225 à 275 (Du 10 au 25 Aout)
           For col = 230 To 245 'Parcoues des colonnes de la feuille Stats Repas (parcours les dates de l'année)
                For LL = 13 To 390 'Parcoures les colonnes de la feuille 2021 (parcours les dates de l'année)
                    If CDate(Sheets("2021").Cells(5, LL)) = CDate(Sheets("Stats repas").Cells(55, col)) Then 'si les 2 dates correspondent
                        Sheets("Stats repas").Cells(ligneR, col) = Sheets("2021").Cells(LigneESAT, LL) 'affectation de la valeur de la feuille 2021 dans lka feuille Stats Repas
                        If Sheets("2021").Cells(LigneESAT, LL) = 0 And (Sheets("Stats repas").Cells(ligneR + 2, col) = "x" Or Sheets("Stats repas").Cells(ligneR + 2, col) = "x>" Or Sheets("Stats repas").Cells(ligneR + 2, col) = "x<") Then
                            ' Verifie si le resident est présent au FH
                            ' si la cellule de 2021 = 0 et si la cellule de la ligne +2 de la feuille Stats Repas = x ou x> ou x<
                            Sheets("Stats repas").Cells(ligneR + 1, col) = "FH" 'si oui noté "FH" dans la ligne du dessous (LigneR+1)
                        ElseIf Sheets("2021").Cells(LigneESAT, LL) > 2 And (Sheets("Stats repas").Cells(ligneR + 2, col) = "x" Or Sheets("Stats repas").Cells(ligneR + 2, col) = "x>" Or Sheets("Stats repas").Cells(ligneR + 2, col) = "x<") Then
                            ' idem si valeur > 2 (0=absent : >2=codes congés ou vacances : 1 et 2 = codes pour signaler que le resident travaille et est donc present au FOYER
                            Sheets("Stats repas").Cells(ligneR + 1, col) = "FH"
                        Else ' Sinon affectation de la valeur de la feuille 2021 dans la ligne +1 (LigneR+1) de la feuille Stats Repas
                            Sheets("Stats repas").Cells(ligneR + 1, col) = Sheets("2021").Cells(LigneESAT, LL)
                        End If
                    End If
                Next
            Next col
        End With
    End If
Next ligne
Application.Calculation = xlCalculationAutomatic: Application.ScreenUpdating = True: ActiveSheet.DisplayPageBreaks = True: Application.DisplayAlerts = True: Application.EnableEvents = True
End Sub

Je pense qu'il faudrait pour accélérer l'exécution du code créer une variable tableau de la feuille "2021" et utiliser cette variable pour remplir la feuille "Stats repas".

Malheureusement je ne maitrise pas du tout les variables tableaux et après quelques essais je n'arrive à rien.

Pourriez vous svp m'aider à améliorer ce code et utiliser si besoin une ou plusieurs variables Tableau?

Je vous en serais très reconnaissant

23testtableau.zip (648.06 Ko)
5testtableau.zip (645.93 Ko)

Je vous remercie de votre aide

Cordialement

ps : en sachant que dans la feuille 2021 certaines personnes sont des externes et ne vivent pas au fh.

donc n'apparaissent pas dans la feuille "stats repas"

PS2 : le 2eme fichier est mis à jour (changement des noms de la feuille "2021" pour correspondre aux noms des 2 autres feuilles

Cordialement

Personne ne peut m'aider 😭

Bonjour Sylvain

Désolé, mais si vous n'avez pas de réponse, c'est certainement parce que votre fichier est une usine à gaz et que votre demande également

Si j'ai bien compris, il s'agit simplement d'accélérer le traitement, donc le code fonctionne !?

Oui le code fonctionne 🙂

Rechercher des sujets similaires à "utilisation variable tableau"