Bonjour,
J'ai commencé à utiliser le vba depuis hier, et j'ai des soucis pour faire fonctionner une macro sousExcel
- Objectif principal:
Verrouiller des colonnes cibles par mot de passe à la fermeture d'un document Excel. (j'y suis parvenu tout va bien )
- Objectif secondaire:
L'activer sous condition
Module de verrouillage:
Sub FERMETURE_VERROUILLER()
'Sélection de toutes les cellules
Cells.Select
'Déverrouillage de toutes les cellules
Selection.Locked = False
Selection.FormulaHidden = False
'Sélection des colonnes A,B,D,E,F,G,H,I
Range("A:B,D:I" ).Select
Range("D1" ).Activate
'Verrouiller le contenu sélectionné
Selection.Locked = True
Selection.FormulaHidden = False
'Protéger la feuille active par un mot de passe
ActiveSheet.Protect Password:="test ", DrawingObjects:=True, Contents:=True, Scenarios:=True
'Sélection de la case A1 avant fermeture (pour ne pas que à l'ouverture les colonnes soient toujours sélectionnées et que ce soit moche)
Range("A1" ).Select
End Sub
("ne vous inquiéter pas je protègerai le contenu de ma macro donc pas de ricanement en précisant que protéger un contenu en mettant un mot de passe si facilement accessible tu te fatigues pour rien^^" )
Modules pour ordonner l'activation de la macro à la fermeture du fichier:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
FERMETURE_VERROUILLER
End Sub
Donc jusque là tout va bien, j'ai ma macro qui s'active à la fermeture du document me mettant un mot de passe sur la protection des colonnes que je veux protéger...
Le problème est que si le fichier n'a pas été déverrouillé, j'ai ce message: "impossible de définir la propriété locked de la classe range". En effet le script tente sans utiliser de mot de passe de déverrouiller des cellules.
(Cf 'Sélection de toutes les cellules
Cells.Select
'Déverrouillage de toutes les cellules
Selection.Locked = False
Selection.FormulaHidden = False)
Pour résoudre ce problème j'ai entrepris d'ajouter à mon système un macro conditionnelle pour définir la condition suivante:
Si les colonnes sélectionnée sont déjà verrouillées alors
ne pas activer la Macro
sinon activer la Macro
En gros j'ai essayer un truc dans le genre mais le résultat est néan .
Sub FERMETURE_CONDITIONNELLE()
'
' FERMETURE_CONDITIONNELLE Macro
' Macro enregistrée le 13/03/2009
'
'Si les colonnes A,B,D,E,F,G,H,I sont verrouillées alors
Range("A:B,D:I" ).Select
If Selection.Locked = True Then
'Exécuter la Macro
FERMETURE_SIMPLE
'Sinon
Else
'Exécuter la Macro
FERMETURE_VERROUILLER
End If
End Sub
J'ai testé plein d'autre syntaxe mais qui ne fonctionne pas. Et étant donné que ma demande est assez spécifique je ne trouve pas d'infos sur les syntaxes de condition à appliquer sur des paramètres (tel que locker ou unlocker), c'est pourquoi je fais appel à vous .
Donc je formule ma demande clairement: connaissez-vous la syntaxe correcte pour ordonner:
Si les colonnes présélectionnées sont verrouillées alors
activer la Macro1
Sinon
activer la Macro2
Je vous remercie d'avance pour les réponses.:hello:
Message édité par eXos'Legend le 16-03-2009 à 13:04:24
---------------
@+