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 :

Programmation par semaine


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 5
    Par défaut Programmation par semaine
    Slt tout le monde,

    Je débute en VBA et j'ai un souci de programmation.

    Je suis dans une programmation de comptage des jours ordinaires et des jours supplémentaires.

    Les jours Sup sont représentes par les variables "RT" ou "FT".

    J'aimerais si possible avoir votre aide sur le programme ci dessous que je veux mettre sur pieds.

    Le but étant de faire en sorte et cela par semaine que à chaque fois que une variable nommée "RT" ou "FT" est précédée (pas forcément immédiatement) d'une variable nommée par exemple "M" ou "0", la variable "RT" qui représente alors une journée supplémentaire devient une journée ordinaire.

    La semaine de travail étant comprise entre deux " RT" ou deux " R"?

    Nb: RT= repos travaillé et R= Repos

    Merci


    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
    Public Sub Compter()
    Dim ligne As Long
    Dim colonne As Long
    Dim jourOrd As Long
    Dim jourSup As Long
     
    For ligne = 4 To 62
        For colonne = 4 To 33
            If Cells(ligne, colonne) = "X" Then
                jourOrd = jourOrd + 1
            ElseIf Cells(ligne, colonne) <> "X" Then
             Select Case Cells(ligne, colonne + 1)
                Case "RT", "FT"
                     jourOrd = jourOrd + 1
                     jourSup = jourSup - 1
                Case Else
                     If Cells(ligne, colonne) = "RT" Then
                        jourSup = jourSup + 1
                     ElseIf Cells(ligne, colonne) = "FT" Then
                        jourSup = jourSup + 1
                     ElseIf Cells(ligne, colonne) = "PL" Then
                        jourSup = jourSup + 1
                     ElseIf Cells(ligne, colonne) = "AT" Then
                        jourSup = jourSup + 1
                     ElseIf Cells(ligne, colonne) = "F" Then
                        jourSup = jourSup + 1
                     ElseIf Cells(ligne, colonne) = "JS" Then
                        jourSup = jourSup + 1
                     ElseIf Cells(ligne, colonne) = "PL" Then
                        jourOrd = jourOrd + 1
                     ElseIf Cells(ligne, colonne) = "JB" Then
                        jourOrd = jourOrd + 1
                     ElseIf Cells(ligne, colonne) = "AT" Then
                        jourOrd = jourOrd + 1
                     ElseIf Cells(ligne, colonne) = "DM" Then
                        jourOrd = jourOrd + 1
                     ElseIf Cells(ligne, colonne) = "F" Then
                         jourOrd = jourOrd + 1
                     End If
                End Select
            End If
            Cells(ligne, 35) = jourOrd
            Cells(ligne, 36) = jourSup
        Next colonne
        jourOrd = 0
        jourSup = 0
    Next ligne
     
    End Sub

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,j'ai pas tout compris mais en tout cas ton code n'est pas optimisé. J'ai vu des truc surprenant.

    tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
       If Cells(ligne, colonne) = "X" Then
           jourOrd = jourOrd + 1
       ElseIf Cells(ligne, colonne) <> "X" Then
    ...
    Euh ... si il n'est pas = X il est forcement <> non ? Donc ton "ElseIf Cells..." est inutile un simple "Else" suffit

    j'ai cru quand j'ai vu ton "Case" que tu savais regrouper les conditions mais tu as une quantité de "ElseIf" trop importante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(ligne, colonne) = "RT or Cells(ligne, colonne) = "FT or ...
    ou

    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
    Select Case Cells(ligne, colonne + 1)
                Case "RT", "FT", "PL", "AT", "F", "JS"
                     jourSup = jourSup + 1
                Case  "PL", "JB", "AT", "F"
                     jourOrd = jourOrd + 1
    Case Else ...
     
    Mais ça c'est pas bon non pluscar tu as des valeurs communes dans les deux Case donc
     
    Select Case Cells(ligne, colonne + 1)
                Case "RT", "FT", "JS"
                     jourSup = jourSup + 1
                Case "PL", "AT", "F"
                     jourSup = jourSup + 1
                     jourOrd = jourOrd + 1
                Case  "JB", "F"
                     jourOrd = jourOrd + 1
    Case Else
    ....

    serait mieux


    bon il faut aussi que tu expliques comment "FT" et "RT" sont testé dans ton CASE Else ?

    tu dis

    A+

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 5
    Par défaut Clarification programmation par semaine
    Bonjour Igloobel,

    Merci pour ta réponse

    Je veux ici apporter des éclaircissements quant au programme que j'ai du mal à mettre sur pied.

    En fait j'ai un tableau excel représentant les jours de travail du personnel pendant un mois.

    Et dans chaque semaine de ce mois, il me faut faire un traitement particulier pour chaque personne pour compter leur jour de travail ordinaire et supplémentaire.

    Le début d'une semaine est marqué par la présence de la variable "R" ou "RT"qui signifie "Repos" ou "Repos travaillé" et la fin d'une semaine par la présence de cette même variable et ce durant tout le mois.

    Ainsi les semaines varient en fonction de chaque personne puisqu'ils n'ont pas les mêmes jours de repos.

    Les "RT" représentent dans chaque semaine des journées sup qui sont en fait payées double.

    Cependant lorsque dans une même semaine la journée sup est précédée (pas forcément immédiatement, cela peut être 2 ou 5 jours avant) de certaines variables telles que "M" (Maladie) ou "D" (deuil), la journée sup devient une journée ordinaire.

    C'est là où réside ma principale difficulté à programmer. Comment programmer cette procédure par semaine?

    Ce code ci que j'ai utilisé précédemment n'est en fait pas bon. Puisqu'il ne traite pas par semaine et prend uniquement le cas où RT est précédée immédiatement d'une autre variable et non par exemple de 2 ou 5 jours.

    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
    Public Sub Compter()
    Dim ligne As Long
    Dim colonne As Long
    Dim jourOrd As Long
    Dim jourSup As Long
     
    For ligne = 4 To 62
        For colonne = 4 To 33
            If Cells(ligne, colonne) = "X" Then
                jourOrd = jourOrd + 1
            Else (ligne, colonne) <> "X" Then
             Select Case Cells(ligne, colonne + 1)
                Case "RT", "FT"
                     jourOrd = jourOrd + 1
                     jourSup = jourSup - 1
                Case Else
                     If Cells(ligne, colonne) = "RT" Then
                        jourSup = jourSup + 1
                     ElseIf Cells(ligne, colonne) = "FT" Then
                        jourSup = jourSup + 1
    Nb: X représente une journée ordinaire de travail et FT un férié travaillé qui représente une journée supplémentaire.

    J'espère ne pas avoir été trop long.

    Merci encore à tous.

  4. #4
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour, quelque chose me gène dans votre démarche. Une semaine comprend 7 jours.
    Certains mois 31 jours, d'autres 30 etc. Comment gérez vous le fait que 31/7 = 4 semaines + 3 jours?
    Qu'en est-il de la semaine intermédiaire, comment la traitez vous, puisque vous travaillez par mois?
    Ne serait-il pas préférable de travailler en rajoutant une colonne pour les numéros de semaine de calendrier,avec un repaire pour les jours généralement non travaillés???
    Je n'ai aucune prétention à détenir de vérité, mais je pense que vous devriez peut être y réfléchir.
    Cordialement

  5. #5
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Peux-tu faire une copie écran de ton fichier en masquant les données sensibles

Discussions similaires

  1. [Eiffel] Programmation par contrats
    Par SkIllz2k dans le forum Autres langages
    Réponses: 1
    Dernier message: 02/05/2005, 20h05
  2. programmation par composant
    Par pmboutteau dans le forum ASP
    Réponses: 4
    Dernier message: 10/03/2005, 11h35
  3. [Tests]La programmation par contrats
    Par fabien.raynaud dans le forum Test
    Réponses: 6
    Dernier message: 26/07/2004, 11h06
  4. [CR]grouper des dates par semaines, mais semaines FR !
    Par neo.51 dans le forum SAP Crystal Reports
    Réponses: 11
    Dernier message: 18/05/2004, 20h43
  5. Programmation par module : applications multilingues
    Par argoet dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 03/02/2004, 11h28

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