6 oct. 2019
5 oct. 2019
4 oct. 2019
3 oct. 2019
30 sept. 2019
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
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
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
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
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
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
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>
28 sept. 2019
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 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;
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
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
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
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 ,
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