Bonjour à tous et à toutes

J'ouvre ce post suite à un autre car le premier problème n'est plus d'actualité. Voici le lien du premier problème pour les curieux...

http://www.developpez.net/forums/d15...uite-code-vba/

A l'heure d'aujourd'hui j'ai réalisé avec l'aide de certaines personnes présente sur ce forum et je vous en remercie, un tableau pour une année qui me permet de suivre des interventions de techniciens ainsi que de faire des stats sur les interventions en cours, interventions faite, le temps moyen d'une intervention, le nombre d'interventions par mois et sur l'année.

Le principe:

Un atelier a besoin d'une intervention, le responsable envois une demande à l'atelier principal qui lui rentre dans un tableau des informations client afin de prévoir l'intervention.

Ce tableau est en VBA pour des questions pratiques, cependant je souhaite réaliser des statistiques d'interventions et là j'ai un problème.


Le problème:

Mon code qui me permet de faire des stats en fonction du mois d'intervention ne fonctionne pas en temps voulu. Je m'explique.

Lorsque nous rentrons les initiales de la base qui demande l'intervention dans le tableau en colonne "J", la date de demande se rentre automatiquement au format "MM/JJ/AAAA" sur la même ligne en colonne "L" et toujours sur la même ligne la valeur "1" doit se mettre dans la colonne qui correspond à la base qui demande entre la colonne "R" et "AB" puis une autre valeur "1" doit s'afficher dans une colonne qui correspond au mois de la demande d'intervention ("AE" = Janvier, "AF" = Février....).

Lorsque l'intervention est faite, nous entrons un "X" ou un "x" dans la colonne "O" sur la ligne de l'intervention fini et une autre valeur "1" s'affiche sur la même ligne en colonne "AC" pour faire des stats d'intervention fini, la date du jour au format "MM/JJ/AAAA" s'ajoute également en colonne "P" automatiquement sans oublier une comparaison de date pour calculer un délais d'intervention en colonne "BE".

Hors la valeur "1" qui doit ce mettre dans la colonne correspondante au mois de la demande d'intervention s'affiche quand je supprime le contenue de la case en colonne "J" (les initiales de la base) ou quand l'ajoute la valeur "X" ou "x" en colonne "O" au lieu de s'afficher lors de la saisie des initiales de la base.

Voilà le code qui me permet de faire cette ajout de valeur "1" en fonction du mois (pour le mois de janvier)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
If DateValue(Plgstatdate1) >= DateValue("01/01/2016") And DateValue(Plgstatdate1) <= DateValue("01/31/2016") Then
   janvier.Value = 1
End If
Et voilà le code complet pour ceux qui le voudrais et pour plus de compréhension

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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
 
Option Explicit
 
