Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/11/2011, 10h59   #1
Invité régulier
 
Inscription : novembre 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 28
Points : 5
Points : 5
Par défaut L'utilisation de UserInterfaceOnly ne permet pas l'execution de macro filtre

Bonjour a Tous,

Je suis debutant avec VBA. Mon probleme est le suivant:

J'ai des boutons lies a des macro qui permetent de filtrer verticalement et horizontalement certain ranges sur ma feuille excel. En protegeant ma feuille et meme en utilisant le code que j'ai trouve sur tout les forums
Code :
Activesheet.protect UserInterfaceOnly:=True
Mes macro ne marchent pas et j'ai un msg d'erreur disant:
Citation:
Unable to set the hidden property of the range class
Pour plus de clarte en PJ un fichier simplifie pour ceux qui voudront m'aider a resoudre ce casse tete

Merci d'avance
marama12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 11h07   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Regarde tous les paramètres de la méthode Protect


Code :
1
2
3
4
    Worksheets("Feuil1").Protect UserInterfaceOnly:=True, DrawingObjects:=True, _
        Contents:=True, Scenarios:=True, AllowFormattingCells:=True, _
        AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowSorting:=True, _
        AllowFiltering:=True
Edit:
La protection n'est pas appliquée si les changements se font par code

__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/11/2011, 11h12   #3
Invité régulier
 
Inscription : novembre 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 28
Points : 5
Points : 5
Peux tu stp m'indiquer comment deproteger avant chaque code et ou dois-je placer le tou d'un module ou bien dans Worksheets or Workbook?

Merci
marama12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 11h17   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
J'ai édité mon post, j'avais dis une bétise.
par contre Userinterfaceonly=true protège seulement les modifications opérées par l'utilisateur (et pas par macro)

Poste ici l'une de tes macro qui pose problème.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/11/2011, 11h21   #5
Invité régulier
 
Inscription : novembre 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 28
Points : 5
Points : 5
Voici le type de macro qui me pose probleme

Code :
1
2
3
4
5
Sub EM2()
Range("EMBB:EMEE").EntireRow.Hidden = False
Range("CVMBB:cvmee").EntireRow.Hidden = True
Range("IHCBB:RESPEE").EntireRow.Hidden = True
End Sub
cette macro permet d'afficher uniquement un certain nombre de lignes et en cache d'autres
marama12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 11h23   #6
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
C'est quoi EMBB et EMEE?

La procédure fonctionne si tu enlève la protection de la feuille?
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/11/2011, 11h28   #7
Invité régulier
 
Inscription : novembre 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 28
Points : 5
Points : 5
ce sont des references que je donne a mes cellules pour definir le range et pour que quand il y a ajout de cellules le bouton associe a cette macro fonctionne tjrs.

Quand j enleve la protection tout fonctionne
marama12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 11h33   #8
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bon j'ai testé ceci sans problème (j'ai ajouté la feuille à laquelle se rapporte la protection et les plages)
J'ai nommé 2 cellules EMBB et EMEE dans Feuil1

Code :
1
2
3
4
5
6
7
Sub EM2()
 
With ThisWorkbook.Worksheets("Feuil1")           'à adapter
    .Protect UserInterfaceOnly:=True
    .Range("EMBB:EMEE").EntireRow.Hidden = False
End With
End Sub
Bien sûr, pour ton cas, tu peux protéger la feuille Feuil1 une seule fois et non dans chaque procédure.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/11/2011, 11h40   #9
Invité régulier
 
Inscription : novembre 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 28
Points : 5
Points : 5
Désolé mais ça ne marche pas.

J'ai essaye de joindre un fichier simplifié mais je ne vois pas apparaître.

Est ce quelqu'un peut m'indiquer comment l'ajouter.
marama12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 11h54   #10
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Compresse le et mets le en PJ
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/11/2011, 12h58   #11
Invité régulier
 
