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

VBA Access Discussion :

Sauvegarder utilisateur par défaut [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 25
    Points : 24
    Points
    24
    Par défaut Sauvegarder utilisateur par défaut
    Bonjour,

    J'ai pas mal cherché mais rien trouvé jusqu'à présent donc j'espère que vous pourrez m'aider ou me diriger vers le bon post.

    J'ai créé une base de données partagée. Donc un db avec les tables sources DB Source et des db pour chaque utilisateur/trice. DB User

    Tous ces utulisateurs sont dans un table assez basique :TB Users avec ID/Nom/email qui se trouve dans DB Source (partagée).

    Dans mon formulaire principal (DB User) J'ai une liste déroulante basée sur la Table TB Users et je voudrais qu'à l'ouverture de ma DB, la valeur par défaut de cette liste déroulante soit la valeur utilisée la session précédente.

    Donc en tant qu'utilisateur, j'ouvre la DB, je sélectionne mon nom dans cette liste (pour info cela permet de définir le user qui a créé les nouveaux enregistrements) puis je ferme la DB mais quand je reviens après, c'est toujours moi par défaut.

    Cela me parâit tellement bête mais je ne vois pas comment faire.

    Comme vous vous en doutez je ne suis pas du tout un pro d'Access, j'ai appris sur le tas comme on dit.

    Merci d'avance pour votre aide et n'hésitez pas à me poser toute question utile.

    Bonne journée,

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Tu peux stocker cette information dans une table avec le nom des USers.

    Pour cela il suffit d'utiliser un champ de type OUI/NON, coché ce champ lorsque tu quittes la base, et interroger la base pour savoir qui est le dernier.

    Cependant, cette table ne peut pas être dans la base source (si tu as une base source et une base sur chaque poste - donc base fractionné), mais dans la base sur chaque PC.

    Philippe

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 25
    Points : 24
    Points
    24
    Par défaut Oui mais
    Merci Philippe.

    J'avais pensé à cette option mais du coup comment faire pour que tout nouvel utilisateur soit mis à jour dans chaque DB user?

    ...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Il faudrait (dans la base sur le PC) lancé une routine qui interroge ta table USER de ta base source pour ajouter si besoin les nouveaux.

    Philippe

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    J'espérais quelque chose de plus simple.

    Mon temps d'accès à la DB source sur le serveur prend déjà pas mal de temps, cela ne va pas s'améliorer...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 113
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par Paul Guille Voir le message
    J'espérais quelque chose de plus simple.

    Mon temps d'accès à la DB source sur le serveur prend déjà pas mal de temps, cela ne va pas s'améliorer...
    Bonjour Paul,

    Voilà comment je ferais pour ma part mais je rajouterais un champ dans ta table User ("LOGIN")

    Sur l'événement chargement par exemple de ton formulaire :

    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
     
    Private Sub Form_Load()
     
    dim str as string, sNom as string, sEmail as string, rst as DAO.Recordset
     
    str = Environ("USERNAME")
    sNom = nz(dlookup("NOM","MaTableDesUsers","[LOGIN]='" & str & "'"),"")
     
    if sNom="" then
     
    sNom = inputbox("Bienvenue sur la BDD, vous êtes un nouvel utilisateur ! Merci de vous enregistrez en saisissant votre nom :")
    sEmail = inputbox("Merci de saisir également votre email :")
     
    set rst = currentdb.openrecordset("MaTableDesUsers")
    rst.addnew
    rst!LOGIN = str
    rst!NOM = sNom
    rst!EMAIL = sEmail
    rst.update
    rst.close
    set rst = nothing
     
    msgbox "Bravo ! Votre inscription a été validée."
     
    me.cbo_users.requery
     
    end if
     
    me.cbo_users = sNom
     
    end sub
    Environ("USERNAME") renvoie le login windows de l'utilisateur. Remplace cbo_users par le nom effectif de ton menu déroulant dans ton formulaire d'accueil et MaTableDesUsers par le nom réel de la table des utilisateurs. Le hic c'est qu'il te faudra peupler le champ LOGIN pour les personnes déjà inscrites dans ta bdd mais après l'ajustement se fera automatiquement et la création de nouveaux utilisateurs aussi...

    Bon courage

    el

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Excellent, je vais tester cela dans les plus brefs délais mais dans le principe c'est exactement ce que je recherchais.

    Merci et à bientôt.

    Paul

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 113
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par Paul Guille Voir le message
    Excellent, je vais tester cela dans les plus brefs délais mais dans le principe c'est exactement ce que je recherchais.

    Merci et à bientôt.

    Paul
    Parfait !
    Attention toutefois, j'ai fait simple dans la gestion des nouveaux utilisateurs... Je vous conseille d'anticiper le cas où l'utilisateur valide sans saisir de nom ou d'email, avec par exemple un renvoi en arrière si la saisie est nulle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ChoseName:
    sNom = inputbox("Bienvenue sur la BDD, vous êtes un nouvel utilisateur ! Merci de vous enregistrez en saisissant votre nom :")
    if sNom = "" then resume ChoseName

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Encore merci. J'ai implémenté le code ce matin et cela fonctionne à 80%.

    Tout d'abord voici le code adapté à ma DB: (c'est bête mais je ne sais pas comment insérer le code à part comme vous le faîtes

    *****
    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
    35
    36
    Private Sub Form_Load()
     
    Dim str As String, sNom As String, sPrénom As String, sEmail As String, rst As DAO.Recordset
     
    str = Environ("USERNAME")
    sNom = Nz(DLookup("Nom", "TB Requestor", "[LOGIN]='" & str & "'"), "")
     
    If sNom = "" Then
     
    sNom = InputBox("Bienvenue sur la BDD, vous êtes un nouvel utilisateur ! Merci de vous enregistrez en saisissant votre nom :")
    'If sNom = "" Then Resume ChoseName
     
    sPrénom = InputBox("Your Firstname please:")
     
    sEmail = InputBox("Merci de saisir également votre email :")
    'If sEmail = "" Then Resume ChoseName
     
    Set rst = CurrentDb.OpenRecordset("TB Requestor")
    rst.AddNew
    rst!LOGIN = str
    rst!Nom = sNom
    rst!Prénom = sPrénom
    rst!Email = sEmail
    rst.Update
    rst.Close
    Set rst = Nothing
     
    MsgBox "Thank you. You are now registered in FISH."
     
    Me.Usercombo.Requery
     
    End If
     
    Me.Usercombo = sPrénom & " " & sNom
     
    End Sub
    ****

    Il faut savoir que j'ai rajouter le champ prénom car j'ai fait la distinction dans ma DB.

    Et ma combo présente sur mon formulaire reprend une expression type: ID (caché) Prénom & " " & Nom et donc premier problème la mise à jour de la combo. J'ai essayé le code Me.Usercombo = sPrénom & " " & sNom mais cela ne fonctionne pas...

    Ensuite, comme très justement conseillé, j'ai voulu mettre en place le code en cas d'input null et j'ai le message d'erreur : Compile erreur / Label not defined qui se lance sur Resume ChoseName.

    Je suis désolé si j'ai loupé quelque chose d'évident mais je suis trop novice pour débeuger.

    Sinon c'est vraiment nickel, exactement ce qu'il me fallait.

    Merci

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 113
    Points : 124
    Points
    124
    Par défaut
    Bonour Paul,

    Tu y es presque !

    voici ton code légèrement modifié, je pense que cela devrait passer maintenant :

    Tout d'abord, dans un module VBA, enregistre la fonction suivante :

    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
     
    Public Function LastNumAuto() As Long
     
    Dim strSQL As String, rst As DAO.Recordset
     
    ' Instruction SQL pour récupérer le dernier NuméroAuto attribué
    strSQL = "SELECT @@IDENTITY AS Numero;"
     
    Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
    LastNumAuto = rst("Numero")
     
    rst.Close
    Set rst = Nothing
     
    End Function

    Ensuite, modifie ta procédure comme suit :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    Private Sub Form_Load()
     
    Dim str As String, sNom As String, sPrenom As String, sEmail As String, rst As DAO.Recordset
    dim i as long ' Nous allons attribuer à cette variable l'id de l'utilisateur ou l'id créé s'il s'agit d'un nouvel utilisateur
     
    ' Je déconseille généralement de mettre des signes diacritiques sur les noms de variable (accents, tréma, cédille, etc...)
     
    str = Environ("USERNAME")
    i = Nz(DLookup("ID", "TB Requestor", "[LOGIN]='" & str & "'"), 0)
     
    If i = 0 Then
     
    ChoseName: ' Tu as oublié de reprendre le nom de l'ancre, tu peux en mettre dans tes procédures lorsque tu veux forcer VB à se positionner à des endroits précis du code...
    sNom = InputBox("Welcome to PHISH Database! Since you're a new user, please register by providing your lastname first:")
    If sNom = "" Then Resume ChoseName
     
    ChoseFirstName:
    sPrenom = InputBox("Your Firstname please:")
    If sPrenom = "" Then Resume ChoseFirstName
     
    ChoseEmail:
    sEmail = InputBox("Lastly, please fill in your email:")
    If sEmail = "" Then Resume ChoseEmail
     
     
    Set rst = CurrentDb.OpenRecordset("TB Requestor")
    rst.AddNew
    rst!LOGIN = str
    rst!Nom = sNom
    rst!Prénom = sPrenom
    rst!Email = sEmail
    rst.Update
    rst.Close
    Set rst = Nothing
     
    i = LastNumAuto()
     
    MsgBox "Thank you. You are now registered in FISH."
     
    Me.Usercombo.Requery
     
    End If
     
    Me.Usercombo = i
     
    End Sub
    Pour que le code soit formaté dans les discussion, il suffit de cliquer sur l'icône dièse (#) en haut de la fenêtre et de saisir ton code entre les balise .

    La mise à jour de la combobox ne se met pas à jour car il est fort probable que la valeur retournée par cette dernière soit la colonne cachée (ID), il faut donc affecter la variable i à la combo à la fin du code pour mettre à jour la combo. Accessoirement, je suis parti du principe que le ID des utilisateurs dans ta table TB Requestor (idem, il vaut mieux éviter les espaces dans les noms d'objet... mets un underscore à la place) était de type NuméroAuto...

    Dis-moi si ces ajustements règlent ton problème. Si c'est le cas, pourras tu mettre en résolu la discussion ? Merci par avance.

    el

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Tout simplement PARFAIT.

    Merci beaucoup et bon weekend.

    Paul

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

Discussions similaires

  1. utilisateur par défaut
    Par IsabelleC dans le forum 4D
    Réponses: 3
    Dernier message: 18/02/2009, 15h12
  2. Utilisateur par défaut au demarrage de Vista
    Par neodelphi2007 dans le forum Windows Vista
    Réponses: 0
    Dernier message: 22/06/2008, 13h46
  3. Liste des objets appartenant aux utilisateurs par défaut
    Par ilalaina dans le forum Administration
    Réponses: 3
    Dernier message: 20/06/2008, 12h19
  4. Profil utilisateur par défaut sous KDE
    Par kenavoparis dans le forum KDE
    Réponses: 1
    Dernier message: 08/11/2007, 21h58
  5. Comment modifier l'utilisateur par défaut au démarrage de XP SP2 ?
    Par zemeilleurofgreg dans le forum Windows XP
    Réponses: 8
    Dernier message: 14/09/2006, 00h56

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