Vba et protection de feuille [Résolu]

marckherv 45 Messages postés mardi 1 août 2017Date d'inscription 1 décembre 2017 Dernière intervention - 24 nov. 2017 à 09:44 - Dernière réponse : gbinforme 14403 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 10 décembre 2017 Dernière intervention
- 26 nov. 2017 à 18:41
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
http://www.cjoint.com/c/GKyiRHkKj8j

Merci pour votre aide
Afficher la suite 
45Messages postés mardi 1 août 2017Date d'inscription 1 décembre 2017 Dernière intervention

12 réponses

Répondre au sujet
thev 1686 Messages postés lundi 7 avril 2008Date d'inscription 7 décembre 2017 Dernière intervention - 24 nov. 2017 à 10:48
0
Utile
8
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.
thev 1686 Messages postés lundi 7 avril 2008Date d'inscription 7 décembre 2017 Dernière intervention > gbinforme 14403 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 10 décembre 2017 Dernière intervention - 25 nov. 2017 à 22:03
Bonsoir gbinforme,

Effectivement. J'avais lu trop rapidement et j'ai fait une nouvelle réponse il y a une 1/2 heure..
gbinforme 14403 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 10 décembre 2017 Dernière intervention > thev 1686 Messages postés lundi 7 avril 2008Date d'inscription 7 décembre 2017 Dernière intervention - 26 nov. 2017 à 08:34
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 ?
thev 1686 Messages postés lundi 7 avril 2008Date d'inscription 7 décembre 2017 Dernière intervention > gbinforme 14403 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 10 décembre 2017 Dernière intervention - 26 nov. 2017 à 13:12
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 ?
gbinforme 14403 Messages postés lundi 18 octobre 2004Date d'inscriptionContributeurStatut 10 décembre 2017 Dernière intervention > thev 1686 Messages postés lundi 7 avril 2008Date d'inscription 7 décembre 2017 Dernière intervention - 26 nov. 2017 à 18:41
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.
marckherv 45 Messages postés mardi 1 août 2017Date d'inscription 1 décembre 2017 Dernière intervention - 24 nov. 2017 à 14:26
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
Commenter la réponse de thev
thev 1686 Messages postés lundi 7 avril 2008Date d'inscription 7 décembre 2017 Dernière intervention - Modifié par thev le 24/11/2017 à 19:38
0
Utile
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
Commenter la réponse de thev
thev 1686 Messages postés lundi 7 avril 2008Date d'inscription 7 décembre 2017 Dernière intervention - 25 nov. 2017 à 21:25
0
Utile
1
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
marckherv 45 Messages postés mardi 1 août 2017Date d'inscription 1 décembre 2017 Dernière intervention - 26 nov. 2017 à 09:04
Bonjour,

Parfait, un grand merci
Commenter la réponse de thev