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 :

Remplissage de la charge mensuelle [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Par défaut Remplissage de la charge mensuelle
    Bonjour,

    J'ai une liste de personnes qui travaillent d'une date de début à une date de fin avec un certain pourcentage. Je voudrais exprimer mois par mois le taux d'occupation de ces personnes par l'intermédiaire d'un programme car le faire en direct crée des formules trop longue.
    Est-ce que quelqu'un a un début de piste ?
    Merci d'avance
    VIPNO
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Tu peux donner un exemple de résultat pour une personne ?

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Par défaut avec des exemples en plus
    Bonjour,
    J'ai ajouté qq exemples de résultats souhaités.Il faudrait également gérer les jours fériés...ce que je n'ai pas fait dans les exemples.
    Une fois ces résultats obtenus, il faudrait n'avoir qu'une ligne pour chaque entité des 5 premières colonnes identiques. Mais cela sera une deuxième étape.

    Si qq'un a une idée en programmation. En direct dans les cellules il y aurait des formules trop grandes qui vivent mal qd je lance la macro de transposition qui remet à jour la partie gauche du tableau.
    Merci d'avance
    VIPNO
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Essaie la macro suivante :

    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
    Sub Calculs()
        Dim c As Range, MoisDeb As Integer, Col As Integer
        With Sheets("Feuil2")
            .Range(.[A3], .Cells(.Rows.Count, 1).End(xlUp)).Offset(, 10).Resize(, 12).ClearContents
            For Each c In .Range(.[F3], .Cells(.Rows.Count, 6).End(xlUp))
                If Year(c.Offset(, 2)) = 2012 Then
                    If Year(c.Offset(, 1)) < 2012 Then
                        MoisDeb = 1
                    Else
                        MoisDeb = Month(c.Offset(, 1))
                    End If
                    For Col = 11 To 22
                        Select Case MoisDeb
                            Case Col - 10
                                If Month(c.Offset(, 2)) = Col - 10 Then
                                    .Cells(c.Row, Col) = Application.NetworkDays(c.Offset(, 1), c.Offset(, 2)) * c.Offset(, 3) / 100
                                Else
                                    .Cells(c.Row, Col) = Application.NetworkDays(c.Offset(, 1), DateSerial(2012, Col - 9, 0)) * c.Offset(, 3) / 100
                                End If
                            Case Is < Col - 10
                                If Month(c.Offset(, 2)) = Col - 10 Then
                                   .Cells(c.Row, Col) = Application.NetworkDays(DateSerial(2012, Col - 10, 1), c.Offset(, 2)) * c.Offset(, 3) / 100
                                ElseIf Month(c.Offset(, 2)) > Col - 10 Then
                                   .Cells(c.Row, Col) = Application.NetworkDays(DateSerial(2012, Col - 10, 1), DateSerial(2012, Col - 9, 0)) * c.Offset(, 3) / 100
                                End If
                        End Select
                    Next Col
                End If
            Next c
        End With
    End Sub

  5. #5
    Membre confirmé
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Par défaut
    Bonjour,

    Le prog proposé convient parfaitement. Je voudrais maintenant remplir la colonne 10 avec simplement le nombre de jours ouvrés * % si les dates sont dans la bonne année.
    Je ne sais pas trop comment faire ni où ajouter ce code dans le programme.
    Est-il également possible de tenir compte des jours fériés français en les incorporant dans ce prog ou à un autre endroit sur la feuille par exemple.
    D'avance merci pour l'aide apporté
    VIPNO

    Bonjour,
    Si la date de fin est >2012, le prog ne sort rien même si la date de début est <=2012.
    J'ai essayé de rajouté un "si" sur la date de fin mais je n'arrive pas à sortir qq chose de concluant.
    Auriez-vous me donner une piste.
    D'avance merci
    VIPNO

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Oui. Il n'y avait pas de date 2013 dans ton classeur. Essaie :

    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
    Sub Calculs()
        Dim c As Range, MoisDeb As Integer, Col As Integer, MoisFin As Integer
        Dim DateDeb As Date, DateFin As Date
        With Sheets("Feuil2")
            .Range(.[A3], .Cells(.Rows.Count, 1).End(xlUp)).Offset(, 10).Resize(, 12).ClearContents
            For Each c In Range(.[F3], .Cells(.Rows.Count, 6).End(xlUp))
                If Year(c.Offset(, 2)) >= 2012 Then
                    If Year(c.Offset(, 1)) < 2012 Then
                        MoisDeb = 1
                        DateDeb = DateSerial(2012, 1, 1)
                    Else
                        MoisDeb = Month(c.Offset(, 1))
                        DateDeb = c.Offset(, 1)
                    End If
                    If Year(c.Offset(, 2)) > 2012 Then
                        MoisFin = 13
                        DateFin = DateSerial(2012, 12, 31)
                    Else
                        MoisFin = Month(c.Offset(, 2))
                        DateFin = c.Offset(, 2)
                    End If
                    For Col = 11 To 22
                        Select Case MoisDeb
                            Case Col - 10
                                If MoisFin = Col - 10 Then
                                    .Cells(c.Row, Col) = Application.NetworkDays(DateDeb, DateFin) * c.Offset(, 3) / 100
                                Else
                                    .Cells(c.Row, Col) = Application.NetworkDays(DateDeb, DateSerial(2012, Col - 9, 0)) * c.Offset(, 3) / 100
                                End If
                            Case Is < Col - 10
                                If MoisFin = Col - 10 Then
                                   .Cells(c.Row, Col) = Application.NetworkDays(DateSerial(2012, Col - 10, 1), DateFin) * c.Offset(, 3) / 100
                                ElseIf MoisFin > Col - 10 Then
                                   .Cells(c.Row, Col) = Application.NetworkDays(DateSerial(2012, Col - 10, 1), DateSerial(2012, Col - 9, 0)) * c.Offset(, 3) / 100
                                End If
                        End Select
                    Next Col
                End If
            Next c
        End With
    End Sub

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

Discussions similaires

  1. Automatiser le remplissage mensuellement
    Par undo74 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/06/2014, 22h56
  2. Planning charge mensuelle
    Par alexandrebb dans le forum Modélisation
    Réponses: 22
    Dernier message: 19/07/2013, 13h39
  3. Réponses: 13
    Dernier message: 14/10/2003, 14h31
  4. Charge de la machine
    Par Gogoye dans le forum C
    Réponses: 4
    Dernier message: 06/10/2003, 12h17
  5. Réponses: 11
    Dernier message: 04/08/2003, 15h30

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