Excel access

Le
José
Merci d'avoir pris le temps de me répondre.
Je cherche effectivement un code VBA qui relierait 2 tables d'une base
Access entre elles .
Justement l'utilisateur n'est pas censé avoir Access et la liaison dans mon
cas devrait se faire à partir d'une Userform Excel.

Mais est ce que VBA peut faire cela ???
A bientôt
José
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #5383041
Il y a un truc qui serait possible !

Assure toi que le MDAC est à jour - site de microsoft
MDAC = Microsoft Data Access Component

Tu ajoutes dans l'éditeur de code d'excel, la référence
suivante : "Microsoft Activex Data Object 2.x librairy"

Ceci est un exemple avec la base de donnée Comptoir.mdb sur
le CD d'office...

Je n'ai jamais tenté le coup à savoir si c'était possible d'utiliser ADO
quand ACCESS n'est pas installé sur une machine... à toi de tester...

La requête retenue ne sert à rien d'autre qu'au test !!!!

'-------------------------------
Sub Le_test()

Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim Base_Data As String
Dim Requete As String

'Location et Nom de la base de données
Base_Data = "C:Comptoir.mdb"

' Ouvrir la connection avec la base de donnée
cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Base_Data

Requete = "SELECT Employés.[N° employé], " & vbCrLf & _
" Commandes.[Code client] FROM Employés" & vbCrLf & _
" INNER JOIN Commandes ON " & vbCrLf & _
"Employés.[N° employé] = Commandes.[N° employé]"

'Exécution de la requête
rst.Open Requete, cnt, adOpenForwardOnly

'copie vers la cellule A1 le résultat de la requête
Range("A1").CopyFromRecordset rst

'Fermeture du RecordSet et de la connexion
rst.Close
cnt.Close
End Sub
'-------------------------------






"José" 475d92db$0$14475$
Merci d'avoir pris le temps de me répondre.
Je cherche effectivement un code VBA qui relierait 2 tables d'une base
Access entre elles .
Justement l'utilisateur n'est pas censé avoir Access et la liaison dans mon
cas devrait se faire à partir d'une Userform Excel.

Mais est ce que VBA peut faire cela ???
A bientôt
José
FFO
Le #5382781
Rebonjour josé

Je te propose pour lier 2 tables Access entre elles de lier en fait une
nouvelle table que l'on crée sur une table existante de la base
Il est impossible pour moi de lier entre elles 2 tables déjà en place dans
une base
la liaison s'établissant à la création de l'une d'entre elles

Je ne sait pas si il ne sera pas incontournable pour l'utilisateur d'avoir
access installé sur son poste car il faut activer la référence "Microsoft
Access 11.0 Object Library" (Outils/Références)

Je te propose donc ce code à mettre dans la Macro Excel :

Dim ObjAcc As Access.Application
Set ObjAcc = CreateObject("Access.Application")
ObjAcc.OpenCurrentDatabase "C:CheminBase.mdb"
ObjAcc.UserControl = True
AppActivate "Microsoft Access"
strConnect = "MS Access;DATABASE=C:CheminBase.mdb"
'on vérifie la présence de la table à créer dans la base et de la supprimer
dans cette éventualité
For Each tdf In CurrentDb.TableDefs
If tdf.Name = "Tablenouvelle" Then
CurrentDb.Execute "Drop table Tablenouvelle"
End If
Next
'On crée la nouvelle table en la liant à la table existante de la base
Set oTbl = CurrentDb.CreateTableDef("Tablenouvelle")
With oTbl
.Connect = strConnect
.SourceTableName = "Tableexistante"
End With
'On ajoute la table à la base de données
CurrentDb.TableDefs.Append oTbl: CurrentDb.TableDefs.Refresh
'On ferme la base et l'application Access
ObjAcc.CloseCurrentDatabase
ObjAcc.UserControl = False
ObjAcc.Application.Quit

Les lignes :

ObjAcc.UserControl = True
AppActivate "Microsoft Access"

ne sont pas obligatoire elle permettent d'activer à l'écran la base Access

Si tu choisis de ne pas les mettre supprimes aussi la ligne :

ObjAcc.UserControl = False

J'espère ainsi avoir répondu à ton attente
Dis moi !!!!



Merci d'avoir pris le temps de me répondre.
Je cherche effectivement un code VBA qui relierait 2 tables d'une base
Access entre elles .
Justement l'utilisateur n'est pas censé avoir Access et la liaison dans mon
cas devrait se faire à partir d'une Userform Excel.

