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 28/04/2011, 15h43   #1
Membre actif
 
Homme Quentin D.
Étudiant
Inscription : avril 2011
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Quentin D.
Âge : 25
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 175
Points : 165
Points : 165
Par défaut Travailler sur une autre base de données que celle où se trouve le code

Bonjour à tous,

Alors j'ai juste un petit problème.
J'utilise actuellement un code qui permet de transférer à partir d'access des données de classeurs excel.
En fait le problème est que je voudrais avoir mon code dans un fichier access et mes bases de données à modifier dans une autre.
Voici mon 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
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
 
Sub tranfertFeuilleClasseursFermes_VersAccess1()
Dim Cn As New ADODB.Connection
Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset
Dim oConn As ADODB.Connection
Dim j As Integer
Dim Fichier As String, Repertoire As String
Dim Tbl As TableDef
Dim Fich As String
 
'Boucle sur les classeurs Excel du répertoire cible
Repertoire = "C:\Users\name\Desktop\Work\Données\Folder"
Fichier = Dir(Repertoire & "\*.xls")
 
'Connection à la Base Access
Set oConn = CurrentProject.Connection
Set oRS = New ADODB.Recordset
 
Do While Fichier <> ""
    'Connection au classeur Excel
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & Repertoire & "\" & Fichier & ";" & _
    "Extended Properties=""Excel 8.0;"""
 
    TableExiste = False
 
    'Parcours du nom des tables de la base pour le fichier
    For Each Tbl In CurrentDb.TableDefs
        Fich = Left(Fichier, Len(Fichier) - 4)
        TableName = Tbl.Name
 
        If Fich = TableName Then
            TableExiste = True
            'requête pour extraire les données de la Feuil1
            oProdRS.Open "SELECT * FROM [Sheet1$]", Cn, adOpenStatic
            oRS.Open "Select * from " & TableName & "", oConn, adOpenKeyset, adLockOptimistic
 
            ' --- Transfert des données dans la base ---
            Do While Not (oProdRS.EOF)
                oRS.AddNew
                For j = 0 To oRS.Fields.Count - 1
                    oRS.Fields(j) = oProdRS.Fields(j).Value
                Next j
                oRS.Update
                oProdRS.MoveNext
            Loop
        oProdRS.Close
        oRS.Close
 
        ElseIf Left(Fichier, 3) = "NAV" Then
            TableExiste = True
            'requête pour extraire les données de la Feuil1
            oProdRS.Open "SELECT * FROM [Sheet1$]", Cn, adOpenStatic
            oRS.Open "Select * from " & HISTO_FUND & "", oConn, adOpenKeyset, adLockOptimistic
 
            ' --- Transfert des données dans la base ---
            Do While Not (oProdRS.EOF)
                oRS.AddNew
                    For j = 0 To oRS.Fields.Count - 1
                    oRS.Fields(j) = oProdRS.Fields(j).Value
                    Next j
                oRS.Update
                oProdRS.MoveNext
            Loop
        oProdRS.Close
        oRS.Close
        End If
    Next Tbl
 
    'Si pas de table du nom du fichier, créer une table
    If TableExiste = False Then
        CurrentDb.Execute "SELECT * INTO [" & Fich & "] FROM 6112Bis;"
        CurrentDb.Execute "CREATE INDEX NewIndex ON " & Fich & "(Numero, Date_Nav) WITH PRIMARY"
        'requête pour extraire les données de la Feuil1
        oProdRS.Open "SELECT * FROM [Sheet1$]", Cn, adOpenStatic
        oRS.Open "Select * from " & Fich & "", oConn, adOpenKeyset, adLockOptimistic
 
        ' --- Transfert des données dans la base ---
        Do While Not (oProdRS.EOF)
            oRS.AddNew
            For j = 0 To oRS.Fields.Count - 1
                oRS.Fields(j) = oProdRS.Fields(j).Value
            Next j
            oRS.Update
            oProdRS.MoveNext
        Loop
        oProdRS.Close
        oRS.Close
    End If
 
    'Fermeture de la connection au classeur Excel
    Cn.Close
Fichier = Dir
 
Loop
 
oConn.Close
Set oRS = Nothing
'Fermeture de la connection Access
Set oConn = Nothing
End Sub
Alors, je sais comment faire pour ouvrir un autre fichier access à partir de celui-ci, je remplace simplement :

Code :
1
2
 
Set oConn = CurrentProject.Connection
Par :

Code :
1
2
3
 
oConn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _
"Data Source= 'C:\maBase.mdb';"
Ou bien pour un fichier plus récent :

Code :
1
2
3
 
oConn.Open "Provider='Microsoft.ACE.OLEDB.12.0';" & _
"Data Source= 'C:\maBase.accdb';"
Donc en fait je voudrais pouvoir remplacer toutes mes lignes où j'ai un CurrentDB par quelque chose qui me permette de travailler sur une autre base de donnée, en l'occurence ici : maBase.accdb.

Merci d'avance pour vos réponses.
Nitromard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 15h51   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 623
Points : 11 623
Bonjour,

CurrentDb et CurrentProject travaille sur la base ouverte. Même si le code est dans une bibliothèque.

CodeDB et CodeProject travaille sur la base où est contenu le code. Une base principale ou une bibliothèque.

Si tu souhaites utiliser une db particulière tu as tout intéret à la mettre en variable globale dans la base principale.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 16h39   #3
Membre actif
 
Homme Quentin D.
Étudiant
Inscription : avril 2011
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Quentin D.
Âge : 25
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 175
Points : 165
Points : 165
Je ne suis pas sûr de comprendre...

J'ai 2 base de données :
- code.accdb où se trouve uniquement un module avec mon code dedans.
- maBase.accdb où se trouve plusieurs tables sur lesquels j'aimerais importer des données excel.

