Fichier en lecture seule avec condition
Bonjour le Forum,
J'ai créé une application sous Excel. Je souhaite que le fichier s'ouvre en lecture seule, si ce n'est pas mon identifiant qui l'ouvre. (fichier sur réseau).
Mon but est d'éviter la boîte de dialogue habituelle à l'ouverture d'un classeur dont l'écriture est protégée par mot de passe.
Autre précision, je pense d'importance : le fichier doit s'ouvrir par raccourci sur le bureau, donc sans utilisation d'un classeur annexe.
Voici le code auquel j'ai pensé :
Code:
1 2 3 4 5 6 7 8 9
| Private Sub Workbook_Open()
Dim CHEMIN As String
CHEMIN = ActiveWorkbook.FullName
If Application.UserName = "MarcelG" Then
SetAttr CHEMIN, vbNormal
Else
SetAttr CHEMIN, vbReadOnly
End If
End Sub |
1er essai de sauvegarde sur mon poste : sauvegarde sans problème
Je ferme le classeur.
2ème essai de sauvegarde sur le poste d'un collègue : message bloquant (normal)
Je ferme le classeur.
3ème essai de sauvegarde sur mon poste (MarcelG) : là refus car fichier en lecture seule. ???!!!! Je ne comprends pas.
J'ai dû faire une erreur dans mon code VBA.
Peut-on me dire comment y pallier, ou me proposer un autre code.
D'avance Merci.
Cordialement. Marcel.
autres macros dans Workbook_Open
Merci pour cette réponse.
Il me semble qu'avec cette méthode, le fichier se réouvre d'où le message "Le fichier est déjà ouvert. Si vous l'ouvrez à nouveau, toutes...." que l'on peut éviter par
Code:
Application.DisplayAlerts = False
Néammoins, si d'autres macros ou lignes de code viennent compléter ces instructions décrites plus haut, celles-ci ne sont pas prises en compte.
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Private Sub Workbook_Open()
Dim CHEMIN As String
CHEMIN = ActiveWorkbook.FullName
Application.DisplayAlerts = False
Application.EnableEvents = True
If Application.UserName = "MarcelG" Then
Application.Workbooks.Open filename:=CHEMIN, ReadOnly:=False
Else
Application.Workbooks.Open filename:=CHEMIN, ReadOnly:=True
End If
Application.Run ("TOTO")
End Sub |
Ici, la macro TOTO ne s'éxécute pas.
Y a-t-il une solution pour forcer cette exécution ?
Merci.
Marcel.
Nouveau classeur généré enfin !
Merci Mercatog,
En effet, il suffisait de cocher la case "Faire confiance au projet Visual Basic"
Mondev,
Tout ton code est recopié dans le classeur initial (celui qui doit s'ouvrir en lecture seule si identifiant différent du mien).
Code:
1 2 3 4 5 6 7
| Private Sub Workbook_Open()
Application.Workbooks.Add template:=xlWBATWorksheet
Application.Workbooks(Workbooks.Count).Activate
ActiveWorkbook.VBProject.VBComponents.Add vbext_ct_StdModule
ActiveWorkbook.VBProject.VBComponents( _
ActiveWorkbook.VBProject.VBComponents.Count).CodeModule.InsertLines Line:=1, String:="option explicit"
End Sub |
Précision : je souhaite compléter ultérieurement ce code par l'activation d'une macro.
Un nouveau classeur est créé. J'ai vérifié la mention "Option Explicit'.
Donc à ce stade, 2 classeurs sont ouverts.
Maintenant, quelle est la démarche à suivre, et comment la coder ?
J'avoue être à plat à ce niveau (Template, VBComponents...)
Merci encore à tous les deux.
Cordialement.
Marcel
Code dans nouveau classeur
Tout d'abord, j'ai essayé de compléter ton code par
Code:
1 2
| 'Marcel
Application.Workbooks(Workbooks.Count).SaveAs filename:="temp.xls" |
PAR CODE VBA, depuis un classeur A, je ne sais pas :
- renommer un module d'un classeur B
- créer une procédure en la nommant dans ce module
- écrire cette procédure
- l'activer depuis le classeur A
J'ai donc développé directement dans temp.xls, en codant
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Public Sub ouvrir()
Dim user As String
Dim CHEMIN As String
user = Application.UserName
CHEMIN = Workbooks("x").FullName
Workbooks("x").Close (False)
If user = "MarcelG" Then
SetAttr CHEMIN, vbNormal
Else
SetAttr CHEMIN, vbReadOnly
End If
Workbooks.Open Filename:=CHEMIN
Workbooks("temp.xls").Close (False)
End Sub |
Voici ma - modeste - contribution.
Merci pour ton aide. Cela devient passionnant.
Marcel.
La macro RunAutomacro ne s'éxécute pas
Merci Jacques Jean
J'ai codé ainsi, après la macro d'écriture proposée par mondev
Code:
clTemp.RunAutoMacros xlAutoOpen
Remarque : Si l'on code "clTemp." , VBA propose bien l'action RunAutoMacros
Mais cette instruction reste sans effet, alors qu'aucun message d'erreur ne s'affiche.
Je n'en vois pas la raison.
Cordialement.
Marcel