Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/02/2011, 18h58   #1
Invité de passage
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 4
Points : 4
Par défaut Bloquer les données avec code vba

Bonsoir,

Voila j'ai une base dans la quelle il faut avoir un login est un mot de passe pour ce connecté par l'intermédiaire d'un code vba, moi ce que je voudrais c'est que les autres utilisateur ne peuvent que consulter la base est ne pas modifier les données qui apparaissent dans les formulaires. est-ce-que c'est possible de le faire ?
demichoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 19h45   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Utilises-tu la sécurité de Access (ficher .mdw) ou ta propre procédure de sécurité ?

Si c'est ta propre procédure, une solution simple serait de créer un utilisateur 'Consultation' ou quelque chose de ce genre puis pour chaque formulaire mettre dans l'événement 'Sur Ouverture' un truc du genre

Code :
1
2
3
4
5
6
7
8
9
10
11
if MonUtilisateur="Consultation"
      'Interdit toutes les modifications
      Me.AllowAdditions = False
      Me.AllowDeletions = False
      Me.AllowEdits = False
   else
      'Autorise les modifications
      Me.AllowAdditions = true
      Me.AllowDeletions = true
      Me.AllowEdits = true
end if
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 09h40   #3
Invité de passage
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 4
Points : 4
Bonjour marot_r,

Il me marque un message d'erreur (Erreur d'execution '424' objet requis)

ci-joint les captures d'écran du code et de l'erreur

Je ne vois pas d'ou viens le probléme.
Images attachées
Type de fichier : jpg 2011-03-01_093534.jpg (27,9 Ko, 5 affichages)
Type de fichier : jpg 2011-03-01_093705.jpg (68,9 Ko, 6 affichages)
demichoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 10h14   #4
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Bonjour,

Utilises plutôt l'argument OpenArgs auquel tu passes la valeur représentant le fait que ce soit en consultation seule ou en lecture écriture :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Private Const CONSULTATION_SEULE As String = "Consultation"
 
Private Sub Form_Load()
Dim vntArgs As Variant
 
    vntArgs = Me.OpenArgs
    If Not IsNull(vntArgs) Then
        Me.AllowAdditions = (vntArgs = CONSULTATION_SEULE)
        Me.AllowDeletions = (vntArgs = CONSULTATION_SEULE)
        Me.AllowEdits = (vntArgs = CONSULTATION_SEULE)
    Else
        MsgBox "Paramètre manquant requis pour ouvrir ce formulaire !", vbExclamation
        DoCmd.Close acForm, Me.Name
    End If
End Sub
Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 10h29   #5
Invité de passage
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 4
Points : 4
Bonjour argyronet,

Merci mais peut tu être un peu plus précis STP,

Faut-il que je met le code surtout mes formulaires ?

A quoi correspond cette partie du code fait-elle appel a une table ?

Code SQL :
Private Const CONSULTATION_SEULE AS String = "Consultation"
Merci
demichoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 11h10   #6
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Sur tous ceux qui sont susceptibles de recevoir des données...

Dans l'idéal, tu initialises une variables publique booléenne (par ex g_blnIsReadOnly) à l'ouverture de la base en fonction du profil.
Tu appliques alors la valeur de celle-ci à l'événement visé :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Option Compare Database
Option Explicit
 
Private Sub Form_Load()
    Me.AllowAdditions = Not g_blnIsReadOnly
    Me.AllowDeletions = Not g_blnIsReadOnly
    Me.AllowEdits = Not g_blnIsReadOnly
    With Me.lblReadOnlyMessage
        .Caption = "LECTURE SEULE"
        .Visible = g_blnIsReadOnly
    End With
End Sub
Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 11h22   #7
Invité de passage
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 4
Points : 4
Tu me parle chinois la

Pour te dire mes connaissances en vba ce limite a ouvrir visual basic

Veut tu que je redéfinis clairement mon probléme ?

voila
demichoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 11h42   #8
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Bon, eh bien on va faire plus simple. Procédons par ordre :
Comme tu sais si bien le faire, tu ouvre l'éditeur Visual Basic
Tu ajoutes un Module depuis le menu Insertion
Tu y recopies le bloc:
Code :
1
2
3
4
5
6
7
8
9
10
11
Option Compare Database
Option Explicit
 
Private Const CONSULTATION_SEULE As String = "Consultation"
 
Public Function LectureSeule() As Boolean
'Verifie si le login est = à Consultation et si oui, LectureSeule = True
Dim strNomUtilisateur                                  As String
    strNomUtilisateur = Environ("USERNAME")
    LectureSeule = (StrComp(strNomUtilisateur, CONSULTATION_SEULE, vbTextCompare) = 0)
End Function
Dans ton formulaire, tu modifies le code comme suit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Compare Database
Option Explicit
 
Private Sub Form_Load()
    'Ajout autorisé ou non
    Me.AllowAdditions = Not LectureSeule
    'Suppression autorisée ou non
    Me.AllowDeletions = Not LectureSeule
    'Modifications autorisée ou non
    Me.AllowEdits = Not LectureSeule
    'L'étiquette est visible et affiche une mention lecture seule si LectureSeule=True
    With Me.lblReadOnlyMessage
        .Caption = "LECTURE SEULE"
        .Visible = LectureSeule
    End With
End Sub
Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 11h58   #9
Invité de passage
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 4
Points : 4
J'ai fait ce que tu m'a dit, j'ai créer un module puis j'ai ajouter le code dans mon formulaire sur l'ouverture mais il j'ai un message d'erreur qui apparait
Images attachées
Type de fichier : jpg 2011-03-01_115527.jpg (24,8 Ko, 2 affichages)
demichoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 13h22   #10
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
Il faut que tu ajoutes un contrôle Etiquette dans ton formulaire que tu nommes lblReadOnlyMessage.
Tu lui donnes une taille d'environ 4cm en Arial Black rouge.

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 15h15   #11
Invité de passage
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 4
Points : 4
C'est bon c'est fait pour l'étiquette, mais je peut toujours modifier les données même en utilisant le login Consultation l'étiquette n'aparait pas non plus, mais il y a des choses qui me turlupine dans le code du module

Code SQL :
1
2
3
4
5
6
7
8
9
10
11
OPTION Compare DATABASE
OPTION Explicit
 
Private Const CONSULTATION_SEULE AS String = "Consultation"
 
Public FUNCTION LectureSeule() AS BOOLEAN
'Verifie si le login est = à Consultation et si oui, LectureSeule = True
Dim strNomUtilisateur                                  As String
    strNomUtilisateur = Environ("USERNAME")
    LectureSeule = (StrComp(strNomUtilisateur, CONSULTATION_SEULE, vbTextCompare) = 0)
End Function

Pourquoi mettre "strNomUtilisateur " est a quoi il sert? a quoi correspond cette partie du code "Environ("USERNAME")" je suis désolé, je t'en quiquine surment avec mes question mais j'ai bien savoir est comprendre en 1 er lieu.

Pour être plus précis quand j'ouvre ma base j'ai un formulaire qui apparait dans lequel j'ai 2 champs un txt_user (Login) et l'autre txt_pass(MdP) donc lorsque je saisie le login est le mot de passe est que je click sur mon bouton connexion j'ai ce code ci-dessous
Code SQL :
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
Private Sub connexion_Click()
Dim Rs AS Recordset
Dim Reconnu AS BOOLEAN
Reconnu = False
SET Rs = CurrentDb.OpenRecordset("T_User")
Do While NOT Rs.EOF
    IF Rs.FIELDS("Trigramme").Value = txt_user.Value Then
    IF Rs.FIELDS("Paswd").Value = txt_pass.Value Then
            DoCmd.OpenForm "Menu Général", acNormal, , , , acWindowNormal
            DoCmd.Close acForm, "F_CONNEXION"
            Reconnu = True
            Exit Do
        Else
            MsgBox "Erreur de mot de passe"
            GoTo fin
        End IF
    End IF
    Rs.MoveNext
Loop
IF Reconnu = False Then
    MsgBox "Vous n'avez pas accès a la base!!!", vbCritical, "Attention.."
    GoTo fin
End IF
'Traitement suivants
fin:
 
 
End Sub

qui cherche si le login correspond bien au mot de passe si oui il m'ouvre un autre formulaire qui me sert de Menu Général est dans ce formulaire j'ai 2 formulaires un qui s'appel Ouvrir Formulaire BFI est l'autre Ouvrir Formulaire PPC est se sont ces 2 formulaires que je voudrai protéger

voila je pense t'avoir donnée tout les infos que je dispose
demichoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 15h47   #12
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 210
Points : 6 210
Envoyer un message via MSN à argyronet
OK, quand tu parlais de login, je pensais LOGIN Windows d'où le
Environ("USERNAME")
ce qui est recommandé en fait car tu es sûr de cibler la personne voulu.
Bref, tu as établi ton propre gestionnaire d'utilisateurs dans une table.
Il est important de te préciser qu'en moins de 10 secondes, je rentre dans ta base avec ce procédé. Je te conseille la lecture d'un article sur ce forum sur la sécurité.
Bon, pour aller dans ton sens, voici la solution :

1/ oublier ce que je t'ai écris ci-avant (en partie)

2/ mettre dans le module une variable publique et une constante comme suit :
Code :
1
2
3
 
Public g_blnIsReadOnly                                 As Boolean
Public Const CONSULTATION_SEULE                        As String = "Consultation"
3/Modifier ta procédure connexion :
Code :
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
 
Private Sub connexion_Click()
Dim Rs                                                 As DAO.Recordset
Dim vntUserName                                        As Variant
Dim vntPassword                                        As Variant
 
    Reconnu = False
    vntUserName = txt_user.Value
    vntPassword = txt_pass.Value
    If IsNull(vntUserName) Or Len(vntUserName) < 2 Then
        MsgBox "Nom d'utilisateur invalide !", vbExclamation
        Exit Sub
    End If
    If IsNull(vntPassword) Or Len(vntPassword) < 2 Then
        MsgBox "Mot de passe invalide !", vbExclamation
        Exit Sub
    End If
 
    Set Rs = CurrentDb.OpenRecordset("SELECT * T_User WHERE Trigramme = '" & vntUserName & "' AND Paswd = '" & vntPassword & "'")
    If Rs.EOF Then
        MsgBox "Vous n'avez pas accès a la base!!!", vbCritical, "Attention.."
        Exit Sub
    Else
        g_blnIsReadOnly = (vntUserName = CONSULTATION_SEULE)
        DoCmd.Close acForm, "F_CONNEXION"
        DoCmd.OpenForm "Menu Général", acNormal, , , , acWindowNormal
    End If
    Rs.Close
    Set Rs = Nothing
End Sub
4/ et enfin l'appliquer au formulaire ciblé comme précisé précédemment :
Code :
1
2
3
4
5
6
7
8
9
10
 
Private Sub Form_Load()
    Me.AllowAdditions = Not g_blnIsReadOnly
    Me.AllowDeletions = Not g_blnIsReadOnly
    Me.AllowEdits = Not g_blnIsReadOnly
    With Me.lblReadOnlyMessage
        .Caption = "LECTURE SEULE"
        .Visible = g_blnIsReadOnly
    End With
End Sub
Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 16h05   #13
Invité de passage
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 4
Points : 4
C'est bon tout fonctionne correctement


Merci beaucoup
demichoux est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h27.


 
 
 
 
Partenaires

Hébergement Web