Macro ne s'exécutant plus une fois la feuille Excel protégée

Bonjour,

J'ai, après un bout de temps, enfin terminé mon programme; cependant, comme il devra être utilisé par plusieurs personnes, j'aimerai protéger les cellules qu'elles n'auront pas le droit de modifier. Je suis passer par la procédure classique de protection en utilisant un mot de passe, puis, j'ai verrouiller la feuille. Seulement, quand je lance ma macro: horreur!! une erreur 400 à laquelle je ne comprends strictement rien. J'ai regarder un peu sur le forum et une solution était de programmer la macro pour qu'elle désactive la sécurité de la feuille, le temps de l'opération avant de la réactiver. Cependant, je m'inquiète un peu de la façon dont je dois écrire cette opération. Serait-ce une macro indépendante des autres ou des lignes de plus à ajouter à la macro existante. Aussi, est-ce vraiment sur pour le programme cette méthode? jusqu'à quel point les cellules que je veux protéger le seront? Je beug vraiment là...hepl!!!

Pour ceux qui auraient besoin du code:

Option Explicit

Sub Cigares()

Dim one As String
Dim X As Long
Dim Y As Long
Dim ron As Date
Dim rav As Date
Dim dens As Double
Dim Init As Double
Dim Fin As Double
Dim débit As Double

one = Sheets("Cigares").Range("C5").Value
X = CLng(Sheets("Cigares").Range("C8").Value)
Y = CLng(Sheets("Cigares").Range("C10").Value)
ron = CDate(Sheets("Cigares").Range("F8").Value)
rav = CDate(Sheets("Cigares").Range("F10").Value)
dens = CDbl(Sheets("Cigares").Range("H8").Value)
Init = CDbl(Sheets("Cigares").Range("A12").Value)
Fin = CDbl(Sheets("Cigares").Range("A13").Value)
débit = CDbl(Sheets("Cigares").Range("J8").Value)

