Vba et protection de feuille

[Résolu/Fermé]
Signaler
Messages postés
87
Date d'inscription
mardi 1 août 2017
Statut
Membre
Dernière intervention
20 juin 2021
-
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
-
Bonjour,

Je rencontre un problème lors de la mise sous protection de ma feuille excel qui dispose de vba.

Ci-dessous le message:


Ci-dessous le fichier excel en question
https://www.cjoint.com/c/GKyiRHkKj8j

Merci pour votre aide

3 réponses

Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
643
Bonjour,

La propriété "Hidden" ne peut pas s'appliquer à une plage standard. La plage doit être composée soit de colonnes, soit de lignes.
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
643 >
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020

Bonsoir gbinforme,

Effectivement. J'avais lu trop rapidement et j'ai fait une nouvelle réponse il y a une 1/2 heure..
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 536 >
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020

Bonjour thev,
J'avais vu mais tes modifications ne servent à rien car en fait il suffit lors de la protection de la feuille d'autoriser la modification des lignes : pourquoi manier le marteau et la râpe quand le petit tournevis suffit ?
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
643 >
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020

Je pense qu'une simplification et une meilleure lisibilité du code ne sont jamais inutiles.
Je ne me serais certes pas livré à cet exercice si j'avais fait la bonne réponse dès le départ, mais une fois fait, autant le communiquer.
Mais qui peut se vanter de faire toujours la réponse adéquate dès le début ?
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 536 >
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020

Bonsoir thev,

Mais qui peut se vanter de faire toujours la réponse adéquate
Tout à fait d'accord !
Mon intervention n'avait pour but que d'essayer de faire progresser la réflexion et comme le réflexe habituel en macro c'est le déprotège/reprotège, je proposais une piste moins coûteuse en traitement et qui est souvent ignorée.
D'autre part, en mettant le mot de passe de protection dans le code, c'est l'offrir sur un plateau aux utilisateurs pas trop fainéants et leur permettre toutes modifications même celles que l'on pensait protégées.
Si les protections peuvent être utiles, comme par exemple pour faciliter la saisie, elles sont par contre souvent illusoires car facilement mises en échec.

Bonne semaine à toi.
Messages postés
87
Date d'inscription
mardi 1 août 2017
Statut
Membre
Dernière intervention
20 juin 2021

Merci

Sur quelle ligne?

Sub Zonecombinée1_QuandChangement()
If Range("C12") = 2 Then Rows("16:16").EntireRow.Hidden = True: ActiveSheet.Shapes("ComboBox1").Visible = False: Rows("17:17").EntireRow.Hidden = True: Rows("19:19").EntireRow.Hidden = True: Rows("14:14").EntireRow.Hidden = False: Rows("41:41").EntireRow.Hidden = True: Rows("43:43").EntireRow.Hidden = True: Rows("39:39").EntireRow.Hidden = False
If Range("C12") = 3 Then Rows("14:14").EntireRow.Hidden = True: Rows("19:19").EntireRow.Hidden = True: Rows("16:16").EntireRow.Hidden = False: ActiveSheet.Shapes("ComboBox1").Top = 250: ActiveSheet.Shapes("ComboBox1").Visible = True: Rows("17:17").EntireRow.Hidden = False: Rows("39:39").EntireRow.Hidden = True: Rows("43:43").EntireRow.Hidden = True: Rows("41:41").EntireRow.Hidden = False
If Range("C12") = 4 Then Rows("16:16").EntireRow.Hidden = True: ActiveSheet.Shapes("ComboBox1").Visible = False: Rows("17:17").EntireRow.Hidden = True: Rows("14:14").EntireRow.Hidden = True: Rows("19:19").EntireRow.Hidden = False: Rows("39:39").EntireRow.Hidden = True: Rows("41:41").EntireRow.Hidden = True: Rows("43:43").EntireRow.Hidden = False
End Sub
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
643
Sur toutes les lignes du même type, ce qui simplifiera votre code.
1- la propriété Rows s'utilise normalement avec le numéro de ligne
Rows(16) Rows(17) .....
2- la propriété EntireRow est inutile car Rows(i) correspond déjà à une ligne entière.

Il serait bon de préciser la feuille à laquelle est rattaché votre code
ci-dessous code de votre procédure simplifié et indenté

Sub Zonecombinée1_QuandChangement()

With Sheets("AVANCE")
If .Range("C12") = 2 Then
.Shapes("ComboBox1").Visible = False
.Rows(16).Hidden = True: .Rows(17).Hidden = True: .Rows(19).Hidden = True: .Rows(41).Hidden = True: .Rows(43).Hidden = True
.Rows(14).Hidden = False: .Rows(39).Hidden = False
End If
If .Range("C12") = 3 Then
.Shapes("ComboBox1").Top = 250: .Shapes("ComboBox1").Visible = True
.Rows(14).Hidden = True: .Rows(19).Hidden = True: .Rows(39).Hidden = True: .Rows(43).Hidden = True
.Rows(16).Hidden = False: .Rows(17).Hidden = False: .Rows(41).Hidden = False
End If
If .Range("C12") = 4 Then
.Shapes("ComboBox1").Visible = False
.Rows(16).Hidden = True: .Rows(17).Hidden = True: .Rows(14).Hidden = True: .Rows(39).Hidden = True: .Rows(41).Hidden = True
.Rows(19).Hidden = False: .Rows(43).Hidden = False
End If
End With

End Sub
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
643
Bonsoir,

En parcourant à nouveau le sujet, je m'aperçois avoir oublié de traiter l'aspect protection de la feuille.
En supposant que le mot de passe est à blanc (voir constante mot_de_passe)
Sub Zonecombinée1_QuandChangement()
Const mot_de_passe As String = ""


With Sheets("AVANCE")
.Unprotect mot_de_passe

If .Range("C12") = 2 Then
.Shapes("ComboBox1").Visible = False
.Rows(16).Hidden = True: .Rows(17).Hidden = True: .Rows(19).Hidden = True: .Rows(41).Hidden = True: .Rows(43).Hidden = True
.Rows(14).Hidden = False: .Rows(39).Hidden = False
End If
If .Range("C12") = 3 Then
.Shapes("ComboBox1").Top = 250: .Shapes("ComboBox1").Visible = True
.Rows(14).Hidden = True: .Rows(19).Hidden = True: .Rows(39).Hidden = True: .Rows(43).Hidden = True
.Rows(16).Hidden = False: .Rows(17).Hidden = False: .Rows(41).Hidden = False
End If
If .Range("C12") = 4 Then
.Shapes("ComboBox1").Visible = False
.Rows(16).Hidden = True: .Rows(17).Hidden = True: .Rows(14).Hidden = True: .Rows(39).Hidden = True: .Rows(41).Hidden = True
.Rows(19).Hidden = False: .Rows(43).Hidden = False
End If

.Protect mot_de_passe
End With

End Sub
Messages postés
87
Date d'inscription
mardi 1 août 2017
Statut
Membre
Dernière intervention
20 juin 2021

Bonjour,

Parfait, un grand merci