Mais est ce que VBA peut faire cela ???
A bientôt
José






José
Le #5382171
Bonjour,
Je voudrais adresser un grand merci à FFO
Super !
José
"FFO"
Rebonjour josé

Je te propose pour lier 2 tables Access entre elles de lier en fait une
nouvelle table que l'on crée sur une table existante de la base
Il est impossible pour moi de lier entre elles 2 tables déjà en place dans
une base
la liaison s'établissant à la création de l'une d'entre elles

Je ne sait pas si il ne sera pas incontournable pour l'utilisateur d'avoir
access installé sur son poste car il faut activer la référence "Microsoft
Access 11.0 Object Library" (Outils/Références)

Je te propose donc ce code à mettre dans la Macro Excel :

Dim ObjAcc As Access.Application
Set ObjAcc = CreateObject("Access.Application")
ObjAcc.OpenCurrentDatabase "C:CheminBase.mdb"
ObjAcc.UserControl = True
AppActivate "Microsoft Access"
strConnect = "MS Access;DATABASE=C:CheminBase.mdb"
'on vérifie la présence de la table à créer dans la base et de la
supprimer
dans cette éventualité
For Each tdf In CurrentDb.TableDefs
If tdf.Name = "Tablenouvelle" Then
CurrentDb.Execute "Drop table Tablenouvelle"
End If
Next
'On crée la nouvelle table en la liant à la table existante de la base
Set oTbl = CurrentDb.CreateTableDef("Tablenouvelle")
With oTbl
.Connect = strConnect
.SourceTableName = "Tableexistante"
End With
'On ajoute la table à la base de données
CurrentDb.TableDefs.Append oTbl: CurrentDb.TableDefs.Refresh
'On ferme la base et l'application Access
ObjAcc.CloseCurrentDatabase
ObjAcc.UserControl = False
ObjAcc.Application.Quit

Les lignes :

ObjAcc.UserControl = True
AppActivate "Microsoft Access"

ne sont pas obligatoire elle permettent d'activer à l'écran la base Access

Si tu choisis de ne pas les mettre supprimes aussi la ligne :

ObjAcc.UserControl = False

J'espère ainsi avoir répondu à ton attente
Dis moi !!!!



Merci d'avoir pris le temps de me répondre.
Je cherche effectivement un code VBA qui relierait 2 tables d'une base
Access entre elles .
Justement l'utilisateur n'est pas censé avoir Access et la liaison dans
mon
cas devrait se faire à partir d'une Userform Excel.

Mais est ce que VBA peut faire cela ???
A bientôt
José








José
Le #5382161
Bonjour,
Merci encore à michdenis pour tous ces renseignements et enseignements.
José


"MichDenis" u$
Il y a un truc qui serait possible !

Assure toi que le MDAC est à jour - site de microsoft
MDAC = Microsoft Data Access Component

Tu ajoutes dans l'éditeur de code d'excel, la référence
suivante : "Microsoft Activex Data Object 2.x librairy"

Ceci est un exemple avec la base de donnée Comptoir.mdb sur
le CD d'office...

Je n'ai jamais tenté le coup à savoir si c'était possible d'utiliser ADO
quand ACCESS n'est pas installé sur une machine... à toi de tester...

La requête retenue ne sert à rien d'autre qu'au test !!!!

'-------------------------------
Sub Le_test()

Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim Base_Data As String
Dim Requete As String

'Location et Nom de la base de données
Base_Data = "C:Comptoir.mdb"

' Ouvrir la connection avec la base de donnée
cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Base_Data

Requete = "SELECT Employés.[N° employé], " & vbCrLf & _
" Commandes.[Code client] FROM Employés" & vbCrLf & _
" INNER JOIN Commandes ON " & vbCrLf & _
"Employés.[N° employé] = Commandes.[N° employé]"

'Exécution de la requête
rst.Open Requete, cnt, adOpenForwardOnly

'copie vers la cellule A1 le résultat de la requête
Range("A1").CopyFromRecordset rst

'Fermeture du RecordSet et de la connexion
rst.Close
cnt.Close
End Sub
'-------------------------------






"José" 475d92db$0$14475$
Merci d'avoir pris le temps de me répondre.
Je cherche effectivement un code VBA qui relierait 2 tables d'une base
Access entre elles .
Justement l'utilisateur n'est pas censé avoir Access et la liaison dans
mon
cas devrait se faire à partir d'une Userform Excel.

Mais est ce que VBA peut faire cela ???
A bientôt
José






Publicité
Poster une réponse
Anonyme