Vba et protection de feuille

Résolu/Fermé
marckherv Messages postés 87 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 20 juin 2021 - 24 nov. 2017 à 09:44
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 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
https://www.cjoint.com/c/GKyiRHkKj8j

Merci pour votre aide

3 réponses

thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681
24 nov. 2017 à 10:48
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.
0
marckherv Messages postés 87 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 20 juin 2021
24 nov. 2017 à 11:01
Merci

C'est-à-dire?

Que dois-je faire?
0
thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681 > marckherv Messages postés 87 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 20 juin 2021
Modifié le 24 nov. 2017 à 11:17
Corriger cette instruction
Rows("16:16").EntireRow.Hidden
correction
Rows(16).Hidden
ou
Range("16:16").Hidden
0
marckherv Messages postés 87 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 20 juin 2021
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
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684 > thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024
25 nov. 2017 à 21:49
Bonsoir thev,

Les 3 lignes que tu as mis sont toutes 3 fonctionnelles
Rows("16:16").EntireRow.Hidden = True
Rows(16).Hidden = True
Range("16:16").Hidden = True

VBA autorise bien des approximations !
Le problème de marckherv n'est dû qu'à la protection de la feuille qui interdit le masquage de lignes : il suffit de l'autoriser lors de la protection de la feuille sans toucher le code.
0
thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681 > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
Modifié le 25 nov. 2017 à 22:05
Bonsoir gbinforme,

Effectivement. J'avais lu trop rapidement et j'ai fait une nouvelle réponse il y a une 1/2 heure..
0
thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681
Modifié le 24 nov. 2017 à 19:38
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
0
thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681
25 nov. 2017 à 21:25
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
0
marckherv Messages postés 87 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 20 juin 2021
26 nov. 2017 à 09:04
Bonjour,

Parfait, un grand merci
0