J'ai réussi à écrire une macro excel pour protéger en même temps plusieurs feuilles en demandant un mot de passe, mais j'aimerais rajouter dans cette macro la possibilité de mettre un fond dans les cellules qui ne sont pas vérrouillées.
Avec la macro que j'ai écrite, la mise en forme est grisée.
Quelqu'un aurait-il la solution svp ?
Voilà ma macro :
Sub Protéger()
top:
pass = InputBox("Saisir le mot de passe SVP")
repass = InputBox("Confirmer le mot de passe SVP")
If Not (pass = repass) Then
MsgBox "Mot de passe incorrect"
GoTo top
End If
For i = 1 To Worksheets.Count
If Worksheets(i).ProtectContents = True Then GoTo oops
Next
For Each s In ActiveWorkbook.Worksheets
s.Protect Password:=pass
Next
Exit Sub
oops: MsgBox "Les feuilles sont protégées. Utiliser la macro pour les déprotéger svp."
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichD
Le 18/07/19 à 08:09, Chris64240 a écrit :
top: pass = InputBox("Saisir le mot de passe SVP") repass = InputBox("Confirmer le mot de passe SVP") If Not (pass = repass) Then MsgBox "Mot de passe incorrect" GoTo top End If For i = 1 To Worksheets.Count If Worksheets(i).ProtectContents = True Then GoTo oops Next For Each s In ActiveWorkbook.Worksheets s.Protect Password:=pass Next Exit Sub oops: MsgBox "Les feuilles sont protégées. Utiliser la macro pour les déprotéger svp." End Sub
Bonjour, Pour pouvoir modifier le format des cellules (couleur de fond des cellules), la feuille doit être déprotégée, et ce, même si les cellules ne sont pas verrouillées. Regarde l'aide de la méthode "SpecialCells" dans VBA. Si tu sais d'avance la condition pour colorer certaines cellules, tu peux utiliser ce qui suit. Attention, tu n'es pas obligé d'utiliser toutes ces lignes de code, c'est seulement pour te donner un exemple sur la manière de sélectionner un type de données particulier. Dans mon exemple, cela s'applique à toutes les cellules de la feuille de la plage de cellules utilisée qui remplit la condition que tu auras choisie. Évidemment, la feuille doit être déprotégée avant de procéder! Sinon, il te reste à déprotéger la feuille et boucler sur chacune des cellules (ou plage de cellules) pour modifier la couleur de fond et protéger la feuille à nouveau. '------------------------------------------- Sub test() Dim Sh As Worksheet For Each Sh In Worksheets With Sh .Unprotect "MotDePasse" ' si besion 'pour les cellules contenant du numérique .UsedRange.SpecialCells(xlCellTypeConstants, 1).Interior.Color = vbBlue 'Pour les cellules contenant du texte seulement .UsedRange.SpecialCells(xlCellTypeConstants, 2).Interior.Color = vbBlue 'On peut combiner les 2 de cette manière .UsedRange.SpecialCells(xlCellTypeConstants, 3).Interior.Color = vbBlue 'pour les cellules contenant des formules 'pour les cellules contenant du numérique .UsedRange.SpecialCells(xlCellTypeFormulas, 1).Interior.Color = vbBlue 'Pour les cellules contenant du texte seulement .UsedRange.SpecialCells(xlCellTypeFormulas, 2).Interior.Color = vbBlue 'On peut combiner les 2 de cette manière .UsedRange.SpecialCells(xlCellTypeFormulas, 3).Interior.Color = vbBlue 'pour les cellules vides totalement .UsedRange.SpecialCells(xlCellTypeBlanks).Interior.Color = vbBlue .Protect "MotDePasse" End With Next End Sub '-------------------------------------------
Le 18/07/19 à 08:09, Chris64240 a écrit :
top:
pass = InputBox("Saisir le mot de passe SVP")
repass = InputBox("Confirmer le mot de passe SVP")
If Not (pass = repass) Then
MsgBox "Mot de passe incorrect"
GoTo top
End If
For i = 1 To Worksheets.Count
If Worksheets(i).ProtectContents = True Then GoTo oops
Next
For Each s In ActiveWorkbook.Worksheets
s.Protect Password:=pass
Next
Exit Sub
oops: MsgBox "Les feuilles sont protégées. Utiliser la macro pour les déprotéger
svp."
End Sub
Bonjour,
Pour pouvoir modifier le format des cellules (couleur de fond des
cellules), la feuille doit être déprotégée, et ce, même si les cellules
ne sont pas verrouillées.
Regarde l'aide de la méthode "SpecialCells" dans VBA. Si tu sais
d'avance la condition pour colorer certaines cellules, tu peux utiliser
ce qui suit. Attention, tu n'es pas obligé d'utiliser toutes ces lignes
de code, c'est seulement pour te donner un exemple sur la manière de
sélectionner un type de données particulier. Dans mon exemple, cela
s'applique à toutes les cellules de la feuille de la plage de cellules
utilisée qui remplit la condition que tu auras choisie.
Évidemment, la feuille doit être déprotégée avant de procéder!
Sinon, il te reste à déprotéger la feuille et boucler sur chacune des
cellules (ou plage de cellules) pour modifier la couleur de fond et
protéger la feuille à nouveau.
'-------------------------------------------
Sub test()
Dim Sh As Worksheet
For Each Sh In Worksheets
With Sh
.Unprotect "MotDePasse" ' si besion
'pour les cellules contenant du numérique
.UsedRange.SpecialCells(xlCellTypeConstants, 1).Interior.Color
= vbBlue
'Pour les cellules contenant du texte seulement
.UsedRange.SpecialCells(xlCellTypeConstants, 2).Interior.Color
= vbBlue
'On peut combiner les 2 de cette manière
.UsedRange.SpecialCells(xlCellTypeConstants, 3).Interior.Color
= vbBlue
'pour les cellules contenant des formules
'pour les cellules contenant du numérique
.UsedRange.SpecialCells(xlCellTypeFormulas, 1).Interior.Color =
vbBlue
'Pour les cellules contenant du texte seulement
.UsedRange.SpecialCells(xlCellTypeFormulas, 2).Interior.Color =
vbBlue
'On peut combiner les 2 de cette manière
.UsedRange.SpecialCells(xlCellTypeFormulas, 3).Interior.Color =
vbBlue
'pour les cellules vides totalement
.UsedRange.SpecialCells(xlCellTypeBlanks).Interior.Color = vbBlue
.Protect "MotDePasse"
End With
Next
End Sub
'-------------------------------------------
top: pass = InputBox("Saisir le mot de passe SVP") repass = InputBox("Confirmer le mot de passe SVP") If Not (pass = repass) Then MsgBox "Mot de passe incorrect" GoTo top End If For i = 1 To Worksheets.Count If Worksheets(i).ProtectContents = True Then GoTo oops Next For Each s In ActiveWorkbook.Worksheets s.Protect Password:=pass Next Exit Sub oops: MsgBox "Les feuilles sont protégées. Utiliser la macro pour les déprotéger svp." End Sub
Bonjour, Pour pouvoir modifier le format des cellules (couleur de fond des cellules), la feuille doit être déprotégée, et ce, même si les cellules ne sont pas verrouillées. Regarde l'aide de la méthode "SpecialCells" dans VBA. Si tu sais d'avance la condition pour colorer certaines cellules, tu peux utiliser ce qui suit. Attention, tu n'es pas obligé d'utiliser toutes ces lignes de code, c'est seulement pour te donner un exemple sur la manière de sélectionner un type de données particulier. Dans mon exemple, cela s'applique à toutes les cellules de la feuille de la plage de cellules utilisée qui remplit la condition que tu auras choisie. Évidemment, la feuille doit être déprotégée avant de procéder! Sinon, il te reste à déprotéger la feuille et boucler sur chacune des cellules (ou plage de cellules) pour modifier la couleur de fond et protéger la feuille à nouveau. '------------------------------------------- Sub test() Dim Sh As Worksheet For Each Sh In Worksheets With Sh .Unprotect "MotDePasse" ' si besion 'pour les cellules contenant du numérique .UsedRange.SpecialCells(xlCellTypeConstants, 1).Interior.Color = vbBlue 'Pour les cellules contenant du texte seulement .UsedRange.SpecialCells(xlCellTypeConstants, 2).Interior.Color = vbBlue 'On peut combiner les 2 de cette manière .UsedRange.SpecialCells(xlCellTypeConstants, 3).Interior.Color = vbBlue 'pour les cellules contenant des formules 'pour les cellules contenant du numérique .UsedRange.SpecialCells(xlCellTypeFormulas, 1).Interior.Color = vbBlue 'Pour les cellules contenant du texte seulement .UsedRange.SpecialCells(xlCellTypeFormulas, 2).Interior.Color = vbBlue 'On peut combiner les 2 de cette manière .UsedRange.SpecialCells(xlCellTypeFormulas, 3).Interior.Color = vbBlue 'pour les cellules vides totalement .UsedRange.SpecialCells(xlCellTypeBlanks).Interior.Color = vbBlue .Protect "MotDePasse" End With Next End Sub '-------------------------------------------
MichD
En complément, Si tu veux boucler sur les cellules non verrouillées d'une feuille protégée pour modifier la couleur de fond, tu dois protéger la feuille ou les feuilles de cette manière.Attention, lorsque tu utilises le paramètre AllowFormattingCells:=True de la propriété "Protect", cela s'applique à toutes les cellules de la feuille, verrouillées ou non. Il n'y a pas une méthode qui permet de modifier les cellules seulement non verrouillées. C'est ce pour quoi je faisais les commentaires dans mon premier message. Il faut alors tester si le contenu de la cellule est protégé ou non un peu comme tu as fait dans ton exemple. Workshets("Feuil1").Protect Password:="toto", AllowFormattingCells:=True J'espère être plus claire! MichD
Bonjour, Pour pouvoir modifier le format des cellules (couleur de fond des cellules), la feuille doit être déprotégée, et ce, même si les cellules ne sont pas verrouillées. Regarde l'aide de la méthode "SpecialCells" dans VBA. Si tu sais d'avance la condition pour colorer certaines cellules, tu peux utiliser ce qui suit. Attention, tu n'es pas obligé d'utiliser toutes ces lignes de code, c'est seulement pour te donner un exemple sur la manière de sélectionner un type de données particulier. Dans mon exemple, cela s'applique à toutes les cellules de la feuille de la plage de cellules utilisée qui remplit la condition que tu auras choisie. Évidemment, la feuille doit être déprotégée avant de procéder! Sinon, il te reste à déprotéger la feuille et boucler sur chacune des cellules (ou plage de cellules) pour modifier la couleur de fond et protéger la feuille à nouveau. '------------------------------------------- Sub test() Dim Sh As Worksheet For Each Sh In Worksheets With Sh .Unprotect "MotDePasse" ' si besion 'pour les cellules contenant du numérique .UsedRange.SpecialCells(xlCellTypeConstants, 1).Interior.Color = vbBlue 'Pour les cellules contenant du texte seulement .UsedRange.SpecialCells(xlCellTypeConstants, 2).Interior.Color = vbBlue 'On peut combiner les 2 de cette manière .UsedRange.SpecialCells(xlCellTypeConstants, 3).Interior.Color = vbBlue 'pour les cellules contenant des formules 'pour les cellules contenant du numérique .UsedRange.SpecialCells(xlCellTypeFormulas, 1).Interior.Color = vbBlue 'Pour les cellules contenant du texte seulement .UsedRange.SpecialCells(xlCellTypeFormulas, 2).Interior.Color = vbBlue 'On peut combiner les 2 de cette manière .UsedRange.SpecialCells(xlCellTypeFormulas, 3).Interior.Color = vbBlue 'pour les cellules vides totalement .UsedRange.SpecialCells(xlCellTypeBlanks).Interior.Color = vbBlue .Protect "MotDePasse" End With Next End Sub '-------------------------------------------
En complément,
Si tu veux boucler sur les cellules non verrouillées d'une feuille
protégée pour modifier la couleur de fond, tu dois protéger la feuille
ou les feuilles de cette manière.Attention, lorsque tu utilises le
paramètre AllowFormattingCells:=True de la propriété "Protect", cela
s'applique à toutes les cellules de la feuille, verrouillées ou non.
Il n'y a pas une méthode qui permet de modifier les cellules seulement
non verrouillées. C'est ce pour quoi je faisais les commentaires dans
mon premier message. Il faut alors tester si le contenu de la cellule
est protégé ou non un peu comme tu as fait dans ton exemple.
Pour pouvoir modifier le format des cellules (couleur de fond des
cellules), la feuille doit être déprotégée, et ce, même si les cellules
ne sont pas verrouillées.
Regarde l'aide de la méthode "SpecialCells" dans VBA. Si tu sais
d'avance la condition pour colorer certaines cellules, tu peux utiliser
ce qui suit. Attention, tu n'es pas obligé d'utiliser toutes ces lignes
de code, c'est seulement pour te donner un exemple sur la manière de
sélectionner un type de données particulier. Dans mon exemple, cela
s'applique à toutes les cellules de la feuille de la plage de cellules
utilisée qui remplit la condition que tu auras choisie.
Évidemment, la feuille doit être déprotégée avant de procéder!
Sinon, il te reste à déprotéger la feuille et boucler sur chacune des
cellules (ou plage de cellules) pour modifier la couleur de fond et
protéger la feuille à nouveau.
'-------------------------------------------
Sub test()
Dim Sh As Worksheet
For Each Sh In Worksheets
With Sh
.Unprotect "MotDePasse" ' si besion
'pour les cellules contenant du numérique
.UsedRange.SpecialCells(xlCellTypeConstants, 1).Interior.Color
= vbBlue
'Pour les cellules contenant du texte seulement
.UsedRange.SpecialCells(xlCellTypeConstants, 2).Interior.Color
= vbBlue
'On peut combiner les 2 de cette manière
.UsedRange.SpecialCells(xlCellTypeConstants, 3).Interior.Color
= vbBlue
'pour les cellules contenant des formules
'pour les cellules contenant du numérique
.UsedRange.SpecialCells(xlCellTypeFormulas, 1).Interior.Color =
vbBlue
'Pour les cellules contenant du texte seulement
.UsedRange.SpecialCells(xlCellTypeFormulas, 2).Interior.Color =
vbBlue
'On peut combiner les 2 de cette manière
.UsedRange.SpecialCells(xlCellTypeFormulas, 3).Interior.Color =
vbBlue
'pour les cellules vides totalement
.UsedRange.SpecialCells(xlCellTypeBlanks).Interior.Color = vbBlue
.Protect "MotDePasse"
End With
Next
End Sub
'-------------------------------------------
En complément, Si tu veux boucler sur les cellules non verrouillées d'une feuille protégée pour modifier la couleur de fond, tu dois protéger la feuille ou les feuilles de cette manière.Attention, lorsque tu utilises le paramètre AllowFormattingCells:=True de la propriété "Protect", cela s'applique à toutes les cellules de la feuille, verrouillées ou non. Il n'y a pas une méthode qui permet de modifier les cellules seulement non verrouillées. C'est ce pour quoi je faisais les commentaires dans mon premier message. Il faut alors tester si le contenu de la cellule est protégé ou non un peu comme tu as fait dans ton exemple. Workshets("Feuil1").Protect Password:="toto", AllowFormattingCells:=True J'espère être plus claire! MichD
Bonjour, Pour pouvoir modifier le format des cellules (couleur de fond des cellules), la feuille doit être déprotégée, et ce, même si les cellules ne sont pas verrouillées. Regarde l'aide de la méthode "SpecialCells" dans VBA. Si tu sais d'avance la condition pour colorer certaines cellules, tu peux utiliser ce qui suit. Attention, tu n'es pas obligé d'utiliser toutes ces lignes de code, c'est seulement pour te donner un exemple sur la manière de sélectionner un type de données particulier. Dans mon exemple, cela s'applique à toutes les cellules de la feuille de la plage de cellules utilisée qui remplit la condition que tu auras choisie. Évidemment, la feuille doit être déprotégée avant de procéder! Sinon, il te reste à déprotéger la feuille et boucler sur chacune des cellules (ou plage de cellules) pour modifier la couleur de fond et protéger la feuille à nouveau. '------------------------------------------- Sub test() Dim Sh As Worksheet For Each Sh In Worksheets With Sh .Unprotect "MotDePasse" ' si besion 'pour les cellules contenant du numérique .UsedRange.SpecialCells(xlCellTypeConstants, 1).Interior.Color = vbBlue 'Pour les cellules contenant du texte seulement .UsedRange.SpecialCells(xlCellTypeConstants, 2).Interior.Color = vbBlue 'On peut combiner les 2 de cette manière .UsedRange.SpecialCells(xlCellTypeConstants, 3).Interior.Color = vbBlue 'pour les cellules contenant des formules 'pour les cellules contenant du numérique .UsedRange.SpecialCells(xlCellTypeFormulas, 1).Interior.Color = vbBlue 'Pour les cellules contenant du texte seulement .UsedRange.SpecialCells(xlCellTypeFormulas, 2).Interior.Color = vbBlue 'On peut combiner les 2 de cette manière .UsedRange.SpecialCells(xlCellTypeFormulas, 3).Interior.Color = vbBlue 'pour les cellules vides totalement .UsedRange.SpecialCells(xlCellTypeBlanks).Interior.Color = vbBlue .Protect "MotDePasse" End With Next End Sub '-------------------------------------------