|
|
|
|
Bonjour à tous,
Tout d'abord, précisons que je travaille sous excel 97... Désolé!!
J'ai créé un classeur, avec plein de codes VBA, que je voudrais protéger à 100%. Pour cela j'ai protéger mon classeur par Outils/Protection/protéger le classeur. Il n'y a donc pas de souci. Le seul moyen pour l'utilisateur de le "pirater" serait d'avoir accès à : Format/feuilles/afficher. La protection semblait convenir jusqu'à ce jour ou j'ai découvert qu'en ouvrant (ou créant) un 2nd fichier excel contenant la macro : workbook.UnProtect, on pouvait utiliser cette dernière pour "craquer" le 1er classeur et donc accéder à l'affichage des feuilles.
Ma question est donc simple :
comment faire, en VBA excel, pour fermer automatiquement mon classeur si un autre est ouvert ou créé?
Merci d'avance.
Cordialement.
Configuration: Windows 2003 Firefox 2.0.0.20
Oui en fait, il fonctionne quelque soit mon mdp. Dans mon 1er classeur, j'ai des macros qui s'exécutent entre les pages. Elles commencent toutes par Workbook.Unprotect("toto") et se terminent également par Workbook.Protect("toto"). Cela suffit à protéger mon classeur... jusqu'à l'ouverture d'un second avec la macro : Workbook.Unprotect qui s'exécute sans problème et déverrouille mon classeur.... |
Bonjour,
|
Salut,
|
J'ai tenté ceci :
|
Une idée...
Private Sub Workbook_Open()
testerOuvert
End Sub
Dans un module de PERSO Public Sub testerOuvert()
Static Nom As String
Nom = ActiveWorkbook.Name
reco:
If ActiveWorkbook.Name <> Nom Then
Workbooks(Nom).Close
Exit Sub
End If
DoEvents
GoTo reco
End Sub
Ferme le 1er classeur ouvert si ont ouvre un autre. J'ai tester et cela semble répondre à ce que tu cherche. Tu dis. A+ L'expérience instruit plus sûrement que le conseil. (André Gide) Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius) |
Je ne comprends pas bien cette partie :
|
Tu a tout compris.
Private Sub Workbook_Open()
testerOuvert
End Sub
Ca devrait aller aussi. Si pas tu dis, j'expliquerais mieux avec un classeur "PERSO" L'expérience instruit plus sûrement que le conseil. (André Gide) Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius) |
C'est ce que je craignais avec ton classeur protégé.
|
Pas de souci pour la création de "perso", d'un module testerOuvert dans ce classeur, d'y insérer le workbookopen etc... Par contre il me dit : "fonction ou procédure attendue, pas un module"...
|
Bon, beh pour demain alors..
Public Sub testerOuvert()
Static Nom As String
Nom = ActiveWorkbook.Name
reco:
If ActiveWorkbook.Name <> Nom Then
Workbooks(Nom).Close
Exit Sub
End If
DoEvents
GoTo reco
End Sub
Toujours dans l'IDE de PERSO.xls... tu doubleclic sur ThysWorkBook Dans cette fenêtre tu colle la macros Private Sub Workbook_Open()
testerOuvert
End Sub
A demain. L'expérience instruit plus sûrement que le conseil. (André Gide) Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius) |
Bonsoir,
|
Wahou!! Toutes ces infos en une seule nuit... Au fait m@rina tu dors de temps en temps??? Penser à VBA à minuit...
|
Re, Bonjour M@rina, Eric;
Sub Cache()
Sheets("NomFeuil").Visible = xlSheetVeryHidden
'... autant de lignes que de feuilles à cacher
End Sub
Tu met le curseur DANS la macros et tu tape F5. La solution d'eriic est aussi valable, si le classeur est déactiver tu ferme ton classeur. Private Sub Workbook_Deactivate() Workbooks("NomDeTonClasseur").Close end sub l'Exemple que je t'ai donné n'est plus pertinent, et a ne pas employer, quelques explications quand même.. Le nom du Module ne peu pas avoir le même nom qu'une sub, sinon excel ne s'y retrouve pas. DoEvents .. Quand arrive sur cette lignes permet à d'autre processsus de s'exécuter. Static, avec dim, chaque fois que la sub est appellée la variable est ré initialisée (vide) avec static la valeur de la variable reste même après avoir quitté la sub. Conseils.. Les mots que tu ne comprend pas.. Tu doubleclic sur le mot (il est surligné) et tu tape F1. A+ L'expérience instruit plus sûrement que le conseil. (André Gide) Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius) |