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 :

Autorisation selon le Environ("username") [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut Autorisation selon le Environ("username")
    Bonjour,

    Je voudrais donner accès selon le Environ("username") soit uniquement aux colonnes A à D, soit à la totalité des colonnes du fichier.

    Ce fichier est partagé sur réseau.

    Je suppose que tout doit se passer dans WORKBOOK _ BeforeOpen

    Cordialement,
    _____Graphikris

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    Bonjour

    a l'open plutot

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    Columns("A:C").EntireColumn.Hidden = IIf(Split(Environ(39), "=")(1) <> "Patrick", True, False)
    End Sub
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Merci Patrick mais çà ne fonctionne pas du tout, peux tu me dire ce que signifie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf(Split(Environ(39), "=")(1) <> "Patrick", True, False)
    le IIf
    le Split
    le (39)
    le "="
    le(1)
    le True et le False placé a cet endroit

    Sinon en gros je crois comprendre que si le Usernane est different de PATRICK alos ne s'afficheront que les colonnes A:C

    Cordialement

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Il voulait dire simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_Open()
     
    Feuil1.Columns("E:IV").Hidden = Environ("username") <> "user"    'ou "="
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour Graphichris et Mercatog

    en fait
    donne finalement la meme chose que
    ensuite j'utilise le chiffre 39 sur le environ ce qui me donne
    "USERNAME= Patrick"
    il me faut récupérer le nom
    donc on fera pour obtenir le nom
    nom=split(environ(39),"=")(1)
    un tableau de données créé par split (un string,"symoble ou lettre ")commence par 0 ,1,2,etc....
    donc

    la deuxième partie de environ(machinchose) coupé par le simbole "="
    donne le nom
    ensuite le "iif" représente deux condition"if" sur la meme ligne
    c'est comme si j'avais fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if nom="patrick" then
    truc=true
    'reste du code de la condition
    else 
    truc=false
    'reste du code de la condition contraire 
    end if
    et la formule avec le double iif s'écrit comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    truc=iif(nom="patrick",true,false)
    je n'utilise pas beaucoup environ ("username")car je ne sais pas si ca me donne le nom de la session du compte windows ou le propriétaire de l'ordi


    mercatog répondra mieux que moi a ce sujet la

    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour Patrick

    Dans ce cas juste pour l'utilisation du IIf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Truc=IIf(Machin="Toto",True,False)
    N'est elle pas équivalente à
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Bonjour et merci pour vos reponses, je vais essayer demain sur le serveur du boulot, chez moi je ne peux rien tester.

    Sinon pour Patrick, peut etre celà puisse t'être utile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ' indique nom d'utilisateur de l'ordinateur
        MsgBox "Bonjour " & Environ("username")
     
        ' indique nom d'utilisateur du pack office
         MsgBox "Bonjour " & Application.UserName
    Cordialement

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Re
    En meme temps l'utilisateur du pack office utilise l'ordi lol!!
    tu vois ce que je veux dire ????
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    @mercatog
    Bonjour,
    Je favorise ton code car plus court mais par contre si je veux autoriser par exemple 3 personnes (user1 - user2 - user3) comment procéder ?

    Sinon j'ai remaequé que si on n'est pas autorisé autre que de A à D, l'utilisateur peut faire un clic droit et faire : afficher les colonnes.

    On ne peut pas plutot mettre un truc du style xlhidden pour ceux qui ne pourront pas voir plus que de A à D ?


    Cordialement

    @patricktoulon
    Oui je sais mais dans excel si tu vas dans Outils / options / general / nom de l'utilisateur , tu peux mettre un nom different de celui de ta session windows. Non ?

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Daccord ca je l'ignorais je n'en vois pas trop l'utilité

    Ensuite si tu veux autoriser plusieurs utilisateurs
    Tu devra integrer a la fonction une autre variable string ou array

    Un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Open()
     dim lesprenoms as string
    lesprenoms="robert : serge : patrick"
    'si l'environ correspond a un de ces trois prenoms 
    if instr(environ("username"),lesprenoms)>0 then 
    Feuil1.Columns("E:IV").Hidden = true
    End Sub
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Ok mais si on met juste HIDDEN les utlisateurs differents de 'lesprenoms' pourront tjrs afficher les colonnes masquées en faisant un clic droit : afficher ?

    ya pas un truc pour eviter qu'ils affichent les colonnent masquées ?

    Cordialement

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Si il y a la possibilité de retrouver le nom de la commandbars du menu

    Et l'index du bouton afficher
    Voir :mettre cet commandbar a "enabled =false"
    pour le trouver ?!!
    On pourrais faire un truc du genre (pas tester)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for each cmb in application.commandbars
    for each ctrl in cmb.controls
    if ctrl.caption="Afficher" then msgbox ctrl.parent 'on obtiens le nom de la commandbar
    next
    next
    Je regarderais demain
    A demain et Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Merci Patrick
    j'attends ta reponse testée

  14. #14
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Attention à vous deux
    On cherche la position de Mot dans Texte et non l'inverse
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  15. #15
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Attention à vous deux
    On cherche la position de Mot dans Texte et non l'inverse
    Ok donc il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if instr(lesprenoms,environ("username"))>0 then
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if instr(environ("username"),lesprenoms)>0 then

  16. #16
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Est ce que tu peux protéger la feuille?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  17. #17
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut Autorisation d'accés
    Bonjour
    3 solutions en une. Lors de l'ouverture du classeur, la macro workbook open verifie la presence du "username" dans un emplacement prevu. Disons feuil1, col A. Puis

    1 - cache toutes les colonnes sauf AD
    2 - Limite les déplacement aux colonnes AD
    3 - Utilise la protection de la feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Private Sub Workbook_Open()
    Dim Nom As String
     
    Nom = Environ("username")
         Set c = Sheets("feuil1").Range("a:a").Find(Nom, LookIn:=xlValues, LookAt:=xlWhole)
         If c Is Nothing Then
     
    'si  le nom n'existe pas je ne suis pas autoriser donc au choix
        '1 - n'afficher que les colonnes AD
        'ActiveSheet.Range("e:w").EntireColumn.Hidden = True
     
        'les deux solutions suivantes permettent de voir les colonnes E:w sans y avoir accés.
            '2 - limiter les deplacement sur la feuile au colonne AD
            ActiveSheet.ScrollArea = "$A:$D"
     
            '3 - déverouiller la feuille, proteger les cellules,reverouiller la feuille
            'ActiveSheet.Unprotect
            'ActiveSheet.Range("e:w").Locked = True
            'ActiveSheet.Protect
     
    'le nom est trouvé sur la feuille donc au choix
        Else
        '1 - afficher toutes les colonnes AD
        'ActiveSheet.Range("e:w").EntireColumn.Hidden = False
     
            '2 - ne pas limiter le au colonne AD
            ActiveSheet.ScrollArea = ""
     
            '3 - déverouiller la feuille, deproteger les cellules,reverouiller la feuille
            'ActiveSheet.Unprotect
            'ActiveSheet.Cells.Locked = False
            'ActiveSheet.Protect
        End If
    End Sub
    Pour ajouter une personne autoriser a modifier tous le fichier, il suffit d'ajouter son username sur la feuil1, colA. J'ai une petite preference pour la solutions 2, tellement simple et passage par VB obligatoire pour avoir accés au autres cellules

  18. #18
    Membre actif Avatar de Denis la Malice
    Homme Profil pro
    FabManager
    Inscrit en
    Février 2013
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : FabManager
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2013
    Messages : 133
    Points : 287
    Points
    287
    Par défaut On parle de sécurité ?
    Bonjour,
    la variable d'environnement Username est positionnée par le système lors de l'ouverture de session de l'utilisateur sur un domaine windows. Suivant les paramètres de l'administrateur du domaine, l'utilisateur peut avoir des restrictions qui l'empêchent de modifier cette variable. Alors que le champ "Nom d'utilisateur" accessible dans les options est généralement libre de modification.

    S'il y a une feuille qui contient les "mots de passe" elle doit être bien cachée. Il faut utiliser la valeur "xlVeryHidden" de la propriété .visible de la feuille.

    Il est préférable dans la procédure Workbook.Open d'éviter d'utiliser ActiveSheet car la feuille active est celle qui l'était au dernier enregistrement. S'il y a plusieurs feuilles il faut mettre le nom de la feuille.

    La propriété ScrollArea ne masque pas les valeurs et n'empêche pas leur modification. Si je définis ScrollArea="A" alors quelqu'un qui entre E1 dans la zone d'adresse pourra modifier la cellule E1.

    Protéger une feuille sans lui mettre de mot de passe ne protège que des erreurs de frappe. Il suffit à l'utilisateur de faire "Révision --> Ôter la protection de la feuille" pour qu'il accède à l'affichage des colonnes cachées.
    Mais dans ce cas, enlever la protection à l'ouverture c'est mettre le mot de passe en clair dans la macro.

    La macro Open ne sera exécutée que si l'emplacement réseau est défini comme sûr ou que la sécurité des macro est au plus bas niveau.

    Les mesures de protection seront différentes en fonction du type d'accès : lecture ou lecture+modification ?
    De la réflexion, naît l'action ...

  19. #19
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Re
    Bonjour graphichris

    voila j'ai trouvé
    soit on bloque le menu contextuel des onglets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.CommandBars("Ply").Enabled = false

    soit on bloque les deux boutons(afficher et masquer dans cette commandbar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'bloque le bouton afficher
    application.commandbars.findcontrol(id:=891).enabled=false
    pour le bouton masquer c'est "890" le ID
    il te suffit de faire la meme chose avec la commandbar coloumn

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'pour les onglets
    Application.CommandBars("Ply").FindControl(ID:=890).Enabled = False
     
    'pour l'item qui ce trouve dans le menu clicdroit des colonnes
    Application.CommandBars("Column").FindControl(ID:=887).Enabled = False
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  20. #20
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Merci Denislamalice
    Bien entendu, rien de nouveau.
    On parle evidemment d'une protection legere qui evite a l'utilisateur "normal" d'avoir un accés.
    Il est certain qu'une personne mal intentionné ayant quelques connaissances, qui veut bousillé le fichier n'aura aucun mal à le faire, quelque soit la protection apportée. Mais l'utilisateur "normal" a souvent autre choses à faire que de chercher à saloper le boulot.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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