Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/09/2011, 14h31   #1
Invité de passage
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 4
Points : 4
Par défaut Débutant Probléme avec Worksheet Change

Bonjour a tous,

Mon probléme est le suivants, j'ai fait un code vba qui me permet de remplir une partie de mon tableau ( date; date +15jrs; cela copie la mise en forme de la ligne du dessus; etc..) excel lors de la détection d'une cellule vide dans la colonne B et non vide dans la colonne C mais des que je double clique dans une des cellules de la colonne C cela me modifie ma date ou parfois cela me supprime mes donées ou la mise en forme. J'aimerais enfaite qu'une fois j'ai saisie une valeur dans la colonne C si jamais je la modifie, cela n'entraine pas la modification de la ladate ou supprime la mise en forme etc...

ci-dessous le code que j'ai fait avec le peut de connaissance que j'ai en VBA ( comme vous pourrez le constater j'ai essaye de trouver une solution avec 'Application.EnableEvents = False ou 'Application.ScreenUpdating = False mais sans succées)

Code :
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
Private Sub Worksheet_Change(ByVal Target As Range)
 
'Application.EnableEvents = False
'Application.ScreenUpdating = False
If Target.Column = 3 Then
 
    'Incrémentation date enregistrement/réponse souhaitée + Etat action + Retard + Créateur actions
 
If Not (IsEmpty(Range("C" & Target.Row).Value)) Then IsEmpty (Range("B" & Target.Row).Value)
     'If Not (IsEmpty(Target.Value)) Then
 
    Range("N" & Target.Row).Value = Date
    Range("M" & Target.Row).Value = Date + 15
    Range("B" & Target.Row).Value = Range("B" & Target.Row - 1).Value + 1
    Range("J" & Target.Row).Value = "FAUX"
    Range("I" & Target.Row).Value = "En cours"
    Range("P" & Target.Row).Value = Environ("username")
 
    'Copie formule pour indicateur
 
    Range("L" & Target.Row) = "=IF(YEAR(RC[-1])<2010,IF(RC[-1]="""","""",CONCATENATE(YEAR(RC[-1]),""_"",NO.SEMAINE(RC[-1],2))), IF(RC[-1]="""","""",CONCATENATE(YEAR(RC[-1]),""_"",NO.SEMAINE(RC[-1],2)-1)))"
    Range("O" & Target.Row) = "=IF(YEAR(RC[-1])<2010,IF(RC[-1]="""","""",CONCATENATE(YEAR(RC[-1]),""_"",NO.SEMAINE(RC[-1],2))), IF(RC[-1]="""","""",CONCATENATE(YEAR(RC[-1]),""_"",NO.SEMAINE(RC[-1],2)-1)))"
    Range("Q" & Target.Row) = "=IF(RC[-5]="""","""",RC[-4]-RC[-3])"
 
    ' Copie mise en forme cellule du dessus
 
    Range("B" & Target.Row - 1 & ":Q" & Target.Row - 1).Copy
    Range("B" & Target.Row & ":Q" & Target.Row).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
   Application.CutCopyMode = False
   Range("D" & Target.Row).Select
 
    Else
 
 
    Range("N" & Target.Row).ClearContents
    Range("M" & Target.Row).ClearContents
    Range("B" & Target.Row).ClearContents
    Range("J" & Target.Row).ClearContents
    Range("I" & Target.Row).ClearContents
    Range("P" & Target.Row).ClearContents
    Range("L" & Target.Row).ClearContents
    Range("O" & Target.Row).ClearContents
    End If
End If
End If
 
 
 'Code pour passer de l'état En cours à Clos
 
 If Target.Column = 11 Then
 
        If Not (IsEmpty(Range("K" & Target.Row).Value)) Then
 
        Range("I" & Target.Row).Value = "Clos"
 
        Else
        Range("I" & Target.Row).Value = "En cours"
 
        End If
   End If
 
    'Code pour griser la ligne quand action clos
 
     If Target.Column = 9 Then
        If Range("I" & Target.Row).Value = "Clos" Then
 
        Range("B" & Target.Row, "K" & Target.Row).Interior.ColorIndex = 15
        Range("M" & Target.Row, "N" & Target.Row).Interior.ColorIndex = 15
        Range("P" & Target.Row).Interior.ColorIndex = 15
 
        Else
        Range("B" & Target.Row, "K" & Target.Row).Interior.ColorIndex = 0
        Range("M" & Target.Row, "N" & Target.Row).Interior.ColorIndex = 0
        Range("P" & Target.Row).Interior.ColorIndex = 0
        End If
   End If
 
   'Code pour supprimer les bordures
 
 If Target.Column = 3 Then
    If Not (IsEmpty(Range("C" & Target.Row).Value)) Then
 
        Else
    If Range("B" & Target.Row).Value = "" Then
    Range("B" & Target.Row, "Q" & Target.Row).Activate
    Range("B" & Target.Row, "Q" & Target.Row).Select
 
    Selection.Borders.LineStyle = 0
    Selection.Interior.ColorIndex = 2
 
    Range("C" & Target.Row).Select
    End If
    End If
 End If
' Application.EnableEvents = True
' Application.ScreenUpdating = True
End Sub

Merci d'avance
demichoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 14h44   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 898
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 898
Points : 7 183
Points : 7 183
Bonjour,

J'ai du mal a comprendre

Citation:
j'ai fait un code vba qui me permet de remplir une partie de mon tableau ( date; date +15jrs; cela copie la mise en forme de la ligne du dessus; etc..) excel lors de la détection d'une cellule vide dans la colonne B et non vide dans la colonne C
Est ce code qui doit faire cela?
Code :
If Not (IsEmpty(Range("C" & Target.Row).Value)) Then IsEmpty (Range("B" & Target.Row).Value)
Tu as écrit, si C n'est pas vide, alors B est vide
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 15h48   #3
Invité de passage
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 4
Points : 4
Bonjour jfontaine,

Oui c'est bien ce code qui doit faire cela

Code :
If Not (IsEmpty(Range("C" & Target.Row).Value)) Then IsEmpty (Range("B" & Target.Row).Value)
Ce je voulais faire dire au code c'est si C n'est vide et B est vide alors on peut remplir le tableau

Pour être plus claire si je remplir une cellule de la colone C et que la cellule de la colone B est vide alors on peut remplir les autre colones en F la date du jour; en G la date du jour + 15jrs etc...

Voila en éspérant avoir été plus précis
demichoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 16h37   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 898
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 898
Points : 7 183
Points : 7 183
Dans ce cas, je ferais comme cela

Code :
1
2
3
4
5
6
If Target.Column = 3 and target.value<>"" and range("B" & target.Row).value ="" Then
 
    'Incrémentation date enregistrement/réponse souhaitée + Etat action + Retard + Créateur actions
 
 
    Range("N" & Target.Row).Value = Date
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 09h10   #5
Invité de passage
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 4
Points : 4
Bonjour jfontaine,

J'ai essayer ta solution mais sans succée cela fait bugger mon tableau excel cad que il se met le fichier excel ne repond pas et impossible de le débloquer je suis obliger de le fermer a partir du gestionnaire des tâches.
demichoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 09h20   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 898
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 898
Points : 7 183
Points : 7 183
Utilises le mode pas à pas pour regarder ce qui se passe.
Tu as probablement une boucle sans fin

A noter que dans on fait des modifications de cellules dans l’événement worksheet_Chance cela provoque des entrees et des sorties dans cet événement
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 11h23   #7
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonjour,

J'ai retouché ton code mais je ne l'ai pas testé, donc à voir :
Code :
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
 
Private Sub Worksheet_Change(ByVal Target As Range)
 
    Dim L As Long
 
    Application.EnableEvents = False
    Application.ScreenUpdating = False
 
    L = Target.Row
 
    If Target.Column = 3 Then
 
        'Incrémentation date enregistrement/réponse souhaitée + Etat action + Retard + Créateur actions
 
        If Range("C" & L).Value <> "" And IRange("B" & L).Value = "" Then
 
            Range("N" & L).Value = Date
            Range("M" & L).Value = Date + 15
            Range("B" & L).Value = Range("B" & Target.Row - 1).Value + 1
            Range("J" & L).Value = "FAUX"
            Range("I" & L).Value = "En cours"
            Range("P" & L).Value = Environ("username")
 
            'Copie formule pour indicateur
 
            Range("L" & L).FormulaR1C1 = "=IF(YEAR(RC[-1])<2010,IF(RC[-1]="""","""",CONCATENATE(YEAR(RC[-1]),""_"",NO.SEMAINE(RC[-1],2))), IF(RC[-1]="""","""",CONCATENATE(YEAR(RC[-1]),""_"",NO.SEMAINE(RC[-1],2)-1)))"
            Range("O" & L).FormulaR1C1 = "=IF(YEAR(RC[-1])<2010,IF(RC[-1]="""","""",CONCATENATE(YEAR(RC[-1]),""_"",NO.SEMAINE(RC[-1],2))), IF(RC[-1]="""","""",CONCATENATE(YEAR(RC[-1]),""_"",NO.SEMAINE(RC[-1],2)-1)))"
            Range("Q" & L).FormulaR1C1 = "=IF(RC[-5]="""","""",RC[-4]-RC[-3])"
 
            ' Copie mise en forme cellule du dessus
 
            Range("B" & L - 1 & ":Q" & L - 1).Copy
            Range("B" & L & ":Q" & L).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            Range("D" & L).Select
 
        Else
 
                Range("B" & L).ClearContents
                Range("I" & L).ClearContents
                Range("J" & L).ClearContents
                Range("L" & L).ClearContents
                Range("M" & L).ClearContents
                Range("N" & L).ClearContents
                Range("O" & L).ClearContents
                Range("P" & L).ClearContents
 
            End If
 
        End If
 
    End If
 
 
    'Code pour passer de l'état En cours à Clos
 
     If Target.Column = 11 Then
 
            If Range("K" & L).Value <> "" Then
 
                Range("I" & L).Value = "Clos"
 
            Else
 
                Range("I" & L).Value = "En cours"
 
            End If
 
    End If
 
    'Code pour griser la ligne quand action clos
 
     If Target.Column = 9 Then
 
        If Range("I" & Target.Row).Value = "Clos" Then
 
            Range("B" & L & ":K" & L).Interior.ColorIndex = 15
            Range("M" & L & ":N" & L).Interior.ColorIndex = 15
            Range("P" & L).Interior.ColorIndex = 15
 
        Else
 
            Range("B" & L & ":K" & L).Interior.ColorIndex = 0
            Range("M" & L & ":N" & L).Interior.ColorIndex = 0
            Range("P" & L).Interior.ColorIndex = 0
 
        End If
   End If
 
   'Code pour supprimer les bordures
 
    If Target.Column = 3 Then
 
       If Range("C" & L).Value <> "" Then
 
           'quoi doit être fait ici ???
           'sinon c'est If Range("C" & L).Value = "" Then
           'et le Else est à virer
 
       Else
 
           If Range("B" & L).Value = "" Then
 
               Range("B" & L & ":Q" & L).Activate
               Range("B" & L & ":Q" & L).Select
 
               Selection.Borders.LineStyle = 0
               Selection.Interior.ColorIndex = 2
 
               Range("C" & Target.Row).Select
 
           End If
 
       End If
 
    End If
 
    Application.EnableEvents = True
    Application.ScreenUpdating = True
 
End Sub
Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h21.


 
 
 
 
Partenaires

Hébergement Web