Que mettre à la place de currentDB.execute, currentDB.TableDefs, etc...?

J'explique pourquoi j'ai besoin de cela :
J'utilise un fichier batch qui fait appel à ma base de données. Lorsqu'elle s'ouvre un autoexec se lance et lance le programme.
J'aimerais séparer les 2, DB et code, pour ne pas, à chaque fois que j'ouvre ma DB, lancer le programme.

Comment puis-je faire ?
Nitromard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 17h18   #4
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 623
Points : 11 623
Attache simplement tes tables ACCESS dans ton fichier Code.
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 09h11   #5
Membre actif
 
Homme Quentin D.
Étudiant
Inscription : avril 2011
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Quentin D.
Âge : 25
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 175
Points : 165
Points : 165
C'est déjà le cas...Et j'essaye justement de les séparer...
Nitromard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 09h40   #6
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 623
Points : 11 623
Citation:
Envoyé par Nitromard Voir le message
J'utilise un fichier batch qui fait appel à ma base de données. Lorsqu'elle s'ouvre un autoexec se lance et lance le programme.
J'aimerais séparer les 2, DB et code, pour ne pas, à chaque fois que j'ouvre ma DB, lancer le programme.

Comment puis-je faire ?
C'est le fonctionnement classique d'une base séparée du programme. D'un coté tu as les données et de l'autre le programme avec les liens (attaches) de tes tables.
Cela n'empêche pas le fichier contenant les tables de contenir du code. Pour ton fichier programme (qui contient les attaches) cela reste transparent (pas d'exécution, pas de visibilité de celui-ci).

C'est plus souple de travailler avec des attaches.

Si tu ne souhaites pas exécuter ton autoexec, utilise la touche shift au démarrage ou envoie lui un paramètre via le cmd dans la ligne de commande (voir mon tuto sur les options de la ligne de commande).

Est-ce que cela répond à ta question ?
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 09h40   #7
Membre actif
 
Homme Quentin D.
Étudiant
Inscription : avril 2011
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Quentin D.
Âge : 25
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 175
Points : 165
Points : 165
Ok je pense que j'ai compris.
Je résume au cas où ^^ :
J'ai un fichier code dans lequel, j'ai des attaches aux tables du fichier base ainsi que le code d'origine(celui que j'ai dans mon premier post).
La macro autoexec se trouve dans le fichier code ou dans le fichier base? J'imagine dans le code, puisque je voudrais justement l'avoir dedans.
Je viens de regarder ce lien pour les attaches :
http://office.microsoft.com/fr-ch/ac...27658.aspx#BM3

Le problème est qu'il faut attacher des tables apparemment déja existante.
Dans ma base de données j'ai en fait une série de tables ayant comme nom des numéro à 4 chiffres (ayant toute la mm structure, cad : noms des champs, nombre de champs et clé primaire), 3 tables spécifiques de structures toutes différentes, une table source.
La table source est juste une table ayant la mm structure que les tables numéros, mais qui me permet de créer de nouvelles tables.
En effet, je copie la structure de la table source pour créer une nouvelle table numéro si le nom du classeur excel à importer n'existe pas encore dans ma DB.
Est-ce que si je met ma table source en attache, les autres tables crées seront aussi en attache, ou dois-je le faire manuellement ?
Et du coup est-ce que les données seront importées correctement si mon code n'est pas dans mon fichier base?
Nitromard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 11h17   #8
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 623
Points : 11 623
Bonjour,
Non si tu crées une table elle le sera dans le fichier contenant le code. Il faut explicitement la créer dans la base distante.
  • Tu peux créer la structure dans la base distante via DAO, puis l'attacher ensuite la remplir.
  • Tu peux également choisir de la créer puis de l'exporter dans la base distante et l'attacher.

Une table attachée a les mêmes propriétés qu'une table locale. La seule chose qu'on ne peut pas faire c'est les relations d'intégrités.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 14h27   #9
Membre actif
 
Homme Quentin D.
Étudiant
Inscription : avril 2011
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Quentin D.
Âge : 25
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 175
Points : 165
Points : 165
Bonjour,

J'ai fait quelques tests pour voir ce que je préfèrerais faire.
Je pense donc mettre mon code avec ma tablesource dans le fichier de mes attaches.

Je pense plutôt créer mes tables dans ma base d'attache et ensuite les exporter vers ma base, puis créer une attache.
Je vais voir si tout ceci exsite en code VBA access, sinon une petite (ou une grosse ^^) aide serait la bienvenue.

Merci déjà pour vos réponses et pour votre aide.
Nitromard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 17h09   #10
Membre actif
 
Homme Quentin D.
Étudiant
Inscription : avril 2011
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Quentin D.
Âge : 25
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 175
Points : 165
Points : 165
Rebonjour,

J'ai trouvé une méthode plutôt efficace pour faire ce que je veux, je la met ici, et j'attends votre avis pour mettre la discussion en résolu :

Code :
1
2
3
DoCmd.TransferDatabase acExport, "Microsoft Access", "C:\Users\qdeutschle\Desktop\Database1.accdb", acTable, Fich, Fich
        DoCmd.DeleteObject acTable, Fich
        DoCmd.TransferDatabase acLink, "Microsoft Access", "C:\Users\qdeutschle\Desktop\Database1.accdb", acTable, Fich, Fich
Encore merci pour tout ^^
Nitromard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 13h24   #11
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 623
Points : 11 623
Parfait !
Il ne manque plus qu'à mettre les chemins en variable et d'inclure le code d'une fenêtre Ouvrir fichier (dispo dans la faq) pour que ton appli soit pratique.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab 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 08h37.


 
 
 
 
Partenaires

Hébergement Web