IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Simplifier un bout de code pour passage en lecture seule [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Points : 116
    Points
    116
    Par défaut Simplifier un bout de code pour passage en lecture seule
    Bonjour le forum,

    J'ai un fichier en réseau disponible pour plusieurs dizaines d'utilisateurs, mais je voudrais restreindre l'accès en lecture-écriture à seulement 6 d'entre eux.
    Pour ce faire, j'utilise ce code à l'ouverture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If (UCase(Environ("Username"))) <> "Machin1" And _
        (UCase(Environ("Username"))) <> "Machin2" And _
        (UCase(Environ("Username")))<> "Machin3" And _
        (UCase(Environ("Username"))) <> "Machin4" And _
        (UCase(Environ("Username"))) <> "Machin5" And _
        (UCase(Environ("Username"))) <> "Machin6" Then
            On Error GoTo Fin
            ThisWorkbook.ChangeFileAccess xlReadOnly
    Fin:  End If
    J'aimerais améliorer deux choses même si ce code a l'air de fonctionner... la succession de "if and" si possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select Case (UCase(Environ("Username"))) 
         Case <> "Machin1", "Machin2", "Machin3", "Machin4", "Machin5", "Machin6"
            On Error GoTo Fin
            ThisWorkbook.ChangeFileAccess xlReadOnly
    Fin:  End select
    N'a l'air de donner l'accès en lecture écriture seulement à Machin1.

    Et puis, j'ai mis le On Errot GoTo pour éviter une erreur quand un des utilisateurs élus est déjà sur le fichier et qu'un autre élu veut l'ouvrir.

    Merci de vos lumières encore une fois.

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Essaye peut être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Select Case (UCase(Environ("Username"))) 
         Case  "Machin1", "Machin2", "Machin3", "Machin4", "Machin5", "Machin6"
     
         case else
           On Error GoTo Fin
            ThisWorkbook.ChangeFileAccess xlReadOnly
    Fin:  End select
    par contre je ne comprend vraiment pas ce que tu reproche a ton if...


    a mon avis dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Case <> "Machin1", "Machin2", "Machin3", "Machin4", "Machin5", "Machin6"
    tu rentre si le username est différent de Machin1 egale a machin2...
    je doute que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Case <> "Machin1", <>"Machin2"
    fonctionne
    car machin1 est différent de machin 2 et du coup on entre dans le cas

    Mais je n'ai pas encore testé

    edit :
    effectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select case i
    Case Is <> 1, Is <> 2
    MsgBox ""
    End Select
    permet de d'afficher la boite de dialogue quelque soit la valeur de i même si i=1 ou2

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Points : 116
    Points
    116
    Par défaut
    Je vais tester, merci.
    Je reproche juste à mon if de me faire un gros pâté indigeste, mais j'avoue que c'est plus esthétique qu'autre chose...

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,

    une idée comme ça. Crée une constante de type string contenant soit la liste des noms utilisateurs autoriés ou non autorisés; de manière à obtenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Const AllowedUsers ="Machin1Machin2Machin3"
     
     If Instr(AllowedUsers,environ("UserName"))=0 Then ThisWorkbook.ChangeFileAccess xlReadOnly
    Si la liste des utilisateurs changent tu as juste à modifier la constante

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Points : 116
    Points
    116
    Par défaut
    Bonjour Ilank,

    Ta méthode semble fonctionner. Je ne connaissais pas vraiment la fonction InStr. Merci .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/04/2008, 11h20
  2. [SQL-Server] traduire un bout de code pour oracle en bout de code pour SQL SERVER
    Par teen6517 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/06/2007, 09h47
  3. [Xerces] Bout de code pour valider un document DOM
    Par toshiro dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 17/08/2006, 17h47
  4. [Xerces] Bout de code pour valider un document DOM
    Par toshiro dans le forum XML/XSL et SOAP
    Réponses: 0
    Dernier message: 17/08/2006, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo