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 15/01/2012, 11h18   #1
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
Par défaut Comment lier une base à une autre sans spécifier son chemin d'accès mais seulement son nom

Bonjour tout le monde,

En supposant que mes 2 bases sont enregistrées dans le même dossier, je recherche le moyen (si bien sûr c'est possible) de lier une base A à une base B, sans avoir à spécifier le chemin d'accès complet, mais seulement en donnat le nom de la base A.
Mon but est de pouvoir copier les 2 bases sur un autre PC, et de ne pas avoir à chaque fois à relier les 2 bases (vu que le chemin d'accès diffère) pour pouvoir les utiliser.

Je vous remercie par avance pour votre aide
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 17h05   #2
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 225
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 225
Points : 9 928
Points : 9 928
Envoyer un message via Skype™ à Domi2
Bonjour,

Tu peux prendre connaissance de ce tutoriel, cela devrait répondre à ton besoin : Liaisons dynamiques pour bases fractionnées.

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
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 21h21   #3
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
merci beaucoup pour ta réponse Domi2

vu le but de mon projet (utiliser SQL et QBE sur 2 tables liées), je n'ai pas réellement besoin d'une gestion aussi performante des bases liées. De plus, je ne connais pas VBA, et le temps me manque pour apprendre ce langage...
En fait, j'ai pu lire qu'on pouvait utiliser les chemins relatifs au lieu de ceux absolus pour lier 2 bases :
- en ouvrant la feuille Propriété de la Requête
- avant d'effectuer le choix de la table on modifie le champ Base source
et il était dit qu'il fallait faire attention à la valeur du Dossier de la base de données par défaut qui est implicitement pris en compte.

J'ai donc enregistré mes 2 bases (Base1 et Base2) dans le même dossier. Puis pour créer une requête dans Base1 (en utilisant des tables de Base2) j'ai tapé "Base2" dans l'attribut Base source de la feuille de propriétés, mais cela ne marche pas...
j'ai aussi essayé "Base2.accdb"... (je suis sous Access 2007)

Je vous remercie par avance pour votre aide
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 08h22   #4
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Un manière simple d'éviter d'entrer dans un développement VBA, c'est de faire sur le second PC une arborescence identique que celle du PC sur lequel tu développes.

Imaginons que sur ton poste, tu développes la base BASE1 avec des tables liées issues de la BASE2. Tes bases sont stockées dans le même répertoire :

C:\Mes Documents\Developpez

Ainsi la première fois que tu recopies tes bases sur le second PC tu crées la même arborescence.
Tu ne devrais pas avoir de problème par la suite.
__________________
Jeannot

Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., [B]Sources VBA

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 09h22   #5
Membre éprouvé
 
Homme Robert LINCE
Conseiller psycho-pédagogique
Inscription : octobre 2007
Messages : 281
Détails du profil
Informations personnelles :
Nom : Homme Robert LINCE
Localisation : Belgique

Informations professionnelles :
Activité : Conseiller psycho-pédagogique
Secteur : Enseignement

Informations forums :
Inscription : octobre 2007
Messages : 281
Points : 483
Points : 483
Bonjour.
Sans apprendre tout VBA , voici quelque chose qui me semble répondre à ta demande.
D'abord, la fonction qui récupère le chemin du répertoire courant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Function ParentDir(ByVal str As String) As String
' Fonction qui permet de récupérer le répertoire courant de la base de donnée
    Dim i As Integer
 
     ' repère le dernier "\"
    If Right(str, 1) = "\" Then str = Left(str, Len(str) - 1)
 
     ' maintenant regarde le précédent
    For i = Len(str) To 1 Step -1
        If Mid(str, i, 1) = "\" Then
            Debug.Print "Fichier " & Right(str, Len(str) - i)
            str = Left(str, i)
            GoTo fin01
        End If
    Next i
 
fin01:
        Debug.Print "Répertoire " & str
        ParentDir = str
 
End Function
Ensuite une fonction qui établit la liaison vers deux tables (dans cet exemple) d'une autre base située dans le même répertoire (que j'ai appelée Nom_de_la_base.accdb). Dans cet exemple, j'ai utilisé le même nom pour la table-source et pour sa liaison (table liée). Toujours dans cet exemple, j'ai déclenché la procédure sur l'ouverture d'un formulaire. Bien entendu tu peux aussi la déclencher avec un bouton dans un formulaire.
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
45
46
47
48
49
50
51
52
53
Private Sub Form_Open(Cancel As Integer)
On Error GoTo Err_Form_Open
 
' * Effacement des tables liées présentes
    DoCmd.SetWarnings False
    DoCmd.DeleteObject acTable, "Table1"
    DoCmd.DeleteObject acTable, "Table2"
    DoCmd.SetWarnings True
 
' * Liaison avec les tables 
    Dim strMotPasse As String
    Dim strCheminBd As String
    Dim strNomTable As String
    Dim strConnect As String
    Dim oDb As DAO.Database
    Dim oTbl As DAO.TableDef
 
  ' Définit mot passe, nom table, chemin base de données
    strMotPasse = ""
    strCheminBd = ParentDir(Application.CurrentDb.Name) & "Nom_de_la_base.accdb"
 
    Set oDb = CurrentDb      ' Instancie l'objet Database
 
    strConnect = "MS Access;pwd=" & strMotPasse & ";DATABASE=" & strCheminBd       ' Définit la chaine de connexion permettant la liaison
 
  ' Crée un lien vers la table 'Table1' de Donnees
    strNomTable = "Table1"
    Set oTbl = oDb.CreateTableDef(strNomTable)
    With oTbl
        .Connect = strConnect
        .SourceTableName = "Table1"
    End With
  ' Ajoute la table à la base de données
    oDb.TableDefs.Append oTbl: oDb.TableDefs.Refresh
 
  ' Crée un lien vers la table 'Table2'
    strNomTable = "Table2"
    Set oTbl = oDb.CreateTableDef(strNomTable)
    With oTbl
        .Connect = strConnect
        .SourceTableName = "Table2"
    End With
  ' Ajoute la table à la base de données
    oDb.TableDefs.Append oTbl: oDb.TableDefs.Refresh
 
    MsgBox "Tous les liens ont été actualisés.", vbInformation
 
Exit_Form_Open:
    Exit Sub
Err_Form_Open:
    MsgBox Err.Description
    Resume Exit_Form_Open
End Sub
J'espère que ça correspond à ce que tu cherches...
Cordialement
RobiPMS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 17h33   #6
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
merci pour ta réponse Jeannot45, en fait le "deuxième pc" je ne le connais pas et je n'y ai pas accès d'où le fait que je ne puisse pas créer le même chemin.

RobiPMS je te remercie pour ton aide
je rencontre quelques difficultées pour mettre en place le code :
j'ai ouvert mon formulaire : Feuille de Propriétés-> Evènement->sur activation->générateur de code
puis j'ai copié tes 2 fonctions dans :

Code :
1
2
3
Private Sub Form_Current()
...
End Sub
mais rien ne se passe quand j'ouvre le formulaire.

je ne sais pas si j'ai fait n'importe quoi...
merci par avance pour votre aide
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 17h48   #7
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 225
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 225
Points : 9 928
Points : 9 928
Envoyer un message via Skype™ à Domi2
Bonjour,

La première fonction, tu dois la copier dans un module de code standard et non dans le module du formulaire.

Et la deuxième procédure, tu dois la copier non pas dans l'événement Sur activation, Form_Current, mais dans l'événement Sur ouverture, Form_Open.

Ca devrait aller mieux.

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
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 18h10   #8
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
merci Domi2

j'ai fais les changements adéquats, mais il ne se passe toujours rien.
j'ai juste enregistré les 2 fonctions aux bons endroits (je ne pense pas avoir fait d'erreur sur les noms des tables et des bases, car j'ai repris les mêmes que dans le code de RobiPMS pour éviter des erreurs et tester le code),
mais y a-t-il une manip générale essentielle ou des changements importants à faire dans le code VBA pour que ça fonctionne ?

merci pour votre aide
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 18h35   #9
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonjour,

Citation:
y a-t-il une manip générale essentielle ou des changements importants à faire
L'exécution des macros peut être bloqué par le niveau de sécurité configuré.

Sinon pour la demande initiale d'avoir le même chemin pour chaque base, quelque soit le PC,
il est également possible d'utiliser les liens symbolique vers un dossier.
lien symbolique.

Avec des liens symboliques ou des jonctions de partitions, il est même possible
de faire pointer un lien vers une autre partition, sans qu'un programme ne soit perturbé.
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 19h13   #10
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
merci pour ta réponse BlueMonkey

au niveau des liens symboliques (à moins d'avoir mal compris), si je change de répertoire mes 2 bases, alors je dois recréer le lien symbolique non?

et en enregistrant mes 2 bases sur un autre pc, je dois créer le lien symbolique aussi sur le 2ème pc ?
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 19h20   #11
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Citation:
si je change de répertoire mes 2 bases, alors je dois recréer le lien symbolique non?
C'est exact.

Citation:
En enregistrant mes 2 bases sur un autre pc, je dois créer le lien symbolique aussi sur le 2ème pc
Si la base n'est pas dans le répertoire attendu par le lien, oui.

Il faut bien voir que les liens permette juste de rendre transparent le fait qu'on travaille,
sur dans un répertoire ou un autre. Rien de plus.

exemple : on travaille sur plusieurs version d'une base ou d'un logiciel.
Pour passer d'une version à l'autre, il suffit de changer le lien symbolique pour pointer sur la version souhaitée.
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 19h34   #12
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
d'accord merci BlueMonkey

je vais peut-être me répéter, mais mon but est de remettre mes 2 bases liées à une personne, et qu'une fois qu'elle les aura enregistrées sur son pc qu'elle n'ait pas à relier les 2 tables de mes 2 bases pour executer les requêtes.
donc le mieux c'est peut-être le code VBA, mais je n'arrive pas à le faire fonctionner... et si j'ai bien compris je n'ai rien à faire de plus que d'enregistrer les 2 fonctions de RobiPMS ?

en enlevant la sécurité : Access m'affiche le formulaire que j'ai mis par défaut à l'ouverture de ma base. Je l'ai donc fermé, ainsi que celui sur ma table1. Puis en voulant rouvrir le formulaire de table1 j'ai le message suivant :
"Le moteur de bases de données n'a pas pu verrouiller la table "Table1" car elle est déjà utilisée par une autre personne ou un autre processus."

serait-ce la source du problème?

merci par avance pour votre aide
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 19h43   #13
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Citation:
"Le moteur de bases de données n'a pas pu verrouiller la table "Table1" car elle est déjà utilisée par une autre personne ou un autre processus."
Pour ce type de problème, essaye de sortir d'Access, puis de relancer.
Si ça ne fonctionne pas. Essaye en fermant la session Windows.

Enfin si rien de cela fonctionne, essaye un compactage (réparation induite )
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 22h12   #14
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
merci BlueMonkey!
je crois que je m'embourbe dans ce code VBA, que je n'ai peut-être pas assez adapté.
De plus, j'ai retrouvé de la doc sur ma 1ère méthode dont le but est que les tables de Base2 n'apparaissent pas dans Base1 (ce qui n'était pas le cas car j'utilisais l'importation sous Access) :
mettre dans "Base source" de la feuille de propriétés d'une requête le nom de ma 2ème base, et il faut (ce que je n'avais pas fait) pour utiliser les champs faire précéder leur nom par le nom de la 2ème base (dans le code SQL) :
exemple : Base2.Table1.Prenom

néanmoins le fichier doit se trouver dans C:\Users\sophie\documents
donc je le mets à cet endroit, mais quand j'execute Access me dit :
"Fichier C:\Users\sophie\documents\Base2.mdb introuvable"

je pense que tout cela est due à l'extension... mais pourquoi veut-il un ".mdb" (extension anglaise?) au lieu d'un ".accdb"? que puis-je faire (j'arrive pas à changer cette extension)?

merci par avance pour votre aide
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 11h13   #15
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
Bonjour,
je viens de trouver que l'extension ".mdb" correspond à Access 2002-2003, j'ai donc enregistré ma 2ème base en Access 2002-2003.

Quand j'exécute ma requête dans Base1 utilisant une table de Base2 ça fonctionne. Néanmoins Base2 doit contenir un mot de passe à l'ouverture, et quand j'en mets un, la requête dans Base1 ne fonctionne plus : j'ai le message "Mot de passe non valide", alors qu'on ne m'a demandé à aucun moment d'entrer le mot de passe de la 2ème base pour exécuter ma requête.
Auriez vous une idée ? merci par avance

je demande aussi si passer d'Access 2007 à 2002-2003 implique d'importantes pertes de fonctionnalité de ma base ?
sophie) 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 23h39.


 
 
 
 
Partenaires

Hébergement Web