Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 07/12/2010, 15h58   #1
Membre éclairé
 
Avatar de tototiti2008
 
Inscription : octobre 2008
Messages : 327
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 327
Points : 321
Points : 321
Par défaut Ouvrir une base de données en lecture seule

Bonjour à tous,

Voilà, je fais une macro en Excel qui lance une application Access (d'où ce forum ), et j'aimerais que cette application Access m'ouvre une base de données (.mdb) mais en lecture seule

Y a-t-il un moyen simple d'ouvrir la base en lecture seule ?
Si vous avez le code directement en Access, je pense pouvoir me débrouiller pour le faire tourner sur Excel (à condition qu'il ne nécessite pas de références...)

Merci de m'avoir lu

Edit : quelques précisions : pour l'instant mon code d'ouverture de base ressemble à ça

Code :
AccApp.OpenCurrentDatabase CheminDoss & "\" & NomFic, False
mais OpenCurrentDatabase ne permet pas d'ouvrir en lecture seule (en tout cas je n'ai pas trouvé)

Par contre, OpenDatabase le permet semble t-il, mais si je fais

Code :
AccApp.DBEngine.WorkSpaces(0).OpenDatabase CheminDoss & "\" & NomFic, False, False
La base n'apparait pas dans Access, et comme le code utilise CurrentDb pour la suite, ça ne marche pas...

un peu paumé, sur le coup...
__________________
tototiti2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 19h21   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Une solution en utilisant une fonction de l'API windows.
L'idée est de créer une ligne de commande pour lancer Access et ouvrir la bdd avec le commutateur /ro (lecture-seule).

Voici le code (Le plus simple est de tout coller dans un nouveau module de code) :
Code :
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
Option Explicit
 
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Début Section Déclarations
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' *
' --------------------------------------------------------------
' Find Executable with FindExecutable
' --------------------------------------------------------------
' Codes erreurs renvoyés par FindExecutable
Private Const SE_ERR_FNF As Long = 2        ' Fichier Non Trouvé
Private Const SE_ERR_NOASSOC As Long = 31   ' Pas de programme associé
Private Const SE_ERR_OOM As Long = 8        ' Plus de mémoire disponible
' FindExecutable renvoie une valeur > 32 en cas de succès
' Ne fonctionne qu'avec des fichiers existants
Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" _
       (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
' *
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Fin Section Déclarations
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
Sub OuvrirBdd(strBdd As String, Optional bReadonly As Boolean = False)
Dim strAccessExe As String, lgRetVal As Long
Dim strCmd As String
 
strAccessExe = String(1024, vbNullChar)
lgRetVal = FindExecutable(strBdd, "", strAccessExe)
Select Case lgRetVal
    Case Is > 32
         strAccessExe = Left(strAccessExe, InStr(strAccessExe, vbNullChar) - 1)
         strCmd = """" & strAccessExe & """ """ & strBdd & """"
         If bReadonly Then strCmd = strCmd & " /ro"
         Shell strCmd, vbNormalFocus
    Case SE_ERR_FNF
         MsgBox "Fichier '" & strBdd & "' non trouvé"
    Case SE_ERR_NOASSOC
         MsgBox "Pas d'exécutable trouvé"
    Case SE_ERR_OOM
         MsgBox "Memoire insuffisante"
    Case Else
         MsgBox "FindExecutable a renvoyé le code d'erreur " & lgRetVal
End Select
End Sub
La procédure à utiliser est OuvrirBdd
Code :
OuvrirBdd "C:\Mes Documents\Bdd.mdb", True
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2010, 17h47   #3
Membre éclairé
 
Avatar de tototiti2008
 
Inscription : octobre 2008
Messages : 327
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 327
Points : 321
Points : 321
Bonjour LedZeppII

Décidément, tu es toujours là quand j'ai besoin d'aide

Merci beaucoup, je garde le code dans ma besace...
Mais si je maîtrise plus le VBA Excel que celui d'Access, je ne peux m'empêcher de penser que sur 2 produits Microsoft qui utilisent beaucoup VBA, il y en a un où les objets et commandes existantes sont assez facilement accessibles en VBA, et l'autre où quand on veut réaliser quelque chose qu'on trouve dans les menus on rame pas possible... quand même pénible, je trouve.

Où vas-tu chercher toutes ces utilisations d'API ? tu es vraiment un chef, félicitations
__________________
tototiti2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 22h24   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,
Citation:
Envoyé par tototiti2008 Voir le message
Bonjour LedZeppII
Mais si je maîtrise plus le VBA Excel que celui d'Access, je ne peux m'empêcher de penser que sur 2 produits Microsoft qui utilisent beaucoup VBA, il y en a un où les objets et commandes existantes sont assez facilement accessibles en VBA, et l'autre où quand on veut réaliser quelque chose qu'on trouve dans les menus on rame pas possible... quand même pénible, je trouve.
Je suis d'accord.
Le modèle objet d'Excel est plus riche que celui d'Access, en ce qui concerne la reproduction en VBA, des actions réalisées via l'interface utilisateur.

Citation:
Envoyé par tototiti2008 Voir le message
Où vas-tu chercher toutes ces utilisations d'API ?
Ici : Windows Development
J'y ai passé de très nombreuses heures, et c'est pour ça que des fois je fais lien entre une question posée sur le forum et quelque chose que j'ai vu là.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h05.


 
 
 
 
Partenaires

Hébergement Web