Private Sub Worksheet_Change(ByVal Target As Range)                   ' _Change se déclanche lors de modif du contenue de la feuille
 
    'DECLARATION DE VARIABLE RANGE
        Dim Plagebase As Range, Plgtab As Range, Plgtotal As Range, Plgfait As Range, Plgstatfait As Range, Plgstatdelais As Range, Plgdate1 As Range, Plgdate2 As Range, janvier As Range, fevrier As Range, mars As Range, avril As Range, mai As Range, juin As Range, juillet As Range, aout As Range, septembre As Range, octobre As Range, novembre As Range, decembre As Range
 
            Set Plagebase = Range("J:J")                                  'Colonne base
            Set Plgtab = Range("B" & Target.Row & ":P" & Target.Row)      'Selection du tableau
            Set Plgtotal = Range("B" & Target.Row & ":BE" & Target.Row)   'Selection de la totalité de la ligne utiliser, stat compris
            Set Plgfait = Range("O:O")                                    'Colonne intervention faite
            Set Plgstatfait = Range("AC" & Target.Row)                    'Colonne si intervention faite = 1
            Set Plgstatdelais = Range("BE" & Target.Row)                  'Colonne pour delais1 = 1
            Set Plgdate1 = Range("L" & Target.Row)                        'Colonne date de début
            Set Plgdate2 = Range("P" & Target.Row)                        'Colonne date de fin
 
            Set janvier = Range("AE" & Target.Row)
            Set fevrier = Range("AF" & Target.Row)
            Set mars = Range("AG" & Target.Row)
            Set avril = Range("AH" & Target.Row)
            Set mai = Range("AI" & Target.Row)
            Set juin = Range("AJ" & Target.Row)
            Set juillet = Range("AK" & Target.Row)
            Set aout = Range("AL" & Target.Row)
            Set septembre = Range("AM" & Target.Row)
            Set octobre = Range("AN" & Target.Row)
            Set novembre = Range("AO" & Target.Row)
            Set decembre = Range("AP" & Target.Row)
 
    'DESACTIVATION DES EVENEMENTS
        Application.EnableEvents = False
 
    'DESACTIVATION DE LA MAJ D'ECRAN A CHAQUE CALCUL
        Application.ScreenUpdating = False
 
    'DECLARATION DE VARIABLE DATE
        Dim Plgstatdate1 As Date
 
            Plgstatdate1 = Range("L" & Target.Row)                         'Colonne date d'acquisition
            'Plgstatdate2 = Range("P" & Target.Row)                         'Colonne date d'intervention faite
 
    'AJOUT DE LA DATE D'ACQUISITION
        If Target.Column = 10 Then If Not (IsEmpty(Target.Value)) Then Range("L" & Target.Row).Value = Date _
            Else: Range("L" & Target.Row).ClearContents
 
    'AJOUT DE LA DATE D'INTERVENTION FAITE
        If Target.Column = 15 Then If Not (IsEmpty(Target.Value)) Then Range("P" & Target.Row).Value = Date _
            Else: Range("P" & Target.Row).ClearContents
 
    'CHANGEMENT DE COULEUR DE LA LIGNE EN FONCTION DE LA BASE
        If Not Application.Intersect(Target, Plagebase) Is Nothing And Target.Count = 1 Then
            Select Case Target
                Case Is = "AN": Plgtab.Interior.Color = RGB(72, 198, 5)        'vert
                Case Is = "HE": Plgtab.Interior.Color = RGB(225, 206, 154)     'Vanille
                Case Is = "CH": Plgtab.Interior.Color = RGB(212, 115, 212)     'mauve
                Case Is = "VE": Plgtab.Interior.Color = RGB(84, 249, 141)      'menthe à l'eau
                Case Is = "FO": Plgtab.Interior.Color = RGB(255, 0, 0)         'rouge
                Case Is = "NA": Plgtab.Interior.Color = RGB(44, 117, 255)      'bleu électrique
                Case Is = "FG": Plgtab.Interior.Color = RGB(255, 255, 0)       'jaune
                Case Is = "MZ": Plgtab.Interior.Color = RGB(231, 62, 1)        'abricot
                Case Is = "ML": Plgtab.Interior.Color = RGB(24, 194, 230)      'bleu ciel
                Case Is = "CO": Plgtab.Interior.Color = RGB(240, 130, 200)     'rose foncé
                Case Is = "DA": Plgtab.Interior.Color = RGB(255, 165, 90)      'orange pale
                Case Else
                    Plgtab.Interior.Pattern = xlNone                           'suppr de la couleur si plus de base
                    Plgtotal.ClearContents                                       'suppr du contenue de la ligne si plus de base
            End Select
        End If
 
    'CHANGEMENT DE COULEUR DE LA LIGNE SI INTERVENTION FAITE (COLONNE "O") + RETOUR A LA 1ère COULEUR SI SUPPR DE "X"
        If Not Application.Intersect(Target, Plgfait) Is Nothing And Target.Count = 1 Then
            Select Case Target
                Case Is = "X":  Plgtab.Interior.Color = RGB(170, 5, 80)         'magenta foncé
                Case Is = "x":  Plgtab.Interior.Color = RGB(170, 5, 80)         'magenta foncé
            End Select
        If Target.Value = "" Then
            Select Case Cells(Target.Row, 10).Value
                Case Is = "AN":  Plgtab.Interior.Color = RGB(72, 198, 5)        'vert
                Case Is = "HE":  Plgtab.Interior.Color = RGB(225, 206, 154)     'Vanille
                Case Is = "CH":  Plgtab.Interior.Color = RGB(212, 115, 212)     'mauve
                Case Is = "VE":  Plgtab.Interior.Color = RGB(84, 249, 141)      'menthe à l'eau
                Case Is = "FO":  Plgtab.Interior.Color = RGB(255, 0, 0)         'rouge
                Case Is = "NA":  Plgtab.Interior.Color = RGB(44, 117, 255)      'bleu électrique
                Case Is = "FG":  Plgtab.Interior.Color = RGB(255, 255, 0)       'jaune
                Case Is = "MZ":  Plgtab.Interior.Color = RGB(231, 62, 1)        'abricot
                Case Is = "ML":  Plgtab.Interior.Color = RGB(24, 194, 230)      'bleu ciel
                Case Is = "CO":  Plgtab.Interior.Color = RGB(240, 130, 200)     'rose foncé
                Case Is = "DA":  Plgtab.Interior.Color = RGB(255, 165, 90)      'orange pale
            End Select
        End If
        End If
 
    'AJOUT DE VALEURS HORS TABLEAU POUR STAT (COLONNE: R à AB)
        If Not Application.Intersect(Target, Plagebase) Is Nothing And Target.Count = 1 Then
            Select Case Target
                Case Is = "AN": Range("R" & Target.Row).Value = 1   
                Case Is = "HE": Range("S" & Target.Row).Value = 1   
                Case Is = "CH": Range("T" & Target.Row).Value = 1   
                Case Is = "VE": Range("U" & Target.Row).Value = 1   
                Case Is = "FO": Range("V" & Target.Row).Value = 1   
                Case Is = "NA": Range("W" & Target.Row).Value = 1   
                Case Is = "FG": Range("x" & Target.Row).Value = 1   
                Case Is = "MZ": Range("Y" & Target.Row).Value = 1   
                Case Is = "ML": Range("z" & Target.Row).Value = 1   
                Case Is = "CO": Range("AA" & Target.Row).Value = 1  
                Case Is = "DA": Range("AB" & Target.Row).Value = 1  
            End Select
        End If
 
    'AJOUT HORS TABLEAU DE LA VALEUR "1" SI FAIT & SUPPR DE LA VALEUR "1" SI PLUS DE BASE (COLONNE: AB) & STAT DELAIS
        If Not Application.Intersect(Target, Plgfait) Is Nothing And Target.Count = 1 Then
            Select Case Target
                Case Is = "X": Plgstatfait.Value = 1    'Si "X" dans fait (MAJ)
                Case Is = "x": Plgstatfait.Value = 1    'Si "x" dans fait (minuscule)
                Case Else: Plgstatfait.ClearContents
            End Select
        If Not Application.Intersect(Target, Plgfait) Is Nothing And Target.Count = 1 Then
            Select Case Target
                Case Is = "X": Plgstatdelais.Value = DateDiff("d", Plgdate1, Plgdate2)  ' Ajout du délais
                Case Is = "x": Plgstatdelais.Value = DateDiff("d", Plgdate1, Plgdate2)  ' Ajout du délais
                Case Else: Plgstatdelais.ClearContents
            End Select
        End If
        End If
 
    'AJOUT HORS TABLEAU DE LA VALEUR "1" DANS LE MOIS SI AJOUT DE BASE POUR STAT(COLONNE: AE à AP)
            If DateValue(Plgstatdate1) >= DateValue("01/01/2016") And DateValue(Plgstatdate1) <= DateValue("01/31/2016") Then
                janvier.Value = 1
               'MsgBox "test ok"
            End If
 
 
    'AJOUT HORS TABLEAU DE VALEUR "1" DANS LE MOIS SI INTERVENTION FAITE POUR STAT (COLONNE: AR à BC)
 
            'code identique à celui de dessus mais en fonction de la date d'intervention fait
 
 
    'COULEUR DES VALEURS HORS TABLEAU (COLONNE: >=Q)
        With Range("Q:BE").Font
                '.Color = RGB(255, 255, 255)     'blanc
                .Color = RGB(32, 32, 32)        'noir
        End With
 
    'ACTIVATION DES EVENEMENTS
        Application.EnableEvents = True
End Sub