Inscription : novembre 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 28
Points : 5
Points : 5
voila la PJ (le mot de passe c'est: Secret)

J'ai essaye ce code:

Code :
1
2
3
4
5
6
7
8
9
10
Sub PRO()
With ThisWorkbook.Worksheets("name of the worksheet")
    .protect UserInterFaceOnly:=True
    .Call "macro1" = False
End With
End Sub
 
Sub PROTECT1()
 
End Sub

Quand je l'active apartir de l'editeur vba il marche et le macro fonctionnent mais si je clique sur unprotect sheet la feuille et deverouille et en verouillant a nouveau les macro ne fonctionnent plus. la meme chose se produit quand je ferme le fichier et je le re-ouvre

Si quelqu'un a une idee c'est le moment de la partager.

Merci d'avance
Fichiers attachés
Type de fichier : zip testing.zip (80,4 Ko, 3 affichages)
marama12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 13h04   #12
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
1.
Code :
1
2
3
4
5
6
7
Private Sub Workbook_Open()
Dim wSheet As Worksheet
 
For Each wSheet In Worksheets
    wSheet.Protect Password:="Secret", UserInterFaceOnly:=True
Next wSheet
End Sub
2.
Code :
1
2
3
4
5
6
7
8
Sub EM1()
 
With ThisWorkbook.Worksheets("test")
    .Range("EMB:EME").EntireRow.Hidden = False
    .Range("CVMB:CVME").EntireRow.Hidden = True
    .Range("IHCB:RESPE1").EntireRow.Hidden = True
End With
End Sub
Les autres aussi


Edit
3. A revoir ce code
Code :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/11/2011, 14h52   #13
Invité régulier
 
Inscription : novembre 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 28
Points : 5
Points : 5
Merci mercatog, MAIS CA NE MARCHES PAS, je pense que je vais abondonne tous les forum sur les quels j'ai poste ce sujet n'ont pas de solution.
marama12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 15h07   #14
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
En début de chacun de tes modules (notamment celui ThisWorkbook) metsEt ce afin que tu sois obligé de définir toutes tes variables

Tu verras que tu as mis dans une ligne à partqui veut dire que tu as une variables nommée UserInterFaceOnly à qui tu affecte True.

Alors que si tu fais un F1 sur Protect, tu sauras qu'elle a plusieurs paramètres (dont UserInterFaceOnly)

Pour affecter une valeur à un paramètre d'une méthode, on utilise :=

D'où, il fallait mettre dans le code ThisWorkbook ce code (d'enregistrer le fichier, le fermer et le ré ouvrir)
Code :
1
2
3
4
5
6
7
Private Sub Workbook_Open()
Dim wSheet As Worksheet
 
For Each wSheet In Worksheets
    wSheet.Protect Password:="Secret", UserInterFaceOnly:=True
Next wSheet
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/11/2011, 15h41   #15
Invité régulier
 
Inscription : novembre 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 28
Points : 5
Points : 5
J'ai suivi ce que tu m'as recommande et ca ne marche tjrs pas j'ai ces msgs:
Images attachées
Type de fichier : jpg 11-11-2011 3-35-53 PM.jpg (13,8 Ko, 5 affichages)
Type de fichier : jpg 11-11-2011 3-34-58 PM.jpg (19,0 Ko, 5 affichages)
marama12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 15h54   #16
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bon, je ne sais pas ce que tu veux faire.
J'ai testé ton fichier suivant ces étapes:

1. J'ai ôté manuellement la protection de la feuille (ou de toutes les feuilles).

Toutes les feuilles sont donc déprotégées.

2. J'ai remplacé le code dans ThisWorkbook par celui-ci
Code :
1
2
3
4
5
6
7
Private Sub Workbook_Open()
Dim wSheet As Worksheet
 
For Each wSheet In Worksheets
    wSheet.Protect Password:="Secret", UserInterFaceOnly:=True
Next wSheet
End Sub
ps: ce code peut être simplifié si tu n'as qu'une seule feuille

3. J'ai enregistré le fichier

4. J'ai fermé le fichier

5. J'ai ouvert le fichier

Toutes les feuilles sont protégées par le mdp Secret
suite à l'exécution du code Wokbook_Open

6. Les macros fonctionnent sans problème.


PS: une remarque qui na pas de lien direct avec ton problème est d'écrire toutes tes procédures comme ceci
Code :
1
2
3
4
5
6
7
8
Sub EM1()
 
With ThisWorkbook.Worksheets("test")
    .Range("EMB:EME").EntireRow.Hidden = False
    .Range("CVMB:CVME").EntireRow.Hidden = True
    .Range("IHCB:RESPE1").EntireRow.Hidden = True
End With
End Sub
PS2: N'oublie pas de mettre en haut de chaque module pour imposer la déclaration de toutes les variables.

PS3: Plus clair que ça, je ne vois pas comment expliquer!
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/11/2011, 16h34   #17
Invité régulier
 
Inscription : novembre 2011
Messages : 28
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 28
Points : 5
Points : 5
Merci beaucoup maintenant ca marche.

Je pense que ce qyui fesait tout foire c'etait le fait que je n'avais pas deprotege toutes les feuilles.
marama12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h45.


 
 
 
 
Partenaires

Hébergement Web