Bonjour,

Il se trouve que pour un fichier Excel, j'ai décidé de faire ma petite macro.

Le principe est assez simple, mais un peu long à expliquer, je vais essayer d'être le plus clair possible :

Il s'agit d'un tableau à deux entrées, dans la colonne H8, les cellules possèdent une liste déroulante de choix contenant une trentaine de valeur différentes.
Les colonnes de I8 à N8, contiennent des valeurs qui dépendent de H8.

Lorsque les colonnes de I à N de la ligne sélectionnée ne doivent pas contenir de valeurs, elles doivent être bloquées, et j'ai rajouté un fond de couleur différent, histoire de rendre le tableau plus lisible.
Quand on change la valeur de la colonne H8, les colonnes de I à N changent en conséquence, et si H8 devient la valeur par défaut (""), la colonnes de I à N redeviennent à la couleur par défaut ( soit blanc, soit bleu clair selon si la ligne est paire ou impaire ).

Tout marchait bien au début, puis, comme la colonne C contient une date, j'ai voulu rajouter un calendrier en feuille 2 ( ceci n'a peut être rien à voir avec mon pb, mais c'est la seule chose ayant changée ).

J'ai donc fait mon calendrier avec la macro correspondante, histoire de griser et bloquer les jours fériés.

Seulement voilà, maintenant, quand je change la valeur de H8, j'ai un message d'erreur qui me dit : "Erreur 1004, erreur définie par l'application ou par l'objet"
Si je lance le débug, ça ne m'apprend pas grand chose, hormis que l'erreur est censé venir d'un contrôle ActiveX qui ne peut pas créer d'objet, alors qu'il n'existe pas de contrôle ActiveX dans ma feuille.

Ne sachant pas d'où vient exactement l'erreur, mon code me semblant bon, je vous le copie :


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
Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Row >= 8 And Target.Row <= 38 And Target.Column = 8 Then


ActiveSheet.Unprotect "admin"

Dim lig As Integer
Dim temp As String
Dim temp2 As String


lig = Target.Row

temp = "I" & lig & ":N" & lig
Range(temp).Select
Selection.Locked = False
Selection.FormulaHidden = False
'On vide les cases de la colonne I à N
Cells(lig, 9).Value = ""
Cells(lig, 10).Value = ""
Cells(lig, 11).Value = ""
Cells(lig, 12).Value = ""
Cells(lig, 13).Value = ""
Cells(lig, 14).Value = ""


If lig Mod 2 = 0 Then 'Si la ligne est paire
With Selection.Interior 'On colorie le fond en blanc
        .Pattern = xlSolid ' C'est ici que le compilo indique une erreur, ( si la ligne sélectionnée est paire, sinon c'est un peu plus bas ) sachant que le code en lui-même fonctionne parfaitement, puisqu'il provient d'un enregistrement, et fonctionne si on l'exécute en solo
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
        .PatternTintAndShade = 0
End With
Else 'Si la ligne est impaire
With Selection.Interior 'On colorie le fond en bleu clair
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent1
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
End With
End If



'Cas n°1, que le compilo n'atteind plus...
If Cells(lig, 8).Value = "Autres frais de séjour avec repas midi" Then
temp = "I" & lig
Range(temp).Select
Selection.Locked = True
Selection.FormulaHidden = True
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight2
        .TintAndShade = 0.599993896298105
        .PatternTintAndShade = 0
    End With
Cells(lig, 11).Value = 1
Cells(lig, 12).Value = 0
Cells(lig, 13).Value = 0
Cells(lig, 14).Value = 0
temp = "L" & lig & ":N" & lig
Range(temp).Select
Selection.Locked = True
Selection.FormulaHidden = True
With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent5
        .TintAndShade = 0.599993896298105
        .PatternTintAndShade = 0
End With
End If

'Suivent ensuite les 30 autres cas, ainsi que la fin du programme :

Range("H8").Select

ActiveSheet.Protect "admin", True, True, True

End Sub
Donc a priori cela ne vient pas du code en lui-même, du moins pas de la ligne qui est censée être boguée.

Je précise quand même que lors de l'exécution, temp prend bien la valeur souhaitée, dans le cas présent, "I8:N8", le Range(temp).Select fonctionne donc, en théorie, puisqu'il fonctionne sur d'autres macro ( d'autres classeurs ).


Merci d'avance à ceux qui plancheront sur mon problème

Bonne journée !