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 :

Automatisation fiche horaire [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mars 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mars 2018
    Messages : 21
    Par défaut Automatisation fiche horaire
    Bonjour, je souhaite automatiser un fichier horaire prenant en compte l'heure d'arrivée, l'heure de départ, les départs en pause et les retours de pause. Pour ce qui est de l'arrivée et des départs, je pense avoir réussi cependant je n'arrive pas à automatiser les pauses déjeuners ainsi que les retours de pause.
    En effet je rencontre des difficultés pour les pauses car l'heure de début est reliée à l'heure de début de journée, c'est pourquoi je n'arrive pas à l'automatiser. a
    Je vous joint le fichier pour que vous puissiez y jeter un oeil (je m'excuse pour l'absence de commentaire). Je pense que la quantité de code peut être réduite mais ça je saurai le faire, je cherche juste à faire fonctionner la totalité du document.
    En vous remerciant d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    Bonjour, je souhaite automatiser un fichier horaire prenant en compte l'heure d'arrivée, l'heure de départ, les départs en pause et les retours de pause.
    tu n'expliques rien !!!
    et même avec le fichier , tes tableaux ne sont pas explicitent ...

    expliques avec tes tableaux , la colonne colorée c'est l'heure d'arrivée ..ok
    en regard de cette colonne on a la plage horaire et la plage pause déjeuné et un autre tableau ??? et un autre tableau ???

    je n'arrive pas à automatiser les pauses déjeuners ainsi que les retours de pause.
    c'est a dire ??
    çà ce passe dans quel tableau avec quoi ? pour quel résultat ?....

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  3. #3
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mars 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mars 2018
    Messages : 21
    Par défaut
    Oui, excusez moi, je vais m'expliquer !

    Le premier tableau, celui que je souhaite qu'il soit à 100% dynamique est celui qui affiche le nombre de personne présente par tranches de 30 minutes. Par exemple, première ligne, c'est de 7h00 à 7h30. Les 7 colonnes qui suivent représentent chaque jours de la semaine.

    Pour le 2e tableau, c'est le tableau que l'utilisateur peut modifier (ajouter des lignes, changer le nombre de personne qui commence à un horaire, etc). La première colonne représente l'heure à laquelle un certain nombre de personne commence et les 7 autres représentent chaque jours de la semaine.

    Le 3e tableau représente les pauses déjeuners. La colonne colorée représente l'heure à laquelle commence la journée et les pauses déjeuners correspondantes (si quelqu'un commence à 7h, sa pause déjeuner sera entre 11h30 et 12h30) etc.

    Et le 4e tableau représente les plages horaires, la première colonne étant la pour se repérer, les personnes commençant à 7h finissent à 15h... etc !

    Ce que je souhaite réaliser c'est que, en ne modifiant que les données du 2e tableau, le tableau de gauche se mette à jour en cliquant sur le bouton. Le code doit faire en sorte que lors d'une certaine heure, les personnes qui arrivent soient ajoutés, puis soustraite au début de leur pause, ajouté au retour de pause et soustraite à nouveau à la fin de leur journée.

    Pour ce qui est du début et fin de journée je pense y être arrivé mais ce qui bloque pour les pauses, c'est que l'heure de fin d'une pause correspond aussi à l'heure de début de la pause d'autre personne et je n'arrive pas à faire correspondre pour tel horaire que la pause soit à un autre horaire.

    J'espère m'être mieux expliqué quant à mon problème !

  4. #4
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    une première idée , et je pense que c'est ok ,
    c'est dans ton tableau 1 , lundi ,
    dans la cellule 11,5 de lundi ...

    si tu as 2 personnes à 7h ..donc dans les cases 11,5 à 12,5 tu as -2

    avec ce principe , 7h , 8h et 8h5 ont la même amplitude de pause ,
    donc tu as -2 pour 7h + -2 pour 7,5 + -4 pour 8h + - 4 pour 8h5 (tableau1)
    ou tu as -2 pour 7h + -2 pour 8h (tableau2)

    par contre tu as +1 pour 9h +3 pour 10h (tableau2)

    dans ta cellule B12 tu écrit : =-(b3 +b4+b5+b6) + (b7+b8+b9+b10+b11)

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 708
    Par défaut
    Bonjour,

    Je te propose une formule Excel en alternative: place cette formule en case B3 de la Feuil1 de ton exemple, et valide la formule par Ctrl+Maj+Entrée car il s'agit d'une formule matricielle. Puis étire la formule sur toute ta plage B3:H34.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME(K$2:K$12 * ($J$2:$J$12 <= $A3) * (($T$2:$T$12 > $A3) + ($U$2:$U$12 <= $A3)) * ($Y$2:$Y$12 > $A3))
    Algo: Pour une heure donnée, on additionne le nombre de personnes (colonne K) pour lesquelles les conditions suivantes sont réunies:
    • l'heure de démarrage (colonne J) est inférieure ou égale à cette heure
    • l'heure de début de pause (colonne T) est strictement supérieure à cette heure ou alors l'heure de fin de pause (colonne U) lui est inférieure ou égale
    • l'heure de fin de journée (colonne Y) est strictement supérieure à cette heure


    Dans la formule, la multiplication joue le rôle d'un ET logique et l'addition joue le rôle d'un OU.

    PS1: Cette formule suppose que tes tableaux sur la droite sont tous triés de la même façon par rapport à l'horaire de début de journée.
    PS2: Si tu veux que ce soit complètement dynamique lorsque quelqu'un ajoute de nouvelles heures de début de journée, crée des tableaux (menu insertion => tableau). ça donnerait une formule plus intelligible (voir en pièce jointe):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME(K$2:K$14 * (NbPersonnes[Horaire] <= $A3) * ((Pauses[DébutPause] > $A3) + (Pauses[FinPause] <= $A3)) * (FinJournée[HeureDeFin] > $A3))
    Version3Horaire.xlsx

    Attention, ce n'est pas prévu pour dépasser minuit (sous la forme de 24h et non 0h).

  6. #6
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mars 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mars 2018
    Messages : 21
    Par défaut
    J'avais réussi à faire le tableau à l'aide de formules rentrées directement dans l'entreprise. Cependant cela ne prenait pas en compte de possibles ajout d'horaire, c'est pourquoi je suis passé au VBA dont voici le code

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    Option Explicit
    Sub Horaire()
    Range("B3:H100").Select
    Range("B3:H100").ClearContents
     
    Dim HeureBase, HeureArrivee, DebutPause, FinPause, HeureDepart, TpsL As Single
    Dim NumLigPH, NumLigPD, NumLigNP, NumLigBase As Integer
    Dim i, j, k, l, m As Integer
     
    NumLigPH = Range("W2").End(xlDown).Row
    'MsgBox (NumLigPH) 'Ce code cherche la dernière ligne du tableau "PLAGE HORAIRE"
     
    NumLigPD = Range("S2").End(xlDown).Row
    'MsgBox (NumLigPD) 'Ce code cherche la dernière ligne du tableau "PAUSE DEJEUNER"
     
    NumLigNP = Range("J2").End(xlDown).Row
    'MsgBox (NumLigNP) 'Ce code cherche la dernière ligne du tableau avec le nombre de personne qui arrive
     
    NumLigBase = Range("A11").End(xlDown).Row
    'MsgBox (NumLigBase) 'Ce code cherche la dernière ligne du tableau que l'on cherche à automatiser
     
     
     'Début de journée
    For i = 3 To NumLigBase
        HeureBase = Cells(i, 1)
        'MsgBox HeureBase
        For j = 2 To NumLigNP
            HeureArrivee = Cells(j, 10)
            'MsgBox HeureArrivee
                For k = 11 To 17
                    If Cells(i, k - 9) = "" Then
                            Cells(i, k - 9) = Cells(i - 1, k - 9)
                    End If
                    If HeureBase = HeureArrivee Then
                    Cells(i, k - 9) = Cells(i - 1, k - 9) + Cells(j, k)
                    End If
     
                    For l = 2 To NumLigPH
                        TpsL = Cells(l, 25) - Cells(l, 24)
                        If HeureBase = HeureArrivee + TpsL Then
                            Cells(i, k - 9) = Cells(i - 1, k - 9) - Cells(j, k)
                        End If
     
                    Next l
            Next k
        Next j
    Next i
     
    'Fin de journée
     
        For j = 2 To NumLigNP
            HeureArrivee = Cells(j, 10)
            For l = 2 To NumLigPD
                For k = 11 To 17
                    If HeureArrivee = 7 Or HeureArrivee = 8 Or HeureArrivee = 8.5 Then
                    Cells(12, k - 9) = Cells(11, k - 9) - (Cells(2, k) + Cells(3, k) + Cells(4, k))
                    Cells(13, k - 9) = Cells(12, k - 9)
                    Cells(14, k - 9) = Cells(13, k - 9) + (Cells(2, k) + Cells(3, k) + Cells(4, k))
                    End If
                Next k
                For k = 11 To 17
                    If HeureArrivee = 9 Or HeureArrivee = 10 Then
                        Cells(14, k - 9) = Cells(13, k - 9) - (Cells(5, k) + Cells(6, k))
                        Cells(15, k - 9) = Cells(14, k - 9)
                        Cells(16, k - 9) = Cells(15, k - 9) + (Cells(5, k) + Cells(6, k))
                    End If
                Next k
                For k = 11 To 17
                    If HeureArrivee = 12 Then
                    Cells(22, k - 9) = Cells(21, k - 9) - Cells(7, k)
                    Cells(23, k - 9) = Cells(22, k - 9) + Cells(7, k)
                    End If
                    If HeureArrivee = 12.5 Then
                    Cells(23, k - 9) = Cells(22, k - 9) - Cells(8, k)
                    Cells(24, k - 9) = Cells(23, k - 9) + Cells(8, k)
                    End If
                    If HeureArrivee = 13 Then
                    Cells(24, k - 9) = Cells(23, k - 9) - Cells(9, k)
                    Cells(25, k - 9) = Cells(24, k - 9)
                    Cells(26, k - 9) = Cells(25, k - 9) + Cells(9, k)
                    End If
                    If HeureArrivee = 13.5 Then
                    Cells(25, k - 9) = Cells(24, k - 9) - Cells(10, k)
                    Cells(26, k - 9) = Cells(25, k - 9)
                    Cells(27, k - 9) = Cells(26, k - 9) + Cells(10, k)
                    End If
                    If HeureArrivee = 14 Then
                    Cells(26, k - 9) = Cells(25, k - 9) - Cells(11, k)
                    Cells(27, k - 9) = Cells(26, k - 9)
                    Cells(28, k - 9) = Cells(27, k - 9) + Cells(11, k)
                    End If
                    If HeureArrivee = 14.5 Then
                    Cells(27, k - 9) = Cells(26, k - 9) - Cells(12, k)
                    Cells(28, k - 9) = Cells(27, k - 9) + Cells(12, k)
                    End If
                Next k
            Next l
        Next j
     
     
     
    'Fin Pause
    MsgBox ("Modifications terminées")
    End Sub
    La partie pour les pauses ne marche pas et je n'ai pas trouvé mieux que de rentrer le numéro de ligne.
    De plus ce fichier sera utilisé par l'entreprise pour laquelle je suis stagiaire, donc un jour je ne serai plus la, il faut qu'ils aient le moins de code à modifier possible en cas d'ajout d'horaire !

  7. #7
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mars 2018
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mars 2018
    Messages : 21
    Par défaut
    Sans VBA, juste avec des formules Excel d'addition et/ou soustraction j'avais fait ça
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/07/2017, 15h33
  2. Image popup d'une fiche à partir d'un TListImage
    Par FW-S dans le forum Composants VCL
    Réponses: 3
    Dernier message: 17/11/2002, 13h42
  3. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43
  4. Creation de fiche dynamique
    Par Mouss26 dans le forum C++Builder
    Réponses: 7
    Dernier message: 24/07/2002, 07h56
  5. [Kylix] Fiches sans bordure
    Par alex dans le forum EDI
    Réponses: 4
    Dernier message: 28/04/2002, 21h19

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