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 :

Serie de donnée [XL-MAC 2011]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Renens
    Inscrit en
    Août 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Renens

    Informations forums :
    Inscription : Août 2015
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Serie de donnée
    Bonjour,

    Je sollicite votre aide, car je travaille actuellement sur un fichier excel comportant un nombre important d'employé. Le but étant de connaître leur nombre de cas d'absence
    Pour cela un listing chaque mois est sorti avec les résultats pour chaque employé
    le chiffre représente un jour d'absence et le 0 pas d'absence
    le but est de savoir le nombre de cas d'absence
    Donc si nous avons une suite telle que celle-là 11110001110001000111101
    Il faut compter le nombre de fois que une suite avec 1 est affiché dans ce cas il y a 5 cas d'absence
    Voici un exemple complet cela peut être plus clair

    Savci 01.04.15 1
    Savci 02.04.15 1
    Savci 03.04.15 0
    Savci 04.04.15 0
    Savci 05.04.15 0
    Savci 06.04.15 0
    Savci 07.04.15 1
    Savci 08.04.15 1
    Savci 09.04.15 1
    Savci 10.04.15 1
    Savci 11.04.15 0
    Savci 12.04.15 0
    Savci 13.04.15 1
    Savci 14.04.15 1
    Savci 15.04.15 1
    Savci 16.04.15 1
    Savci 17.04.15 1
    Savci 18.04.15 1
    Savci 19.04.15 1
    Savci 20.04.15 0
    Savci 21.04.15 1
    Savci 22.04.15 1
    Savci 23.04.15 1
    Savci 24.04.15 1
    Savci 25.04.15 0
    Savci 26.04.15 0
    Savci 27.04.15 1
    Savci 28.04.15 1
    Savci 29.04.15 1
    Savci 30.04.15 1

    Dans ce cas, il y a 5 serie de 1 --> j'aimerais trouver un moyen de calculer ces 5 series de 1 mais si on omet les jours du week end certains 0 tombe comme pour le 11 avril et 12 avril donc la séquence de 1 continue
    Donc au final pour ce cas il y a trois séquence de 1
    1 avril au 2 avril
    7 avril au 19 avril
    21 avril au 30 avril

    Le but d'enlever les jours du week end permet de voir quand l'absence se termine et ainsi on peut savoir le nombre de cas maladie
    je ne sais pas si cela est plus clair

    Je vous joints un ficher en annexe

    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Il y a quelques chose qui me tracasse comme des valeurs à 1 pour certains Weekends et d'autres à 0 ? Le 18 et 19 avril, par exemple, sont à 1, ne sont ils pas sensés être à 0 comme les autres ? A moins que les valeurs à 0 signifie que ce sont des WE travaillés ? Ci-dessous un code qui fonctionne juste pour une personne et sur le mois d'avril (valeurs postées pour Savci), à adapter pour tous les autres :
    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
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Absent As Boolean
        Dim NBFois As Integer
     
        'défini la plage sur la colonne B de la feuille active
        With ActiveSheet
     
            Set Plage = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0))
     
        End With
     
        'parcour la plage
        For Each Cel In Plage
     
            'si ce n'est pas un Weekend...(pas géré les jours fériés !)
            If Weekday(Cel.Value, vbMonday) <> 6 And Weekday(Cel.Value, vbMonday) <> 7 Then
     
                'si la valeur de la cellule à coté est 1 (colonne C) absence
                If Cel.Offset(, 1).Value = 1 Then
     
                    Absent = True
     
                'si 0 et Absent est Vrai, on fini une période d'absence donc ajout
                Else
     
                    If Absent = True Then NBFois = NBFois + 1
     
                    Absent = False
     
                End If
     
            End If
     
        Next Cel
     
        'si on fini à Vrai, période d'absence donc ajout
        If Absent = True Then NBFois = NBFois + 1
     
        MsgBox NBFois
     
    End Sub
    Hervé.

  3. #3
    Candidat au Club
    Homme Profil pro
    Renens
    Inscrit en
    Août 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Renens

    Informations forums :
    Inscription : Août 2015
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Je l'ai constaté aussi, mais tant qu'il n'interrompt pas la série je ne pense pas qu'il ait un problème.

    Je te remercie pour le code qui est très complexe (en tout cas hors de mes compétences ^^)

    Je vais essayer de l'adapter pour d'autre exemple.

    Merci encore
    Cordialement

  4. #4
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    Sans etre sur d'avoir tout compris de l'exercice.

    Nom : Capture.PNG
