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 :

déconnecter les utilisateurs avec un message avant


Sujet :

VBA Access

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut déconnecter les utilisateurs avec un message avant
    bonjour

    j'ai récuperai le code suivant dans le FAQ et je l'ai un peu modifier.
    Je souhaite avertir l'utilisateur qu'il est déconnecte de la base avant de fermer la base donc j'ai fait sa sur un formulaire ouvert a l'ouverture de la base et qui est cache :

    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
    On Error GoTo Err_LogOffChk
    Dim Lancer As Boolean
    Dim rcd As DAO.Recordset
    Set rcd = CurrentDb.OpenRecordset("tblAdmin")
    rcd.MoveFirst
    Lancer = rcd.Fields(0)
    rcd.Close
    CurrentDb.Close
    If Lancer Then MsgBox "Vous avez été déconnecté par l'administrateur pour cause de maintenance Merci de reouvrir la base"
    If Lancer Then Application.Quit acQuitSaveAll
    Exit_LogOff:
       Exit Sub
    Err_LogOffChk:
       MsgBox Err.Number & vbCrLf & Err.Description, vbInformation, "Erreur"
       Resume Exit_LogOff

    Mon code marche mais j'ai un petit probléme.
    Un méssage est donc bien dis a l'utilisateur mais il faut que l'utilisateur clique sur ok pour qu'il soit vraiement déconnécte.
    Alors que moi je souhaite que sa soit dans cette ordre :
    on déconnecte l'utilisateur
    une message informe l'utilisateur
    et enfin il clique sur le message OK et la la base ce ferme.

    donc mon probléme est la mais je ne sais comment y résourdre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Lancer Then MsgBox "Vous avez été déconnecté par l'administrateur pour cause de maintenance Merci de reouvrir la base"
    If Lancer Then Application.Quit acQuitSaveAll
    je souhaite déconnecte les utilisateur pour faire mes modif sur la base Dorsale donc il ne faut personne de connécte, mais je veux que sur l'ecran des utilisateur un message leur soit affiche.

  2. #2
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 485
    Points : 183
    Points
    183
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Lancer Then Application.Quit acQuitSaveAll
    If Lancer Then MsgBox "Vous avez été déconnecté par l'administrateur pour cause de maintenance Merci de reouvrir la base"
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    non sa ne marche pas

    sa me ferme access et je n'ai même pas le message qui s'affiche.

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonsoir,

    re @popofpopof

    Bon, il y a bien une solution mais c'est barbare... Avec un formulaire invisible, tu appel un fichier .TXT ou autre qui précise la nature (Le pourquoi du comment !) de la fermeture d'Access.

    Tu appel le fichier sur l'action fermeture du formulaire invisible. Dès lors, lorsqu'Access va se fermer, le formulaire va se fermer et l'action de fermeture va s'exécuter et ton utilisateur sera au courant !

    Bon je sais je sors...
    Je continue mes investigations demain.

    @+ @popofpopof
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    c'est un peu trop barbare lol

    j'aimerai garde en arriéré plan access pour ne pas perturbé les utilisateurs.

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Je pense qu'il n'est pas possible de garder Access ouvert sans base de données ouverte...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    Pourtant si on ouvre une base sans formulaire cache (qui garde un enregistrement ouvert) la base dorsale n'est pas utiliser, juste si on ouvre un formulaire et des que l'on ferme ce formulaire la base dorsale n'est plus utiliser non???

    SI je trouve un code qui me permet de fermer tous les formulaire ou etat ouvert je pourrai peux être ouvrir un formulaire cache ( un autre formulaire cache) base sans table source qui déclache lui une message box sa pourrai marche non???

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Question idiote:

    Comment prends-tu la main sur l'application frontale pour déconnecter l'utilisateur?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    sur la base ou l'on trouve toutes les tables ( sur le serveur) j'ai une table administrateur avec dedans un champ OUI Non pour maitre la base en maitenance. Quand je clique sur ce champ plus aucune base ne peux ce connecte.

    Avec le code mis plus haut dans la discution il lie le même champ et si est mis en maitenance alors je souhaite qu'il déconnecte l'utilisateur de la base tu comprend? avec une clique sur un champ toutes les bases des utilisateurs doivent ce déconnécte.


    Tu me comprend ou pas??


    je vien de vérifier quand j'ouvre la base mon formulaire cache s'ouvre, j'ouvre ensuite un autre formulaire, si maintenant je ferme les deux formulaires la base sur le serveur n'est plus utiliser.
    Donc si je trouve le code qui me permet de ferme tous les formulaires ou etats ouvert sauf le formulaires cache "frmdummy" j'excécute ensuite l'ouverture d'un formulaire cache ( un autre) qui a sont ouverture m'ouvre un message box et dans le même temps le ferme automatiquement le formulaire "frmdummy" j'arrive au résultat souhaite. un message pour l'utilisateur et une déconnection de l'utilisateur.

    DOnc en résumé mon probléme est pour fermer tous les formulaires et les etats ouvert sauf le formulaire "frmdummy".

    TU aurai une solution???

  10. #10
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Bonsoir,

    Je n'ai pas directement de réponse à la question précédente, mais une question...

    Si (naturellement pour de très bonnes raisons) un de tes utilisateurs n'est pas devant son poste de travail...

    Que va-t-il se passer ?

    Domi2
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    tout les formulaires ouvert seron fermé et le message lui informe qu'il a était déconnecte pour causse de maintenance


    Pk cette question??

  12. #12
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir,

    Pour le frontal soit "déconnecté" de la dorsale, il faut qu'il n'y ai plus aucun objet qui pointe vers cette dorsale.

    Cela suppose donc que tout formulaire dépendant (i.e. ayant une source genre table ou requête pointant vers la dorsale doit être fermé.

    Il faut également que toutes les variables type recordset soient effectivement fermées.

    Dans ton code, il faudra sans doute ajouter un
    pour forcer Access à rompre le lien.
    Il faut de même s'assurer qu'il n'y a pas d'autres recordset mal fermés...


    Pour ma part, je procède légèrement différemment: au lieu d'un Msgbox j'utilise un formulaire et jongle avec les timers pour le fermer automatiquement au bout d'un certain temps:
    Toutes les 5 minutes je teste si l'application doit être fermée
    Si oui j'affiche mon formulaire à l'utilisateur qui peut alors quitter aussitôt (bouton quitter placé dans ce formulaire) ou reporter de 5 minutes la fermeture.... S'il n'est pas devant le pc ... au bout de 5 minutes l'appli se ferme automatiquement, sans attendre la réponse de l'utilsateur.
    Si les utilisateurs jouent le jeu (s'ils ne reportent pas indéfiniment), cela permet de les faire quitter tout en leur laissant le temps de finir ce qu'ils étaient en train de faire...
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  13. #13
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    ok peux tu me faire passe le code de ton formulaire que je regarde??

    je pense ajoute ensuite apres la fermeture de la base de lance un fichier VBS qui lui excécute un MSGBOX pour explique la fermeture ( en cas de non présence devant le PC)

    sur le formulaire cache

    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
    Private Sub Form_Timer()
    On Error GoTo Err_LogOffChk
    Dim Lancer As Boolean
    Dim rcd As Dao.Recordset
    Set rcd = CurrentDb.OpenRecordset("tblAdmin")
    rcd.MoveFirst
    Lancer = rcd.Fields(0)
    If Lancer Then
    rcd.Close
    CurrentDb.Close
        Shell "wscript " & "C:\access_pc3d\maintenance.vbs" & """"
    End If
    If Lancer Then Application.Quit acQuitSaveAll
     
    Exit_LogOff:
       Exit Sub
    Err_LogOffChk:
       MsgBox Err.Number & vbCrLf & Err.Description, vbInformation, "Erreur"
       Resume Exit_LogOff
     
    End Sub

    fichier vbs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set WshShell = WScript.CreateObject("WScript.Shell")
    msgbox "Vous avez été déconnecté de la base de donnée par l'administrateur pour cause de maintenance ou travail de Nuit / Merci de reouvrir la base de donnée"
    WshShell.Run """C:\Program Files\Microsoft Office\Office12\MSACCESS.EXE"" ""C:\access_pc3d\saisie base 3d.mdb"" /WRKGRP ""C:\access_pc3d\Sécurité.mdw"""

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    je souhaiterai ajoute une nouvelle fonction

    la nuit a 6h du matin la base sur le serveur est compacte, mais si un utilisateur est connécte le compactage ne se fait pas.

    Donc je souhaite déconnecte un utilisateur qui pourrai être connécté entre 5h et 6h

    Donc j'ai essai ce code mais sa ne marche pas ou est mon probléme??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If #5:00:00 AM# >= Time And Time <= #6:00:00 AM# Then
    rcd.Close
    CurrentDb.Close
        Shell "wscript " & "C:\access_pc3d\maintenance.vbs" & """"
    Application.Quit acQuitSaveAll
    End If

  15. #15
    Membre habitué
    Avatar de DamKre
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2007
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 485
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par popofpopof Voir le message
    non sa ne marche pas

    sa me ferme access et je n'ai même pas le message qui s'affiche.
    Toutes mes excuses, alors...
    Personnellement, j'avais une procédure similaire, et, chez moi, ça allait...
    DamKre
    Plus je découvre, plus je me rends compte que je ne sais rien...

  16. #16
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    j'ai trouve je laisse pour les prochain le code complet avec gestion mise en maintenance, fermeture la nuit et mise a jour automatique

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    Private Sub Form_Current()
        'Lors de l'activation de l'enregistrement,
        '      les paramètres par défaut son générés
        Me.TimerInterval = Me.prmScannTimer * 1000
    End Sub
     
    Private Sub Form_Open(Cancel As Integer)
    If VersionNo - NoVersion <> 0 Then
    'mise a jour du fichier vbs avant copier de la nouvelle base
      Dim oFSO As Scripting.FileSystemObject
    Dim source As String, destination As String
    Set oFSO = New Scripting.FileSystemObject
    source = "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\mise_a_jour_auto.vbs"
    destination = "C:\access_pc3d\mise_a_jour_auto.vbs"
    oFSO.CopyFile source, destination, True
     
        MsgBox "Une mise à jour de la base est disponible merci de cliquer sur ok la base va se mettre à jour"
     
        Shell "wscript " & "C:\access_pc3d\mise_a_jour_auto.vbs" & """"
        Application.Quit
    Else
    Set rsAlwaysOpen = CurrentDb.OpenRecordset("tbldummy")
    End If
    End Sub
     
    Private Sub Form_Timer()
     
        'ATTENTION : Les infos de la table sont en Secondes
        '            Les infos attendues en millisecondes.
        '            Penser à toujours multiplier par 1000 !
        '
        '
        'Sur le timer ...
        'Si l'heure limite est passée ...
        If TimeValue(Now()) >= TimeValue(Me.prmShutDownAt) And TimeValue(Now()) <= TimeValue(Me.prmShutDownlimite) Then
            'Si l'intervalle a déjà été remis à l'affichage
            If Me.TimerInterval = Me.prmShowTimer.Value * 1000 Then
                'Alors, quitter l'appli
         Shell "wscript " & "C:\access_pc3d\maintenance.vbs" & """"
                Application.Quit acQuitSaveAll
     
            'Sinon,
            Else
                'mettre l'intervalle d'affichage
                'Et afficher le formulaire
                Me.TimerInterval = Me.prmShowTimer.Value * 1000
                Me.Visible = True
     
            End If
        'Sinon,
        Else
            'Rendre de toutes façons le formulaire invisible
     
        If VerrouAdmin = False Then
     Me.Requery
     If VerrouAdmin = True Then
     fermeture
     End If
    Else
    fermeture
    End If
        End If
    End Sub
     
    Sub fermeture()
            If Me.TimerInterval = Me.prmShowTimer.Value * 1000 Then
                'Alors, quitter l'appli
         Shell "wscript " & "C:\access_pc3d\maintenance.vbs" & """"
                Application.Quit acQuitSaveAll
     
            'Sinon,
            Else
                'mettre l'intervalle d'affichage
                'Et afficher le formulaire
                Me.TimerInterval = Me.prmShowTimer.Value * 1000
                Me.Visible = True
     
            End If
    End Sub

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

Discussions similaires

  1. Comment faire déconnecter les utilisateurs d'une base
    Par ENIT-Info dans le forum Access
    Réponses: 23
    Dernier message: 28/02/2017, 14h57
  2. Déconnecter les utilisateurs
    Par JeremieT dans le forum VBA Access
    Réponses: 5
    Dernier message: 14/09/2007, 09h22
  3. Réponses: 3
    Dernier message: 02/04/2007, 17h05
  4. Réponses: 3
    Dernier message: 04/08/2006, 11h47
  5. [SQL-SERVER] "Déconnecter" les utilisateurs d'une
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 18/07/2006, 11h30

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