Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
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 22/08/2006, 12h41   #1
Membre à l'essai
 
Inscription : avril 2004
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 38
Points : 23
Points : 23
Par défaut Authentification et persistance

Bonjour,

J'utilise une macro VBA, la même ou presque pour Word, Excel, Outlook. Cette VBA fait appel à un OCX (dont je peux modifier le source au besoin), et qui fait appel à une procedure d'authenfication simple : Dialogue avec demande de login et mot de passe (dans cet OCX).

Je voulais savoir s'il y a un moyen simple pour faire en sorte que l'utilisateur qui travaille avec cet macro n'est besoin que de s'authenfier une fois. A l'heure actuelle, lorsque l'utilisateur clique sur le bouton qui execute la macro VBA, l'authenfication est demandée à chaque appel de cet macro.

Plus simplement, l'information "authenfication effectuée" n'a de persistance que tant que la macro reste ouverte. Je voulais donc savoir s'il y avait un moyen de preserver cette persistance jusqu'à la fermeture de Word (ou Excel, ou...).

Merci.
chess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2006, 06h54   #2
Membre régulier
 
Enseignant
Inscription : août 2006
Messages : 141
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : août 2006
Messages : 141
Points : 70
Points : 70
Envoyer un message via MSN à Lexot2
Bonjour

Voici une solution possible :

Code :
1
2
3
Private Sub Workbook_Open()
authent = True
End Sub
Code :
Public authent As Boolean
Code :
1
2
If authent = True Then
authent = False
Ecriture procédure authentification
A l'ouverture du classeur, un drapeau "authent" est positionné.
Dès que la demande d'authentification est exécutée, le drapeau n'est plus positionné.
La demande d'authentification sera exécutée une seule fois à chaque ouverture du classeur.
Lexot2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2006, 10h20   #3
Membre à l'essai
 
Inscription : avril 2004
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 38
Points : 23
Points : 23
Ca n'est pas trop ça. Pour faire une comparaison, dans le cas d'excel, il faudrait que l'authentification soit valide tant que Excel reste ouvert. Donc l'utilisateur s'authentifie à l'ouverture d'un premier classeur. Ceci fait, l'utilisateur peut ensuite fermer/ouvrir ce classeur ou d'autres classeur sans qu'il lui soit demandé à nouveau de s'authenfier.

Merci quand même pour cette réponse.
chess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2006, 17h08   #4
Membre régulier
 
Enseignant
Inscription : août 2006
Messages : 141
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : août 2006
Messages : 141
Points : 70
Points : 70
Envoyer un message via MSN à Lexot2
Bonjour

Avec une pièce jointe comme exemple, et aussi quelques lignes de code, je comprendrais mieux ce que tu veux faire. A bientôt
Lexot2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 11h10   #5
Membre à l'essai
 
Inscription : avril 2004
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 38
Points : 23
Points : 23
Je ne crois pas que le code ou une piece jointe change grand chose. Je vais essayer de mieux m'exprimer en donnant un exemple d'utilisation complet.

A la base, j'ai un OCX, qui sera utilisé par une macro VBA. Cet OCX demande une authentification. Si j'applique ton code, ça donnera :

