Pour désactiver les évènements, j'imagine qu'il pensait à un
Je me trompe peut être!!Code:Application.EnableEvents = False
Version imprimable
Pour désactiver les évènements, j'imagine qu'il pensait à un
Je me trompe peut être!!Code:Application.EnableEvents = False
Merci titou31000 si c'est bien à ça que NVCfrm pensait (et même autrement ;))
Et ne vous embêtez pas j'ai trouvé la "solution" : en fait, à chaque fois je supprime toutes les bordures plus les recrée... c'est un peu barbare mais ça marche !?
Re
@titou31000: Non, tu ne te trompes pas.
Scoubi7: j'ai testé le code. Une erreur effectivement aux lignes indiquées.
Cette ligne de code ajoutée avant tes instructions sur les bordures:
me permet de faire cette déduction: la fusion des cellules avant la définition des bordures empêche l'accès en écriture aux propriétés Borders. Pas vérifié à fond.Code:Range(Cells(l, 3), Cells(l, 7)).ClearFormats
Sans le code ci-dessus, j'ai par conséquent modifier l'ordre d'appel de la procédure "MisEnPage" en la plaçant en première ligne dans la condition:où tu effectues la fusion. Plusieurs tests ensuite sans problème.Code:If Not Intersect(Target, Columns(3)) Is Nothing And Target.Address = Cells(Target.Row, 3).Address Then
Bien que n'ayant pas constaté de problème sur l'absence de contrôle du gestionnaire, il vaut mieux écrire les deux instructions suivantes au début et à la fin de ton bloc de code qui génère l'évènement Change.
Certaines instructions de format génèrent cet évènement.Code:
1
2
3 Application.EnableEvents = False Application.EnableEvents = True
J'espère que ces explications t'aideront.
je vois que tu as été inspiré avant mon post.
Comme marqué ma méthode est un peu "barbare" et tes remarques m'éclaircissent sur mes prochaines macros.
Merci pour vos précisions et le temps passé pour m'aider !
J'ai à nouveau un souci avec un fichier... là encore il s'agirait du "WorksheetChange" mais j'ai essayé plusieurs endroits où placer "Application.EnableEvents"... et sans succès !
Worksheet_Change se lance pour une plage mais pas pour l'autre
Y aurait-il à nouveau une âme charitable pour identifier d'où vient mon problème ?
Voici mon fichier :
Re,
La gestion d'évènement n'est pas rétablie avant la fin du code.
Code:Application.EnableEvents =True
J'avais essayé mais c'était pareil...
Bonjour,
j'ai eu un petit peu de temps pour scruter ton code.
Je dois t'expliquer une chose dans l'exemple Worksheet_Change
Dans cet évènement il faut faire attention à ne pas provoquer une cascade d'évènements Change avec un code qui génère cet évènement
L'évènement Change est généré à nouveau à l'exécution de cells(1,2)= 5Code:
1
2
3
4
5
6
7 Private Sub Worksheet_Change(Target As Range) if Cells(1,1)<>"" Then cells(1,2)= 5 else Exit Sub end if end Sub
place un point d'arrêt en appuyant la touche F9 sur la ligne cells(1,2)= 5
n'importe où dans la feuille de calul concerné tape une valeur. Au point d'arrêt va en appuyant F8 pour observer ce qui se passe.
Donc il faut avoir dit au générateur d'évènement de ne pas agir quand un évènement se produit avant cette ligne. D''où la nécessité de placer au bon endroit Application.EnableEvents=False.
ensuite avant la fin de la procédure ou une instruction Exit Sub il faut avoir pris la précaution d'instruire Application.EnableEvents=True à moins que tu souhaites qu'il reste désactivé.
Une lecture rapide de ton code m'a fait détecter un Exit Sub avant la réactivation.
D'habitude je suis pressé et ne veut pas perdre de temps à comprendre un code sans commentaires, et dont les objectifs finaux me sont inconnues. Juste essayer de déviner une instruction qui peut être source de problème.
Mais je n'ai pas pu m'empêcher de réagir à une lecture pénible.
Voici une purification
Attention au nom de feuille indiquée qui ne correspond pas à celui de ton fichier.:ccool: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 Option Explicit Dim EnCours As String Private Sub Worksheet_Change(Target As Range) Dim Année As Integer, Mois As Integer, JourFinMois As Integer _ , DateDébut As Date, DateFin As Date, DateEnCours As Date _ , Cellule As String, T, i As Integer Application.EnableEvents = False T = Array("JANV", "FEVR", "MARS", "AVRI", "MAI", "JUIN", "JUIL", "AOUT", "SEPT", "OCTO", "NOVE", "DECE") If Not Intersect(Target, Range("C2")) Is Nothing And EnCours <> "Oui" Then EnCours = "Oui" Worksheets("feuil2").Unprotect (ThisWorkbook.Code) Worksheets("feuil2").Range("C5:C41").ClearContents Année = Right(Worksheets("feuil2").Range("C2"), 4) For i = 1 To 12 If Left(Worksheets("feuil2").Range("C2"), 4) = T(i - 1) Then Mois = i: Exit For Next DateDébut = "01/" & Mois & "/" & Année DateFin = Switch(Mois = 12, "01/01/" & Année + 1, _ Mois < 12, "01/" & Format(Mois + 1, "0#") & "/" & Année) JourFinMois = DateValue(DateFin) - DateValue(DateDébut) For i = 1 To 7 Cellule = Cells(i + 4, 3).Address Cells(i + 4, 3) = DateValue(DateDébut) Next DateEnCours = DateDébut Do DateEnCours = DateValue(DateEnCours) + 1 Range(Cellule).Offset(Day(DateEnCours) - 1, 0) = DateEnCours Loop Until Day(DateEnCours) = Day(DateValue(DateFin) - 1) ElseIf Not Intersect(Target, Range("D5:D41")) Is Nothing And EnCours <> "Oui" Then Call Vacations End If Worksheets("feuil2").Protect (ThisWorkbook.Code) EnCours = "" Application.EnableEvents = True End Sub Sub Vacations() Dim Ligne As Integer, even As Boolean, Un As Boolean even = Application.EnableEvents Application.EnableEvents = False EnCours = "Oui" Worksheets("feuil2").Unprotect (ThisWorkbook.Code) Range("C45").Value = "" For Ligne = 5 To 41 Select Case Cells(Ligne, 4) Case "J" Cells(Ligne, 5).Value = 12 Un = True If JourChômé(Cells(Ligne, 3)) Then Range("C45").Value = Range("C45").Value + 12 Case Is = "j" Cells(Ligne, 5).Value = 11.5 Un = True Case Is = "M" Or "S" Cells(Ligne, 5).Value = 7 Un = True Case Is = "m" Cells(Ligne, 5).Value = 4 Case Is = "F" Cells(Ligne, 5).Value = Range("K9") Case Is = "R" Cells(Ligne, 5).Value = Range("K6") Case Is = "VM" Cells(Ligne, 5).Value = 2 Case Is = "N" Cells(Ligne, 5).Value = 12 If JourChômé(Cells(Ligne, 3)) Then Range("C45").Value = Range("C45").Value + 5 If JourChômé(Cells(Ligne + 1, 3)) Then Range("C45").Value = Range("C45").Value + 7 Case Is = "" Cells(Ligne, 5).Value = "" Cells(Ligne, 6).Value = "" End Select Next Ligne Worksheets("feuil2").Protect (ThisWorkbook.Code) EnCours = "" Application.EnableEvents = even End Sub
:aie: à la lecture du post je remarque un oubli dans La procédure Vacation:
une variable Boolen Un a été déclaré qui devait être évalué à la fin de la structure Select Case. Tu avais un If or ... or ... or ... and ... or ....or ... quelque part. C'est la variable Un que tu devrais évaluer à cette place.
Cordialement.:P
Merci beaucoup pour le temps que tu m'as accordé et ta réponse !
Grace à tes corrections, j'essaierai de me servir à l'avenir des fonctions que tu as utilisé et qui sont plus pratiques que mon bidouillage, comme Array ou Switch (même si cette dernière est pour moi encore un peu obscure...)
J'ai quelques petites modifications à apporter et MERCI encore !
Je déterre ce sujet car je ne m'en était pas rendu compte mais mon fichier s'est remis à beuguer... (???)
Après recherche cela provient de la fonction JourChômé quelqu'un aurait-il une idée ?
Si le problème vient aussi de Application.EnableEvents, je n'ai pas réussi à l'insérer au bon endroit...
Si je supprime la mise en forme conditionnelle tout fonctionne...
Donc la solution est bien là : j'ai supprimé la mise en forme conditionnelle et l'ai remplacé par une macro et tout fonctionne !