Interdire figer/libérer les volets aux utilisateurs

MR71

XLDnaute Junior
Bonjour à tous. Je crise à chaque fois ! Mes utilisateurs libèrent les volets ! :D
Comment peut-on leur interdire ? Sans protéger la feuille..:confused:
Merci Pour votre réponse
 

Efgé

XLDnaute Barbatruc
Re : Interdire figer/libérer les volets aux utilisateurs

Bonjour MR71,
Peut être avec une macro qui se lance à chaque modification d'une cellule.
A mettre dans le code la feuille après avoir pris la bonne plage (ici A1:AA100) et la bonne cellule pour figer les volet (ici B2)
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'Merci Robert
If Not Application.Intersect(Target, Range("A1:AA100")) Is Nothing And Target.Count = 1 Then
    Range("B2").Select
    ActiveWindow.FreezePanes = True
End If
End Sub
Cordialement
 

Efgé

XLDnaute Barbatruc
Re : Interdire figer/libérer les volets aux utilisateurs

Une autre version plus transparente pour les utilisateurs:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:AA100")) Is Nothing And Target.Count = 1 Then
    Dim r As String
    r = Target.Address
    Range("B2").Activate
    ActiveWindow.FreezePanes = True
    Range(r).Offset(1, 0).Select
End If
End Sub
Cordialement
 

MR71

XLDnaute Junior
Re : Interdire figer/libérer les volets aux utilisateurs

Bonjour Efgé, Chez moi ça ne fonctionne pas ! J'ai déjà essayé une macro que j'ai trouvé dans le forum et ça n'a pas fonctioné ! Y-a-t-il un paramètre ?
J'ai office 2003 sous professionel 2003
Merci
 

MR71

XLDnaute Junior
Re : Interdire figer/libérer les volets aux utilisateurs

Efgé, Excusez-moi, ça fonctionne ! Mais je souhaitais le figer une bonne fois pour toute et que les utilisateurs ne puisse pas les libérer ! Moche pour les utilisateurs !
Merci
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Interdire figer/libérer les volets aux utilisateurs

Bonjour le fil, bonjour le forum,

Je ne vois pas de solution à ton problème car le fait de Libérér (ou Figer) les volets n'engendre pas d'événement... Passer, comme le propose Efgé, par l'événement Change ne me satisfait qu'à moité. Pour une fois Efgé je lui aurait préféré l'événement SelectionChange...

Peut-être le code ci-dessous mais il ne me satisfait pas non plus :
Code:
Private test As Boolean 'déclare la variable test
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'à chaque changement de la la cellule active
Dim cap As Range 'déclare la variable caa (Cellule Active au Départ)
 
If ActiveWindow.FreezePanes = True Then Exit Sub 'si les volets sont figés, sort de la procédure
If test = True Then Exit Sub 'si la variable test est vraie, sort de la procédure (évite la boucle)
 
test = True 'définit la variable test
Set ac = ActiveCell 'définit la cellule de départ
Range("E11").Select 'à adapter à ton cas
ActiveWindow.FreezePanes = True 'fige les volets par rapport à la cellule de ton choix
ac.Select 'sélectionne la cellule de départ
test = False 'reinitialise la variable test
End Sub
 

Efgé

XLDnaute Barbatruc
Re : Interdire figer/libérer les volets aux utilisateurs

Robert, je ne voudrais pas sembler te poursuivre mais là je ne comprend pas pourquoi tu réinitialise la variable test à False en fin de macro (je l'aurai remise à true) ni pourquoi tu l'initialise à True en début.
encore désolé de te questionner mais j'aimerais bien comprendre (maintenant j'ai bien saisi la problématique Worksheet_SelectionChange / Worksheet_Change).
Cordialement
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Interdire figer/libérer les volets aux utilisateurs

Bonjour le fil, bonjour le forum,

la macro agit chaque fois que la cellule active va changer Ok. Donc l'utilisateur bouge le curseur et la macro se déclenche une premiere fois... Pour figer les volets il me faut sélectionner une cellule de référence. Si je n'ai que ce code :
Code:
Private test As Boolean 'déclare la variable test
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'à chaque changement de la la cellule active
 
