Interdire l'ouverture d'un deuxième classeur

Mi_

XLDnaute Occasionnel
Bonjour le forum,

Je gère de nombreux classeurs spéciaux qui cachent les barres de menu. Pour ne pas affecter le travail des gens sur les fichiers Excel classiques (possible problème de disparitions des menus si on ouvre plusieurs types de classeurs à la fois), j'ai ajouté dans mes classeurs spéciaux, dans Workbook_Open:

Dim nrclasseurs As Integer
nrclasseurs = Workbooks.Count
If nrclasseurs > 1 Then
MsgBox prompt:='Fermer d'abord les classeurs Excel en cours' + Chr(13) + _
'd'utilisation, puis redémarrer l'application.', _
Buttons:=vbCritical, Title:='Attention'
ActiveWorkbook.Close savechanges:=False
End If


Tout va bien pour les utilisateurs mais je me retrouve moi-même embêtté par cette protection, parce que parfois j'ai besoin d'ouvrir plusieurs classeurs spéciaux, sans menus, à la fois.

Existe-t-il une modalité de 'marquer' ces classeurs spéciaux, et de permettre les ouvertures multiples en fonction du marquage ?

Un nom, une cellule, un petit truc, qui serait vérifiable à l'ouverture du fichier.

Merci d'avance pour toute idée,
Mi_
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour Mi, le forum

tu peux utiliser ce genre de code évènementiel, cela devrait suffire.
mets les noms des classeurs à la place de classeur3, classeur4, etc

Cordialement, A+
Code:
Private Sub Workbook_Deactivate()
On Error Resume Next
Select Case LCase(ActiveWorkbook.Name)
Case Is = ThisWorkbook.Name, 'classeur3.xls', 'classeur4.xls'
Case Else
MsgBox 'ouverture interdite: ' & ActiveWorkbook.Name, vbInformation
ActiveWorkbook.Close False
End Select
End Sub

Message édité par: yeahou, à: 10/01/2006 22:55
 

Mi_

XLDnaute Occasionnel
Bonsoir Yeahou, le forum,

Merci pour l'idée. Malhereusement les noms des classeurs sont variables donc je ne peux pas vérifier leur présence en précisant le nom. :(

Il me faut quelque chose de plus générique.

Message édité par: Mi_, à: 10/01/2006 22:56
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re

dans ce cas, en exemple, on ferme tous les classeurs n'ayant pas Ok dans la première cellule de la première feuille

A+
Code:
Private Sub Workbook_Deactivate()
On Error GoTo Fin
If Not (ActiveWorkbook.Sheets(1).Range('A1') = 'ok') Then ActiveWorkbook.Close False
Fin:
End Sub

Ps: il faut que ce code soit dans tous les classeurs utilisés

Message édité par: yeahou, à: 10/01/2006 23:02
 

Mi_

XLDnaute Occasionnel
Re,

Arf, j'ai renommé toutes les feuilles (leur index) avec des mots.

Et pas moyen de changer car plusieurs classeurs spéciaux sont issus d'autres gros classeurs donc ça ne sera pas toujours le Sheets(1) qui va se recopier.

3, 2, 1, Ouin
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re

la, tu coupes les poils de c... en quatre.
c'est pour cela qu'il vaut mieux utiliser les index qui correspondent au positionnement des feuilles dans le classeur et non à leur nom (la première feuille sera toujours d'index 1), une feuille copiée dans un classeur avant la sheets 1 deviendra la sheets 1. Lors de ta copie, tu passes la cellule que tu veux tester à la valeur de test. Si elle est copiée aprés la sheets 1, pas de problème.
De toute façon, c'est uniquement lors d'une désactivation de classeur que la macro agira, tu peux donc faire par macro toutes les opérations que tu désires à partir du moment ou tu ne désactives pas le classeur actif, l'important étant qu'au moment ou tu activeras le classeur concerné celui ci ait bien la bonne valeur au bon endroit.

A+
 

Mi_

XLDnaute Occasionnel
Ré,

J'ai observé que bien que renommées, les feuilles gardent quelque part en memoire le numéro d'index, et si on copie une feuille Sheets(7) dans un nouveau classeur, elle deviendra Sheets(1) là-bas.

Donc je vais essayer d'appliquer le truc de la cellule A1 dans Sheets(1).

Merci encore une fois.
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re

les feuilles ne gardent pas en mémoire, le numéro d'index correspond à la position de la feuille dans le classeur. Si tu déplaces une feuille dans le classeur, tous les index entre son ancienne postion et la nouvelle sont modifiés. Le nom n'a rien à voir avec l'index.

A+
 

Statistiques des forums

Discussions
312 366
Messages
2 087 643
Membres
103 627
dernier inscrit
nabil