- Ouverture d'excel
- Ouverture d'un classeur
- Appel de la macro (demande d'authentification)
- Fermeture du classeur
- Fermeture de la macro
- Ouverture d'un autre classeur (ou réouverture)
- Appel de la macro (demande à nouveau une authentification) (<-- normal puisque les variables même globales sont re-initialisé à chaque appel)
- fermeture du classeur
- fermeture d'Excel

Ce que je voudrais :

- Ouverture d'excel
- Ouverture d'un classeur
- Appel de la macro (demande d'authentification)
- Fermeture du classeur
- Fermeture de la macro
- Ouverture d'un autre classeur (ou réouverture)
- Appel de la macro (NE DOIT PLUS DEMANDER L'AUTHENTIFICATION)
- fermeture du classeur
- fermeture d'Excel

L'idée, donc, est que l'authentification soit effectuée une bonne fois pour toute, au premier appel de la macro VBA. Si l'utilisateur quitte la macro, puis la réouvre, je ne souhaite que l'authentification lui soit à nouveau demandé. Cette authentification doit persister tant qu'Excel reste ouvert.

Pour un autre exemple, supposons que l'on ai une macro pour transformer le classeur courant en PDF. On suppose également que l'usage de cette macro requiere une authentification login/mp. Il serait logique que l'on demande qu'une fois à l'utilisateur de s'authentifier lorsqu'il va générer un PDF, et non pas, à chaque fois qu'il souhaite en générer un. C'est le resultat auquel je veux arriver.
chess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 11h28   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
peu-être un classeur excel.. sans aucune feuille visible contenant l'appel à l'Ocx.. une fonction publique de ce classeur permettant de vérifier l'authentification

Code :
1
2
3
4
5
6
7
8
9
 
Dim bOk As Boolean
'Avec bbil comme mot de passe
Function authent() As Boolean
 If Not bOk Then
   bOk = "bbil" = InputBox("Mot de passe")
 End If
 authent = bOk
End Function
ensuite dans chaque classeur réclamant une authentifcation tu peu t'inspirer de :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
Dim monBok As Boolean
Private Sub Workbook_Open()
 monBok = Application.Run("authent.xls!authent")
 If Application.Run("authent.xls!authent") Then
   MsgBox "Authentification réussi"
  Else
  MsgBox "Erreur Authentification"
End If
 
End Sub
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 07h41   #7
Membre régulier
 
Enseignant
Inscription : août 2006
Messages : 141
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : août 2006
Messages : 141
Points : 70
Points : 70
Envoyer un message via MSN à Lexot2
Bonjour

J'espère que cette méthode conviendra :
Tout d'abord, il faut créer un classeur Authentification.xls, et ajouter ces codes :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Workbook_Open()
 
'La demande d'authentification sera exécutée dans cette procédure
If authent = True Then
    Range("A1") = "drapeaut"
Else
    Range("A1") = "drapeauf"
End If
End Sub
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("A1") = ""
End Sub
 
Public authent As Boolean
'déclaration en zone module
Ensuite il faudra ajouter dans chaque classeur à authentifier :
Code :
1
2
3
4
5
6
7
8
9
Sub Macro1()
 
a1 = Workbooks("Authentification.xls").Worksheets("Feuil1").Range("A1").Value
If a1 <> "drapeaut" Then
    ' Procédure authentification
Else
    'Suite sans authentification
End If
End Sub
La cellule A1 devra être masquée et protégée.
Méthode utilisée
On place dans le classeur Authentification.xls un drapeau vrai ou faux dans la cellule A1, après une demande d'authentification. Ce classeur doit rester ouvert en permanence. A la fermeture du classeur, le drapeau est effacé.
Les autres classeurs vérifient la présence du drapeau, et occultent la demande d'authentification, si le drapeau vrai est présent.
Lexot2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 11h16   #8
Membre à l'essai
 
Inscription : avril 2004
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 38
Points : 23
Points : 23
Merci à tous les deux mais ces deux solutions, bien que valables pour Excel, me paraisse difficile à transposer pour les autres produits MS Office (voir mon message initial).

Je vais essayer de trouver une solution externe. Une derniere question. Peut ecrire du code qui s'execute à l'ouverture d'Excel (ou de Word, Acces ou Outlook) et à la fermeture. En d'autres terme, existe-t-il des évenements style OnWordOpen et OnWordClose ?
chess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 11h23   #9
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
pour excel,Word voir
Utilisation d'événements avec l'objet Application ..
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 09h01   #10
Membre à l'essai
 
Inscription : avril 2004
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 38
Points : 23
Points : 23
Aprés divers essais, j'ai finalement trouvé mon bonheur sous la forme d'un developpement d'add-in.

Merci encore pour vos aides.

PS: Dois-je mettre résolu dans le tag ?
chess est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2006, 02h13   #11
Membre régulier
 
Enseignant
Inscription : août 2006
Messages : 141
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : août 2006
Messages : 141
Points : 70
Points : 70
Envoyer un message via MSN à Lexot2
Bonsoir

Tu peux mettre [Résolu] à ton post, et donner si possible un exposé (même sommaire) de ta solution qui pourrait servir à d'autres. Cela te permettrait d'apporter ta pierre à l'édifice "Developpez.com". Ce n'est pas l'une des 7 merveilles du monde, mais c'est tout de même une belle oeuvre!
Lexot2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h50.


 
 
 
 
Partenaires

Hébergement Web