Affichages : 88
Taille : 3,7 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub absence()
     
    For i = 1 To Len([a5])
        a = Mid([a5], i, 1)
        b = Mid([a5], i + 1, 1)
       If b <> a And a = 1 Then Nbre = Nbre + 1
       If Nbre = "" Then Nbre = 0
       [b5] = Nbre & " absence(s)"
     
    Next i
    End Sub

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Je te re-poste le code avec prise en compte des différentes personnes mais il faut qu'elles soient séparées par une ligne vide. Les résultats sont toujours indiqués par une boite de message (que tu peux supprimer si pas nécessaire) et inscrit dans les colonnes A et B de la feuille "Feuil2" (faire en sorte qu'elle existe dans le classeur !) :
    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
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Absent As Boolean
        Dim NBFois As Integer
        Dim I As Integer
     
        'défini la plage sur la colonne B de la feuille active
        With ActiveSheet
     
            Set Plage = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0))
     
        End With
     
        'parcour la plage
        For Each Cel In Plage
     
            'si ce n'est pas un Weekend...(pas géré les jours fériés !)
            If Weekday(Cel.Value, vbMonday) <> 6 And Weekday(Cel.Value, vbMonday) <> 7 Then
     
                'si la valeur de la cellule à coté est 1 (colonne C) absence
                If Cel.Offset(, 1).Value = 1 Then
     
                    Absent = True
     
                'si 0 et Absent est Vrai, on fini une période d'absence donc ajout
                Else
     
                    If Absent = True Then NBFois = NBFois + 1
     
                    Absent = False
     
                End If
     
            End If
     
            If Cel.Offset(, -1).Value = "" Then
     
                'si on fini à Vrai, période d'absence donc ajout
                If Absent = True Then NBFois = NBFois + 1
     
                'affiche les messages pour informer du nombre de jours d'absence. A supprimer si pas nécessaire !
                MsgBox "'" & Cel.Offset(-1, -1).Value & "' a été absent " & NBFois & " fois"
     
                'inscrit les résultats dans la feuille "Feuil2", le nom en colonne A et le nombre de fois en colonne B
                I = I + 1
                Worksheets("Feuil2").Cells(I, 1).Value = Cel.Offset(-1, -1).Value
                Worksheets("Feuil2").Cells(I, 2).Value = NBFois
     
                NBFois = 0
     
            End If
     
        Next Cel
     
    End Sub
    Hervé.

  6. #6
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour keygen08,

    Si j'ai bien tout compris ce que souhaite hakan37, si une absence commence admettons le mercredi et qu'elle se fini le jeudi de la semaine d'après, elle ne doit être comptée qu'une seule fois et donc une série de ce type 0011100111 où les zéros du milieu représente le WE, ne doit être comptée qu'un fois et non deux enfin, c'est comme ça que je l'ai compris.

    Hervé.

  7. #7
    Candidat au Club
    Homme Profil pro
    Renens
    Inscrit en
    Août 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Renens

    Informations forums :
    Inscription : Août 2015
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    C'est exactement ça Theze!!

    Merci pour le code que je vais tester de suite

    Cordialement

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

Discussions similaires

  1. Calculer les mode et médiane sur une serie de données
    Par khaled87 dans le forum Méthodes exploratoires
    Réponses: 0
    Dernier message: 21/10/2014, 20h56
  2. [AC-2003] Ajout d'une deuxième serie de donnés dans un graphique
    Par Marc_27 dans le forum IHM
    Réponses: 2
    Dernier message: 28/07/2010, 15h50
  3. [XL-2007] couper liaison serie de données et graph
    Par colbubu dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/06/2010, 16h30
  4. [XL-2003] VBA Trier date min max d'une serie de données
    Par Kayla123 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/06/2010, 20h31
  5. [RS232] Procédure d'acquisition de données sur port serie
    Par kazaboua dans le forum Composants
    Réponses: 6
    Dernier message: 12/05/2007, 11h55

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