If ActiveWindow.FreezePanes = True Then Exit Sub 'si les volets sont figés, sort de la procédure
Range("E11").Select 'à adapter à ton cas
ActiveWindow.FreezePanes = True 'fige les volets par rapport à la cellule de ton choix
End Sub
l'utilisateur ne pourra plus sélectionner autre chose que E11...
pour permettre de sélectionner autre chose, j'enregistre le premier déplacement :
Code:
Dim cap As Range 'déclare la variable cap (Cellule Au Premier mouvement)
set cap = ActiveCell 'définit la variable cap
(au passage, je m'étais bien emmêlé dans les noms entre la déclaration et la définition...)
Ensuite je refige les volets mais pour cela il ne faut sélectionner E11, la macro se déclanche une seconde fois, puis sélectionner la cellule de départ cap, la macro se déclenche une troisième fois...

Pour éviter ça j'ai déclaré une bolléenne test au niveau module (surtout pas au niveau de la procédure car sinon elle se réinitialise à chaque boucle...)
Donc dès le début je dis si test = True Then Exit Sub. Au premier mouvement (test n'est pas initialisée donc = faux) le code passe...
là je définie test = True...
À la sélection de E11 cela relance la macro mais comme test = true elle sort de suite...
À la sélection de cap cela relance la macro mais pour la même raison elle sort de suite...
Ensuite, mon action est finie, je peux remettre à zéro la variable test = False...
Cela permet à la macro de refonctionner mais comme j'ai précisé que si les volets était figés elle sort de suite, elle ne réfigera les volets que si un utilisateur les a libérés...

Est-ce clair ? je l'espère.

Il existe un code Application.EnableEvents = False qui peut éviter les boucles provoquées par les macros événementielles. Mais le danger est qu'en cas de bug, si elle reste à False, alors les marcos événementielles ne fonctionnenent plus tant que tu n'as pas fermé et relancé excel. C'est pour ça que tu verras beaucoup de gens lui préférer un flag booléen qui, lui, repart aussitôt...
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Interdire figer/libérer les volets aux utilisateurs

Re
Robert: OUI!!! C'est toute ma compréhension des macros évennementielles que tu viens de remettre d'applomb. A chaque Select, elle repart. C'est évident, enfin maintenant :eek:.
Encore merci pour tout :).
Cordialement
 

ROGER2327

XLDnaute Barbatruc
Re : Interdire figer/libérer les volets aux utilisateurs

Bonjour à tous
Mais je souhaitais le figer une bonne fois pour toute et que les utilisateurs ne puisse pas les libérer ! Moche pour les utilisateurs !
Oui !

Une proposition moins stalinienne.
En supposant que Feuil1 est la feuille où sont définis les volets :
Code:
[COLOR="DarkSlateGray"][B]Private Sub Workbook_Open()
Dim tmp
   Application.ScreenUpdating = False
   With ActiveSheet
      Feuil1.Activate
      tmp = Selection.Address
      ActiveWindow.FreezePanes = False
      Range("E11").Select
      ActiveWindow.FreezePanes = True
      Range(tmp).Select
      .Activate
   End With
   Application.ScreenUpdating = True
End Sub[/B][/COLOR]
dans le module du classeur.

Code:
[COLOR="DarkSlateGray"][B]Private Sub Worksheet_Activate()
Dim tmp
   tmp = Selection.Address
   ActiveWindow.FreezePanes = False
   Range("E11").Select
   ActiveWindow.FreezePanes = True
   Range(tmp).Select
End Sub[/B][/COLOR]
dans le module de Feuil1 (facultatif).

Lorsque la feuille est activée, les volets sont figés. Mais l'utilisateur reste libre de les libérer, voire de les organiser autrement pour travailler sur la feuille...
L'utilisateur suivant retrouvera les volets correctement définis.​
ROGER2327
#2840
 

Staple1600

XLDnaute Barbatruc
Re : Interdire figer/libérer les volets aux utilisateurs

Bonsoir à tous


Une solution qui n'aurait pas déplu à Staline. ;)


Code:
Sub Les_Volets_Clos()
CommandBars(1).Controls(9).Controls(7).Enabled=False
End Sub
Pour revenir en démocratie
mettre True à la place de False

PS: test ok sous Excel 2000
 

Efgé

XLDnaute Barbatruc
Re : Interdire figer/libérer les volets aux utilisateurs

Bonjour à tous, Bonjour Staple1600
Staple1600, pour être "court" le code est "court" :D.
Plus sérieusement, si on peut interdire l'utilisation d'un "bouton" de menu, comment trouver sa référence? Par exemple CommandBars(1).Controls(9).Controls(7). Il faut chercher sois même, au "azar", et voir ce qui ce passe, ou y a t il une règle?
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 337
Messages
2 087 392
Membres
103 536
dernier inscrit
komivi