Select Case one

    Case "B1061"

        If X < 260 Or X = 260 Then
        Init = (0.052 * X ^ 2) + (8.623 * X) - 58.37
        ElseIf X > 260 And (X < 790 Or X = 790) Then
        Init = (0.019 * X ^ 2) + (22.11 * X) - 1596
        ElseIf X > 790 And (X < 1140 Or X = 1140) Then
        Init = (0.007 * X ^ 2) + (37.61 * X) - 6329
        ElseIf X > 1140 And (X < 1790 Or X = 1790) Then
        Init = (0.002 * X ^ 2) + (49.99 * X) - 13743
        ElseIf X > 1790 And (X < 2060 Or X = 2060) Then
        Init = (-0.007 * X ^ 2) + (81.75 * X) - 42156
        ElseIf X > 2060 And (X < 2190 Or X = 2190) Then
        Init = (-0.012 * X ^ 2) + (104.3 * X) - 67791
        ElseIf X > 2190 And (X < 2370 Or X = 2370) Then
        Init = (-0.015 * X ^ 2) + (117.2 * X) - 82003
        ElseIf X > 2370 And (X < 2450 Or X = 2450) Then
        Init = (-0.021 * X ^ 2) + (149.9 * X) - 126239
        ElseIf X > 2450 And (X < 2570 Or X = 2570) Then
        Init = (-0.023 * X ^ 2) + (159.1 * X) - 137205
        ElseIf X > 2570 And (X < 2690 Or X = 2690) Then
        Init = (-0.026 * X ^ 2) + (176.1 * X) - 161594
        ElseIf X > 2690 And (X < 2770 Or X = 2770) Then
        Init = (-0.043 * X ^ 2) + (270.5 * X) - 293049
        ElseIf X > 2770 And (X < 2890 Or X = 2890) Then
        Init = (-0.054 * X ^ 2) + (332.2 * X) - 380020
        Else
        Init = (-0.103 * X ^ 2) + (618.4 * X) - 798294
        End If

        If Y < 260 Or Y = 260 Then
        Fin = (0.052 * Y ^ 2) + (8.623 * Y) - 58.37
        ElseIf Y > 260 And (Y < 790 Or Y = 790) Then
        Fin = (0.019 * Y ^ 2) + (22.11 * Y) - 1596
        ElseIf Y > 790 And (Y < 1140 Or Y = 1140) Then
        Fin = (0.007 * Y ^ 2) + (37.61 * Y) - 6329
        ElseIf Y > 1140 And (Y < 1790 Or Y = 1790) Then
        Fin = (0.002 * Y ^ 2) + (49.99 * Y) - 13743
        ElseIf Y > 1790 And (Y < 2060 Or Y = 2060) Then
        Fin = (-0.007 * Y ^ 2) + (81.75 * Y) - 42156
        ElseIf Y > 2060 And (Y < 2190 Or Y = 2190) Then
        Fin = (-0.012 * Y ^ 2) + (104.3 * Y) - 67791
        ElseIf Y > 2190 And (Y < 2370 Or Y = 2370) Then
        Fin = (-0.015 * Y ^ 2) + (117.2 * Y) - 82003
        ElseIf Y > 2370 And (Y < 2450 Or Y = 2450) Then
        Fin = (-0.021 * Y ^ 2) + (149.9 * Y) - 126239
        ElseIf Y > 2450 And (Y < 2570 Or Y = 2570) Then
        Fin = (-0.023 * Y ^ 2) + (159.1 * Y) - 137205
        ElseIf Y > 2570 And (Y < 2690 Or Y = 2690) Then
        Fin = (-0.026 * Y ^ 2) + (176.1 * Y) - 161594
        ElseIf Y > 2690 And (Y < 2770 Or Y = 2770) Then
        Fin = (-0.043 * Y ^ 2) + (270.5 * Y) - 293049
        ElseIf Y > 2770 And (Y < 2890 Or Y = 2890) Then
        Fin = (-0.054 * Y ^ 2) + (332.2 * Y) - 380020
        Else
        Fin = (-0.103 * Y ^ 2) + (618.4 * Y) - 798294
        End If

    Case "B1062"

        If X < 270 Or X = 270 Then
        Init = (0.049 * X ^ 2) + (9.246 * X) - 90.62
        ElseIf X > 270 And (X < 720 Or X = 720) Then
        Init = (0.02 * X ^ 2) + (21.45 * X) - 1480
        ElseIf X > 720 And (X < 1210 Or X = 1210) Then
        Init = (0.009 * X ^ 2) + (35.03 * X) - 5758
        ElseIf X > 1210 And (X < 1430 Or X = 1430) Then
        Init = (0.001 * X ^ 2) + (51.29 * X) - 13743
        ElseIf X > 1430 And (X < 1860 Or X = 1860) Then
        Init = (-0.001 * X ^ 2) + (59.6 * X) - 21532
        ElseIf X > 1860 And (X < 2280 Or X = 2280) Then
        Init = (-0.007 * X ^ 2) + (80.82 * X) - 40630
        ElseIf X > 2280 And (X < 2400 Or X = 2400) Then
        Init = (-0.016 * X ^ 2) + (123.3 * X) - 91077
        ElseIf X > 2400 And (X < 2680 Or X = 2680) Then
        Init = (-0.02 * X ^ 2) + (141.6 * X) - 112352
        Else
        Init = (-0.05 * X ^ 2) + (305.9 * X) - 337797
        End If

        If Y < 270 Or Y = 270 Then
        Fin = (0.049 * Y ^ 2) + (9.246 * Y) - 90.62
        ElseIf Y > 270 And (Y < 720 Or Y = 720) Then
        Fin = (0.02 * Y ^ 2) + (21.45 * Y) - 1480
        ElseIf Y > 720 And (Y < 1210 Or Y = 1210) Then
        Fin = (0.009 * Y ^ 2) + (35.03 * Y) - 5758
        ElseIf Y > 1210 And (Y < 1430 Or Y = 1430) Then
        Fin = (0.001 * Y ^ 2) + (51.29 * Y) - 13743
        ElseIf Y > 1430 And (Y < 1860 Or Y = 1860) Then
        Fin = (-0.001 * Y ^ 2) + (59.6 * Y) - 21532
        ElseIf Y > 1860 And (Y < 2280 Or Y = 2280) Then
        Fin = (-0.007 * Y ^ 2) + (80.82 * Y) - 40630
        ElseIf Y > 2280 And (Y < 2400 Or Y = 2400) Then
        Fin = (-0.016 * Y ^ 2) + (123.3 * Y) - 91077
        ElseIf Y > 2400 And (Y < 2680 Or Y = 2680) Then
        Fin = (-0.02 * Y ^ 2) + (141.6 * Y) - 112352
        Else
        Fin = (-0.05 * Y ^ 2) + (305.9 * Y) - 337797
        End If

    Case "B1063"

        If X < 130 Or X = 130 Then
        Init = (0.05 * X ^ 2) + (1.958 * X) - 1.457
        ElseIf X > 130 And (X < 370 Or X = 370) Then
        Init = (0.016 * X ^ 2) + (6.519 * X) - 201
        ElseIf X > 370 And (X < 690 Or X = 690) Then
        Init = (0.008 * X ^ 2) + (11.28 * X) - 1001
        ElseIf X > 690 And (X < 970 Or X = 970) Then
        Init = (0.004 * X ^ 2) + (16.06 * X) - 2093
        ElseIf X > 970 And (X < 1140 Or X = 1140) Then
        Init = (0.002 * X ^ 2) + (19.65 * X) - 3327
        ElseIf X > 1140 And (X < 1900 Or X = 1900) Then
        Init = (26.99 * X) - 9038
        ElseIf X > 1900 And (X < 2310 Or X = 2310) Then
        Init = (24.4 * X) - 4113
        ElseIf X > 2310 And (X < 2460 Or X = 2460) Then
        Init = (-0.007 * X ^ 2) + (57.18 * X) - 42843
        ElseIf X > 2460 And (X < 2630 Or X = 2630) Then
        Init = (-0.009 * X ^ 2) + (66.22 * X) - 53266
        ElseIf X > 2630 And (X < 2800 Or X = 2800) Then
        Init = (-0.016 * X ^ 2) + (103.7 * X) - 103858
        Else
        Init = (-0.021 * X ^ 2) + (132 * X) - 144192
        End If

        If Y < 130 Or Y = 130 Then
        Fin = (0.05 * Y ^ 2) + (1.958 * Y) - 1.457
        ElseIf Y > 130 And (Y < 370 Or Y = 370) Then
        Fin = (0.016 * Y ^ 2) + (6.519 * Y) - 201
        ElseIf Y > 370 And (Y < 690 Or Y = 690) Then
        Fin = (0.008 * Y ^ 2) + (11.28 * Y) - 1001
        ElseIf Y > 690 And (Y < 970 Or Y = 970) Then
        Fin = (0.004 * Y ^ 2) + (16.06 * Y) - 2093
        ElseIf Y > 970 And (Y < 1140 Or Y = 1140) Then
        Fin = (0.002 * Y ^ 2) + (19.65 * Y) - 3327
        ElseIf Y > 1140 And (Y < 1900 Or Y = 1900) Then
        Fin = (26.99 * Y) - 9038
        ElseIf Y > 1900 And (Y < 2310 Or Y = 2310) Then
        Fin = (24.4 * Y) - 4113
        ElseIf Y > 2310 And (Y < 2460 Or Y = 2460) Then
        Fin = (-0.007 * Y ^ 2) + (57.18 * Y) - 42843
        ElseIf Y > 2460 And (Y < 2630 Or Y = 2630) Then
        Fin = (-0.009 * Y ^ 2) + (66.22 * Y) - 53266
        ElseIf Y > 2630 And (Y < 2800 Or Y = 2800) Then
        Fin = (-0.016 * Y ^ 2) + (103.7 * Y) - 103858
        Else
        Fin = (-0.021 * Y ^ 2) + (132 * Y) - 144192
        End If

    Case "B1064"

        If X < 250 Or X = 250 Then
        Init = (0.05 * X ^ 2) + (8.254 * X) - 55.86
        ElseIf X > 250 And (X < 890 Or X = 890) Then
        Init = (0.017 * X ^ 2) + (22.12 * X) - 1710
        ElseIf X > 890 And (X < 1520 Or X = 1520) Then
        Init = (0.005 * X ^ 2) + (40.42 * X) - 8520
        ElseIf X > 1520 And (X < 1930 Or X = 1930) Then
        Init = (53.83 * X) - 17695
        ElseIf X > 1930 And (X < 2330 Or X = 2330) Then
        Init = (48.14 * X) - 6653
        ElseIf X > 2330 And (X < 2420 Or X = 2420) Then
        Init = (-0.023 * X ^ 2) + (156.6 * X) - 134852
        ElseIf X > 2420 And (X < 2850 Or X = 2850) Then
        Init = (-0.02 * X ^ 2) + (139.5 * X) - 111523
        Else
        Init = (-0.055 * X ^ 2) + (338.2 * X) - 393783
        End If

        If Y < 250 Or Y = 250 Then
        Fin = (0.05 * Y ^ 2) + (8.254 * Y) - 55.86
        ElseIf Y > 250 And (Y < 890 Or Y = 890) Then
        Fin = (0.017 * Y ^ 2) + (22.12 * Y) - 1710
        ElseIf Y > 890 And (Y < 1520 Or Y = 1520) Then
        Fin = (0.005 * Y ^ 2) + (40.42 * Y) - 8520
        ElseIf Y > 1520 And (Y < 1930 Or Y = 1930) Then
        Fin = (53.83 * Y) - 17695
        ElseIf Y > 1930 And (Y < 2330 Or Y = 2330) Then
        Fin = (48.14 * Y) - 6653
        ElseIf Y > 2330 And (Y < 2420 Or Y = 2420) Then
        Fin = (-0.023 * Y ^ 2) + (156.6 * Y) - 134852
        ElseIf Y > 2420 And (Y < 2850 Or Y = 2850) Then
        Fin = (-0.02 * Y ^ 2) + (139.5 * Y) - 111523
        Else
        Fin = (-0.055 * Y ^ 2) + (338.2 * Y) - 393783
        End If

    Case "B1065"

        If X < 260 Or X = 260 Then
        Init = (0.051 * X ^ 2) + (8.502 * X) - 57.54
        ElseIf X > 260 And (X < 490 Or X = 490) Then
        Init = (0.017 * X ^ 2) + (23.09 * X) - 1803
        ElseIf X > 490 And (X < 1080 Or X = 1080) Then
        Init = (0.011 * X ^ 2) + (31.28 * X) - 4361
        ElseIf X > 1080 And (X < 1920 Or X = 1920) Then
        Init = (55.16 * X) - 17662
        ElseIf X > 1920 And (X < 2030 Or X = 2030) Then
        Init = (-0.009 * X ^ 2) + (91.55 * X) - 54699
        ElseIf X > 2030 And (X < 2150 Or X = 2150) Then
        Init = (-0.011 * X ^ 2) + (100.4 * X) - 64876
        ElseIf X > 2150 And (X < 2630 Or X = 2630) Then
        Init = (-0.013 * X ^ 2) + (106.1 * X) - 68138
        Else
        Init = (-0.035 * X ^ 2) + (222.7 * X) - 223072
        End If

        If Y < 260 Or Y = 260 Then
        Fin = (0.051 * Y ^ 2) + (8.502 * Y) - 57.54
        ElseIf Y > 260 And (Y < 490 Or Y = 490) Then
        Fin = (0.017 * Y ^ 2) + (23.09 * Y) - 1803
        ElseIf Y > 490 And (Y < 1080 Or Y = 1080) Then
        Fin = (0.011 * Y ^ 2) + (31.28 * Y) - 4361
        ElseIf Y > 1080 And (Y < 1920 Or Y = 1920) Then
        Fin = (55.16 * Y) - 17662
        ElseIf Y > 1920 And (Y < 2030 Or Y = 2030) Then
        Fin = (-0.009 * Y ^ 2) + (91.55 * Y) - 54699
        ElseIf Y > 2030 And (Y < 2150 Or Y = 2150) Then
        Fin = (-0.011 * Y ^ 2) + (100.4 * Y) - 64876
        ElseIf Y > 2150 And (Y < 2630 Or Y = 2630) Then
        Fin = (-0.013 * Y ^ 2) + (106.1 * Y) - 68138
        Else
        Fin = (-0.035 * Y ^ 2) + (222.7 * Y) - 223072
        End If

    Case "B1066"

        If X < 320 Or X = 320 Then
        Init = (0.043 * X ^ 2) + (9.211 * X) - 81.9
        ElseIf X > 320 And (X < 940 Or X = 940) Then
        Init = (0.015 * X ^ 2) + (23.35 * X) - 1746
        ElseIf X > 940 And (X < 1320 Or X = 1320) Then
        Init = (0.001 * X ^ 2) + (47.78 * X) - 12402
        ElseIf X > 1320 And (X < 1780 Or X = 1780) Then
        Init = (52.18 * X) - 16183
        ElseIf X > 1780 And (X < 2190 Or X = 2190) Then
        Init = (-0.007 * X ^ 2) + (76.72 * X) - 38077
        ElseIf X > 2190 And (X < 2720 Or X = 2720) Then
        Init = (-0.017 * X ^ 2) + (119.5 * X) - 84058
        Else
        Init = (-0.054 * X ^ 2) + (319.7 * X) - 355117
        End If

        If Y < 320 Or Y = 320 Then
        Fin = (0.043 * Y ^ 2) + (9.211 * Y) - 81.9
        ElseIf Y > 320 And (Y < 940 Or Y = 940) Then
        Fin = (0.015 * Y ^ 2) + (23.35 * Y) - 1746
        ElseIf Y > 940 And (Y < 1320 Or Y = 1320) Then
        Fin = (0.001 * Y ^ 2) + (47.78 * Y) - 12402
        ElseIf Y > 1320 And (Y < 1780 Or Y = 1780) Then
        Fin = (52.18 * Y) - 16183
        ElseIf Y > 1780 And (Y < 2190 Or Y = 2190) Then
        Fin = (-0.007 * Y ^ 2) + (76.72 * Y) - 38077
        ElseIf Y > 2190 And (Y < 2720 Or Y = 2720) Then
        Fin = (-0.017 * Y ^ 2) + (119.5 * Y) - 84058
        Else
        Fin = (-0.054 * Y ^ 2) + (319.7 * Y) - 355117
        End If

    Case "B1067"

        If X < 270 Or X = 270 Then
        Init = (0.049 * X ^ 2) + (8.24 * X) - 55.8
        ElseIf X > 270 And (X < 750 Or X = 750) Then
        Init = (0.018 * X ^ 2) + (21.35 * X) - 1573
        ElseIf X > 750 And (X < 1460 Or X = 1460) Then
        Init = (0.007 * X ^ 2) + (35.16 * X) - 5802
        ElseIf X > 1460 And (X < 1790 Or X = 1790) Then
        Init = (-0.003 * X ^ 2) + (63.09 * X) - 25657
        ElseIf X > 1790 And (X < 2290 Or X = 2290) Then
        Init = (-0.008 * X ^ 2) + (80.73 * X) - 41599
        ElseIf X > 2290 And (X < 2430 Or X = 2430) Then
        Init = (-0.018 * X ^ 2) + (127.9 * X) - 97639
        ElseIf X > 2430 And (X < 2800 Or X = 2800) Then
        Init = (-0.024 * X ^ 2) + (155.2 * X) - 128892
        ElseIf X > 2800 And (X < 2870 Or X = 2870) Then
        Init = (-0.085 * X ^ 2) + (498.1 * X) - 611183
        Else
        Init = 118.13
        End If

        If Y < 270 Or Y = 270 Then
        Fin = (0.049 * Y ^ 2) + (8.24 * Y) - 55.8
        ElseIf Y > 270 And (Y < 750 Or Y = 750) Then
        Fin = (0.018 * Y ^ 2) + (21.35 * Y) - 1573
        ElseIf Y > 750 And (Y < 1460 Or Y = 1460) Then
        Fin = (0.007 * Y ^ 2) + (35.16 * Y) - 5802
        ElseIf Y > 1460 And (Y < 1790 Or Y = 1790) Then
        Fin = (-0.003 * Y ^ 2) + (63.09 * Y) - 25657
        ElseIf Y > 1790 And (Y < 2290 Or Y = 2290) Then
        Fin = (-0.008 * Y ^ 2) + (80.73 * Y) - 41599
        ElseIf Y > 2290 And (Y < 2430 Or Y = 2430) Then
        Fin = (-0.018 * Y ^ 2) + (127.9 * Y) - 97639
        ElseIf Y > 2430 And (Y < 2800 Or Y = 2800) Then
        Fin = (-0.024 * Y ^ 2) + (155.2 * Y) - 128892
        ElseIf Y > 2800 And (Y < 2870 Or Y = 2870) Then
        Fin = (-0.085 * Y ^ 2) + (498.1 * Y) - 611183
        Else
        Fin = 118.13
        End If

    Case Else

        If X < 290 Or X = 290 Then
        Init = (0.054 * X ^ 2) + (11.22 * X) - 99.38
        ElseIf X > 290 And (X < 600 Or X = 600) Then
        Init = (0.02 * X ^ 2) + (27.66 * X) - 2296
        ElseIf X > 600 And (X < 1270 Or X = 1270) Then
        Init = (0.012 * X ^ 2) + (37.98 * X) - 5204
        ElseIf X > 1270 And (X < 2060 Or X = 2060) Then
        Init = (0.001 * X ^ 2) + (63.13 * X) - 19418
        ElseIf X > 2060 And (X < 2190 Or X = 2190) Then
        Init = (-0.011 * X ^ 2) + (113.2 * X) - 72091
        ElseIf X > 2190 And (X < 2750 Or X = 2750) Then
        Init = (-0.014 * X ^ 2) + (124.4 * X) - 82627
        ElseIf X > 2750 And (X < 2840 Or X = 2840) Then
        Init = (-0.031 * X ^ 2) + (220.4 * X) - 218451
        Else
        Init = (-0.046 * X ^ 2) + (304.9 * X) - 337992
        End If

        If Y < 290 Or Y = 290 Then
        Fin = (0.054 * Y ^ 2) + (11.22 * Y) - 99.38
        ElseIf Y > 290 And (Y < 600 Or Y = 600) Then
        Fin = (0.02 * Y ^ 2) + (27.66 * Y) - 2296
        ElseIf Y > 600 And (Y < 1270 Or Y = 1270) Then
        Fin = (0.012 * Y ^ 2) + (37.98 * Y) - 5204
        ElseIf Y > 1270 And (Y < 2060 Or Y = 2060) Then
        Fin = (0.001 * Y ^ 2) + (63.13 * Y) - 19418
        ElseIf Y > 2060 And (Y < 2190 Or Y = 2190) Then
        Fin = (-0.011 * Y ^ 2) + (113.2 * Y) - 72091
        ElseIf Y > 2190 And (Y < 2750 Or Y = 2750) Then
        Fin = (-0.014 * Y ^ 2) + (124.4 * Y) - 82627
        ElseIf Y > 2750 And (Y < 2840 Or Y = 2840) Then
        Fin = (-0.031 * Y ^ 2) + (220.4 * Y) - 218451
        Else
        Fin = (-0.046 * Y ^ 2) + (304.9 * Y) - 337992
        End If

End Select

débit = (((Fin - Init) * dens * (10 ^ -3)) / ((rav - ron) * 24))

Sheets("Cigares").Range("J8").Value = débit

Sheets("cigares").Range("A12").Value = Init
Sheets("Cigares").Range("A13").Value = Fin

End Sub

Bonsoir

Il faut déprotéger la feuille au début de la macro et la reprotéger à la fin

Sub Cigares()
Sheets("cigares").Unprotect Password:="Ton Mot de Passe"

......
......

Sheets("cigares").Protect Password:="Ton Mot de Passe"
ActiveSheets.Protect

Amicalement

Nad

Merci Dan pour ta réponse claire et précise.

Imaginons maintenant que je veuille empêcher l'utilisateur d'entrer des valeurs qui poserait problème, comment pourrai je faire pour faire afficher un message d'erreur. L'action se passera dans l'instruction après le End Select: Je voudrais mettre l'affichage du message d'erreur dans une structure condition:

If ran<>ron then
débit = (((Fin - Init) * dens * (10 ^ -3)) / ((rav - ron) * 24))
Else
'Affichage message d'erreur: rav=ron'
Rechercher des sujets similaires à "macro executant fois feuille protegee"