IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Insérer un tableau d'une feuille dans une variable tableau


Sujet :

Macros et VBA Excel

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Accompagnateur personnes handicapés
    Inscrit en
    Juillet 2016
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Accompagnateur personnes handicapés

    Informations forums :
    Inscription : Juillet 2016
    Messages : 111
    Par défaut Insérer un tableau d'une feuille dans une 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.

    Ci joint un petit échantillon de ce fichier => 3 feuilles :
    - "2021" : Planning de travail des personnes handicapés (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")
    - "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 ...").


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    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 230 à 245 (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

    Je vous remercie de votre aide

    Cordialement


    Cordialement
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Insérer le contenu d'une variable dans une table SQLITE avec php
    Par St-42-FCM-57 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/10/2017, 20h27
  2. [XL-2007] Insérer un tableau dans un objet sur une feuille de calcul
    Par Denis_67 dans le forum Excel
    Réponses: 5
    Dernier message: 27/11/2013, 08h23
  3. [OL-2003] Insérer le contenu d'une variable dans le corp d'un message
    Par Chagui dans le forum VBA Outlook
    Réponses: 2
    Dernier message: 26/10/2011, 10h09
  4. [MySQL] Insérer le contenu d'une table dans un tableau
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/01/2008, 08h37
  5. Comment insérer les valeurs d'une requete dans une variable tableau
    Par uptoditime dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/12/2007, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo