6 oct. 2019

#38 : VBA Access G.Stock - Login Authentication - Users & Roles (Part1)

Objectif : Intégrer et gérer les rôles utilisateurs 

🔗 Télécharger le Code Source  Projet G.Stock V P38
 GStock V38

5 oct. 2019

#37 : VBA Access G.Stock - Login Authentication (Tracer les Connexions Users)

Objectif : Tracer les connexions Utilisateurs 

🔗 Télécharger le Code Source  Projet G.Stock V P37
 GStock V37

4 oct. 2019

#36: VBA Access G.Stock - Login Authentication (Part02)

Objectif : Formulaire Login Authentification

🔗 Télécharger le Code Source  Projet G.Stock V P36
 GStock V36

3 oct. 2019

#35 : VBA Access GStock - Login Authentication (Part1)

Objectif : Créer un formulaire d'authentification
🔗 Télécharger le Code Source  Projet G.Stock V P35
 GStock

30 sept. 2019

#34 : VBA Access G.Stock - Gestion Utilisateurs (Editer utilisateur)

Objectif : Créer un formulaire éditer utilisateur 

Dans Cette partie on va ajouter le formulaire "F_EditerUser" comme indiqué ci-dessus, pour modifier les informations concernant un utilisateur. donc lorsque je vais cliquer sur le bouton Editer "BtnEditerUser" du formulaire "F_ListUsers".

automatiquement le formulaire "F_EditerUser" sera lancé et affiche les données de l’utilisateur sur lequel je clique, donc sur l'événement clic du bouton "BtnEditerUser" , je vais exécuter ce code VBA.

Code VBA pour bouton BtnEditerUser
Private Sub BtnEditerUser_Click()
DoCmd.OpenForm "F_EditerUser"
Form_F_EditerUser.txtIdUSer = Me.idUser
Form_F_EditerUser.txtNomUser = Me.NomUser
Form_F_EditerUser.txtlogin = Me.login
Form_F_EditerUser.txtPasse = Me.passe
Form_F_EditerUser.txtIdRole = Me.idRole
Form_F_EditerUser.txtEmail = Me.Email
Form_F_EditerUser.txtTel = Me.Tel
Form_F_EditerUser.txtPhoto.Picture = Me.Photo
End Sub
Ensuite je vais déplacer le code concernant la fonction getExtFile et la fonction CopierFichier  dans un module "Exp : Module02" , comme ça ces fonctions seront partagées et accessibles à n'importe qu'il emplacement de notre projet .

Code VBA de la fonction getExtFile
Public Function getExtFile(path As String) As String
Dim posPoint As Integer
posPoint = InStrRev(path, ".")
Dim ext As String
ext = Right(path, Len(path) - posPoint)
getExtFile = ext
End Function

Code VBA de la fonction CopierFichier
Public Sub CopierFichier(source As String, destination As String)
Dim fso As Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject
fso.CopyFile source, destination
Set fso = Nothing
End Sub

et voila par la suite le code qu'on va mettre sur le formulaire "F_EditerUser
Evénement Clic du bouton  btnChargerPhoto
Private Sub btnChargerPhoto_Click()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "Sélectioner la photo pour cet utilsateur "
.InitialFileName = CurrentProject.path
If .Show <> 0 Then
txtPhoto.Picture = .SelectedItems(1)
Me.txtAdrPhotoSource = .SelectedItems(1)
End If
End With
End Sub

Evénement Exit du zone de texte txtPasseConfirmation
Private Sub txtPasseConfirmation_Exit(Cancel As Integer)
If (Me.txtPasse <> Me.txtPasseConfirmation) Then
Me.txtPasseConfirmation.SetFocus
Me.txtPasseConfirmation.SelStart = 0
Me.txtPasseConfirmation.SelLength = Len(Me.txtPasseConfirmation)
Cancel = True
End If
End Sub

Evénement Clic sur le bouton btnModifierUser
Private Sub btnModifierUser_Click()
Dim db As Database
Dim rs As Recordset
Dim idUser As Integer
Dim urlPotos As String
urlPotos = CurrentProject.path & "\G.Stock\PhotosUsers\"
Dim FichierDestination As String
If (Me.txtNomUser <> "" And Me.txtPhoto.Picture <> "" And Me.txtlogin <> "" And Me.txtPasse <> "" And Me.txtIdRole <> "") Then
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Users WHERE idUser=" & Int(Me.txtIdUSer), dbOpenDynaset)
rs.Edit
rs("NomUser") = Me.txtNomUser
rs("login") = Me.txtlogin
rs("passe") = Crypter(Me.txtPasse)
rs("Email") = Me.txtEmail
rs("Tel") = Me.txtTel
rs("idRole") = Me.txtIdRole
FichierDestination = urlPotos & Int(Me.txtIdUSer) & "." & getExtFile(Me.txtAdrPhotoSource)
rs("Photo") = FichierDestination
rs.Update
CopierFichier Me.txtAdrPhotoSource, FichierDestination
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
MsgBox "Utilisateur bien Modifie", vbInformation, "GStock"
DoCmd.Close acForm, "F_EditerUser"
DoCmd.Requery
Else
MsgBox "Attention vous devez compléter les informations de cet utilisateurs ", vbCritical, "GStock"
End If
End Sub

Pour Regarder/Parteger Cette vidéo

Pour l'intégrer sur votre site internet ou blog, vous pouvez utiliser le code suivant
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/0umm2LybCtY" width="480"></iframe>

 👉 Pour plus de détail, Regarder la Vidéo de ce Cours 


🔗 Télécharger le Code Source  Projet G.Stock V P34



28 sept. 2019

#33 : VBA Access G.Stock - Gestion Utilisateurs (Lister Utilisateurs)

Objectif : Créer un formulaire pour lister les Utilisateurs

Dans cette partie de notre projet G.Stock on va réaliser un formulaire pour afficher et manipuler la liste des utilisateurs (Ajouter , Editer , Supprimer ), pour simplifier et ganger le temps dans partie mise en forme du ce formulaire, je vais copier (CTRL + C)  et coller (CTRL + V) le Formulaire "F_ListClients" puis je saisie le nom "F_ListUsers".

ensuite sur la source de données du formulaire "F_ListUsers".
Ensuite on va accéder à la source de données puis générer la requête suivante via l'assistant de requête suivante : 
ou vous pouvez basculer en mode SQL (Affichage = > Mode SQL ) et on va saisir le code SQL suivant pour générer cette requête :

Code SQL de notre Requête
SELECT Users.idUser, Users.login, Users.passe, Users.NomUser, Users.Tel, Users.Email, Users.Photo, Users.idRole, Roles.LibRole
FROM Roles INNER JOIN Users ON Roles.idRole = Users.idRole
ORDER BY Users.idUser;

après  cette opération, on va lier chaque zone de texte de ce formulaire par la source de données équivalente   en passant par Feuille de propriété = > Source  de Contrôle.
par la suite on va écrire le code VBA  pour les boutons "Nouvel utilisateur" et le bouton "Supprimer".

Code VBA pour le bouton Nouvel Utilisateur  "btnNouvelUser"
Private Sub btnNouvelUser_Click()
DoCmd.OpenForm "F_AjouterUser"
End Sub

Code VBA pour le bouton Supprimer "btnSupprimerUser"
Private Sub btnSupprimerUser_Click()
Dim req As String
res = MsgBox("Voulez vrailent supprimer l'utilisateur " & Me.NomUser, vbYesNo, "Confirmation Suppresion ")
If res = vbYes Then
req = "DELETE * FROM Users WHERE idUser=" & Me.idUser
CurrentDb.Execute req
End If
DoCmd.Requery
End Sub
Pour Regarder/Parteger Cette vidéo
https://www.youtube.com/watch?v=2ofyo11d20I

Pour l'intégrer sur votre site internet ou blog, vous pouvez utiliser le code suivant
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/2ofyo11d20I" width="480"></iframe>

 👉 Pour plus de détail, Regarder la Vidéo de ce Cours 


🔗 Télécharger le Code Source  G.Stock V1.30

#32: VBA Access G.Stock- Sécuriser et Crypter mot de passe

Objectif : Sécuriser et Crypter mot de passe 

Toujours dans le cadre de notre projet G.Stock , on va ajouter de la sécurité et surtout pour les mots de passes , donc on va développer une petite fonction qui nous permet de crypté et sécuriser le mot de passe de chaque utilisateur. 
L'objectif de cette pratique est d’empêcher le gestionnaire de la base de données à connaitre les réales  mots de passes des utilisateurs , vous connaissez bien sûr que le mot de passe est information privé propre à chaque utilisateur.
La fonction "Crypter" que nous allons créer reçoit en paramètre le mot de passe et une clé de cryptage, faire des traitements un peu compliqués puis elle retourne le nouveau mot de passe crypté. comme ça l'utilisateur retient son vrai mot de passe , mais le mot crypté sera enregistré  sur la base données "Table Users".
Lorsqu'un utilisateur va se connecter à l'application , il va saisir login et mot de passe , la fonction Crypter crypte à nouveau le mot de passe saisi par l’utilisateur et le compare avec le mot de passe enregistré dans la base de données, comme on va y donner accès ou non.
👉 par exemple : P@ssw@ord --- > Crypter --- > 82908D5E9591915E6E
par la suite on va ajouter un Module nommé "Cryptage" (Insertion = > Module) dedans ajoutons la fonction crypté ainsi :

Code VBA de la Fonction Crypter
Public Const cle As String = 1234
Public Function Crypter(passe As String) As String
Dim str As String
str = ""
For i = Len(passe) To 1 Step -1
str = str & Hex(Asc(Mid(passe, i, 1)) + Int((cle / 40)))
Next i
Crypter = str
End Function

La  fonction prend chaque caractère du mot de passe (fonction : MID) , retourne le code ASCII de cette caractère (fonction : ASC) puis ajoute la clé de cryptage divisée sur 40 , enfin convertir le numéro obtenu en Hexadécimale (le fiction : HEX)
Donc pour tester et exécuter cette fonction avant de l'intégrer dans notre projet , et sans passer par un formulaire et événement , on va se servir  Affichage => Fenêtre Exécution  (raccourci clavier : CRTL + G ),  puis on saisie  le nom de la fonction précédé par  ? . 

Pour exécuter la fonction via la fenêtre exécution
?Crypter("P@ssw@ord")
82908D5E9591915E6E


La Fonction ASC: Renvoie une donnée de type entier qui représente le code ASCII du caractère . Exp : asc("A") = 65 , asc("a") = 97
La fonction MID : mid(chaîne , début, longueur) , Renvoie une donnée de type Variante (Chaîne) contenant un nombre défini de caractères d’une chaîne. Exp : str="Mohamed", mid(str,1,1) = "M" , mid(str,5,3) = "med"
La fonction Hex : Renvoie une donnée de type Chaîne qui représente la valeur hexadécimale d’un nombre.
👉 Pour plus de détail, Regarder la Vidéo de ce Cours



🔗 Télécharger le Code Source  G.Stock V1.29