Excel VBA - Problème exécution de macro

Résolu/Fermé
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 - 1 avril 2010 à 13:13
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 - 1 avril 2010 à 19:07
Bonjour à tous,

J'ai un soucis d'exécution de macro à l'ouverture de mon fichier Excel.

Voici une partie de ma macro écrite dans ThisWorkbook avec les instructions qui posent problème.

Private Sub Workbook_Open()

MsgBox "Bla bla bla", vbOKOnly, "Programmation des tartempions - Auteur: inconnu"

Application.ScreenUpdating = False

ActiveWorkbook.Protect Password:="xxxx", Structure:=True, Windows:=False


Problème N°1
' Réinitialisation des couleurs grises des fonds et des caractères de la zone F4 à G153
Sheets("Parc").Unprotect Password:="xxxx"
On Error Resume Next
Sheets("Parc").Range("F4:G153").Interior.ColorIndex = 15
Sheets("Parc").Range("F4:G153").Font.ColorIndex = 15
Sheets("Parc").Range("B4").Select

Sheets("Parc").Protect Password:="xxxx", userInterfaceOnly:=True, _
AllowFormattingCells:=True, AllowFormattingRows:=True

Problème N°2
Sheets("Prog").Unprotect Password:="xxxx"
' Calcul de la page pour mise à jour des cellules avant le verrouillage
Worksheets("Prog").Calculate
' Vérouillage des cellules non protégées du mois précédent
' Récupération des numéros de colonnes du mois précédent
Dim ColEndT As Byte
Dim ColEndL As Byte
ColEndT = Range("T170").Value
ColEndL = Range("CX170").Value
' Ligne 10 correspond à la première ligne de la zone de saisie
' Ligne 160 correspond à la dernière ligne de la zone de saisie
' Colonne 23 correspond à la colonne W de l'année 2009 ............
' Colonne 105 correspond à la colonne DA de l'année 2009 ............
Range(Cells(10, 23), Cells(160, ColEndT)).Locked = True
Range(Cells(10, 105), Cells(160, ColEndL)).Locked = True

Sheets("Prog").Protect Password:="xxxx", userInterfaceOnly:=True

Application.ScreenUpdating = True

End Sub


Problème N°1:
Si je supprime l'instruction On Error Resume Next et que j'ouvre mon classeur, j'ai une erreur d'exécution 1004 "la méthode Select de la classe Range a échoué" et la routine s'arrête. Il y a donc un problème avec les lignes suivantes, mais je ne vois pas où.

Problème N°2:
En fonction du mois en cours, je verrouille les cellules des mois précédents afin d'éviter qu'elles soient modifiées. Nous sommes le premier du mois et les cellules correspondant au mois de mars ne sont pas verrouillées à l'ouverture du fichier. Pour info, ColEndT et ColEndL sont des valeurs qui n'excèdent pas 255.

Par contre, si je lance l'exécution de ces macros une fois le fichier ouvert (à partir de VB editor), elles fonctionnent parfaitement !

Je ne comprends pas pourquoi des instructions qui marchent bien une fois le fichier ouvert, ne fonctionnent pas à l'ouverture de ce même fichier. Quelqu'un a t'il une solution à proposer ?

Je suis sous Excel 2003.

Merci d'avance pour votre aide

A voir également:

1 réponse

mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 354
Modifié par mic13710 le 1/04/2010 à 19:10
J'ai trouvé finalement,

En fait la macro bloquait non pas au problème n°1 mais au niveau du problème n°2, ce qui provoquait l'erreur 1004 en l'absence de l'instruction On Error Resume Next.

En fait, je ne sélectionnais pas le feuille "Prog" avant d'effectuer les modifs de la feuille, ce qui provoquait l'erreur de range.

La macro pour la feuille prog devient:

Sheets("Prog").Select
ActiveSheet.Unprotect
ActiveSheet.Calculate
Dim ColEndT As Byte
Dim ColEndL As Byte
ColEndT = Range("T170").Value
ColEndL = Range("CX170").Value
Range(Cells(10, 23), Cells(160, ColEndT)).Locked = True
Range(Cells(10, 105), Cells(160, ColEndL)).Locked = True
ActiveSheet.Protect, userInterfaceOnly:=True

Problème résolu
0