Excel vers Access

Messages postés
46
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
10 juin 2007
- - Dernière réponse : cs_cotmar
Messages postés
71
Date d'inscription
vendredi 13 septembre 2002
Statut
Membre
Dernière intervention
9 mars 2009
- 30 août 2006 à 15:09
Salut,

Je cherche à mettre en place une liaison d'une feuille Excel vers une base access, ce que je gère sans problème pour l'importation access vers Excel.
Mon problème se pose quand je veux envoyer des données vers access, j'ai une liste qui régulièrement se fait mettre à jour par des données supplèmentaire (ajout de ligne à la suite) donc je cherche un moyen pour mettre à jours l'ensemble du tableau avec les ajouts au passage, mais je n'ai pas vue de fonction qui permet de faire sa directement ou je l'ignore pour le moment.

Voilà les sources:
http://therafou.free.fr/saisie.zip

Si vous avez une solution à mon problème.

Merci d'avance.
Afficher la suite 

10 réponses

Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009
0
Merci
Effectivement il faut un ensemble de méthodes pour le faire. Tout dépend comment est votre application.
Je suppose que vous importez d'abord vos données d'Access vers Excel.
Que vous faites vos modification sur Excel.
Et que vous voulez faire votre mise à jour vers Access.

Si c'est bien cela, il vous faut un bout de programme VBA dans un classeur Excel.
Vous devez travaillez avec des objets ADO et OLEDB pour obtenir la liaison avec votre base Access et faire les mise à jour.  Des cours sur le VBA ACCESS  pourrait vous être utile.

Au plaisir
thierry la fronde
Commenter la réponse de cs_thierry la fronde
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
Moi, je fais un peu le contraire. Je travaille à partir d'Excel et
j'importe/exporte les données. Pour envoyer d'Excel vers Access,
j'utilise une fonction d'Access:

DoCmd.TransferSpreadsheet


En recherchant l'aide sur TransferSpreadsheet, tu pourras peut-être trouver ton bonheur.

MPi
Commenter la réponse de cs_MPi
Messages postés
488
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2019
3
0
Merci
Salut moi aussi j'ai le meme problème

je trouve beaucoup de poste sur "DoCmd.TransferSpreadsheet", mais rien ne m'eclaire.

Enfaite ce que je ne comprend pas , c'est "DoCmd.TransferSpreadsheet" on l'utilise coté excel ou access ?

Car dans l'aided'Excel je ne le trouve pas , par contre il existe coté acces.

Sinon sur ma feuille excel j'ai un bouton et je souhaite en cliquant sur le bouton envoyé 3 variables ( 1 date, 1 decimale, 1 numerique) qui vont s'ajouter à ma table (Stock) de ma base access.

mais toujours de la feuille excel.

Merci d'avance

MANUANTIBES [:p]
Commenter la réponse de ManuAntibes
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009
0
Merci
Pour voir les fonctions spécifiques à Access (idem pour word ou Outlook) il faut ajouter la références à la bibliothèque Access dans votre code Excel. : Outils / Références et cocher la case Microsoft Accss Object Library (dans l'éditeur VBA).

Voici l'exemple de la doc pour la procédure Transférer une feuille de calcul :
Exemple
Cet exemple importe les données d'une plage spécifiée
provenant du fichier Newemps.wk3 Lotus dans la table Employees Microsoft Access.
Il utilise la première ligne de la feuille de calcul pour les noms des
champs.

DoCmd.TransferSpreadsheet acImport, 3, _
    "Employees","C:\Lotus\Newemps.wk3", True, "A1:G12"


Je conseilles quand même de voir si l'utilisation des ADO ne serait pas plus simple ?!

thierry la fronde
Commenter la réponse de cs_thierry la fronde
Messages postés
488
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2019
3
0
Merci
Salut
J'ai suivi ton conseil et j'ai continué a fouiller sur le net

JE suis tombé sur un tuto que j'ai remi à ma sauce.

Voici le code de ma feuille excel avec un bouton dessus

Public cnx As ADODB.Connection



Sub ConnectDB(ByRef cnx As ADODB.Connection, ByVal strPath As String)
        'Définition du pilote de connexion
    cnx.Provider = "Microsoft.Jet.Oledb.4.0"
    'Définition de la chaîne de connexion
    cnx.ConnectionString = strPath
    cnx.Open
End Sub





Private Sub CommandButton1_Click() 'Ajouter un enregistrement à la table Table6_Semaine  base Access
Dim strPath As String
   
    Application.Goto Reference:="StrPath"
      strPath = ActiveCell
   ' Nous testons si le fichier est accessible
    If Len(Dir(strPath)) > 0 Then
        ' Déclaration de la variable de connexion
        Set cnx = New ADODB.Connection
       
      ' Connexion à la base
        ConnectDB cnx, strPath
    Else
        MsgBox "La base n'a pas pu être trouvée" & vbCrLf & _
                strPath & vbCrLf & _
                "n'est pas un chemin valide.", vbCritical + vbOKOnly
    End If

Dim Id_Value As Integer
Dim Num_Value, Chiffre_Value, Rayon_Value, Magasin_Value As String



Num_Value = 11      'Range("A2").Value
Chiffre_Value = 266 'Range("A2").Value
Rayon_Value = 31    'Range("A2").Value
Magasin_Value = 6   'Range("A2").Value



Dim strSQL As String
Dim SelSQL As String
Dim rst As New ADODB.Recordset




'#   Recherche le numero du dernier enregistrement pour ajouter 1 au dernier ID_Value

 SelSQL = "SELECT  Id_Sem FROM Table6_Semaine order by ID_Sem DESC " 'Tri par ordre décroissant
 rst.Open SelSQL, cnx
Id_Value = rst.Fields.Item(0).Value + 1
rst.Close




'#   Recherche s'il existe plusieurs enregistrement de la même date, Rayon et Magasin
SelSQL = "SELECT Id_Sem, Num_Sem, Rayon_Sem, Magasin_Sem FROM Table6_Semaine WHERE Num_Sem=" & Num_Value & " AND Rayon_Sem= " & Rayon_Value & " AND Magasin_Sem = " & Magasin_Value & " "  'Recherche les N° de rayon, N° de Magasin, N° de semaine
rst.Open SelSQL, cnx
If rst.BOF = False Then
rst.Close
aconfirmer = MsgBox("L'enregistrement est déja present dans la base de donnée." + Chr(10) + "Souhaitez vous l'écraser ?", vbYesNo) '"Enregistrement en double")
'#   Recupere l'action de l'utilisateur sur la boite de dialogue OUI NON
If aconfirmer = vbYes Then
strSQL = "update Table6_Semaine( Num_Sem, Chiffre_Sem, Rayon_Sem, Magasin_Sem)values('" & Num_Value & "', '" & Chiffre_Value & "', '" & Rayon_Value & "', '" & Magasin_Value & "')"
rst.Open strSQL, cnx
End If
Else
'#   s'il n'existe pas plusieurs enregistrement de la même date, Rayon et Magasin alors enregistre une new ligne
rst.Close
strSQL = "insert into Table6_Semaine(Id_Sem, Num_Sem, Chiffre_Sem, Rayon_Sem, Magasin_Sem)values('" & Id_Value & "', '" & Num_Value & "', '" & Chiffre_Value & "', '" & Rayon_Value & "', '" & Magasin_Value & "')"
rst.Open strSQL, cnx
End If





Set rst = Nothing
cnx.Close



End Sub





J'ai plusieurs problèmes dans mon code

1) Pour recupere la valeur de l'id_Valeur , je ne pense pas que ma solution soit la meilleur.
Si vous en avez de meilleur proposition je suis preneur

2) Pour l'UPDATE ca marche pas comment dois l'ecrire.

Cordialement

MANUANTIBES [:p]
Commenter la réponse de ManuAntibes
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009
0
Merci
Mes connaissances SQL sont limitées mais essayez de voir en mode debug pas à pas. Vérifiez que tous vos paramètres sont correctes dans le cours de l'exécution. La connexion est-elle toujours valide ? Passez-vous bien dans le bloc IF correspondant ? Sinon pourquoi ?

thierry la fronde
Commenter la réponse de cs_thierry la fronde
Messages postés
488
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2019
3
0
Merci
Ok pour le mode débug pas à pas, je travail que comme ça. (lol)

Il y a que le Update qui ne se met pas à jour, sinon tous le reste fonctionne bien.

A+

MANUANTIBES [:p]
Commenter la réponse de ManuAntibes
Messages postés
3
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
2 août 2006
0
Merci
Hi,

Petit conseil en mode debug...
strSQL = "update Table6_Semaine( Num_Sem, Chiffre_Sem, Rayon_Sem, Magasin_Sem)values('" & Num_Value & "', '" & Chiffre_Value & "', '" & Rayon_Value & "', '" & Magasin_Value & "')"

Ajoute un affichage de la chaîne SQL obtenue:
debug.print strSQL

Ensuite, on peut tester cette chaîne SQL dans la base Access (creer une nouvelle requete sans table et passer en mode SQL, copier/coller...) et laisser Access indiquer les erreurs de syntaxe.

A première vue, je dirais que le probleme peut venir des ' dans les valeurs pour des zones numériques... Aussi, il manquerait un espace Magasin_Sem)values après la parenthèse ?

JCJ
Commenter la réponse de jcljay
Messages postés
3
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
2 août 2006
0
Merci
Hi again,

Pour Therafou : As-tu tester de créer une table liée, vers ton classeur Excel ?
(Fichier/Données externes/Lier une table... type de fichiers : Mcrosoft Excel (*.xls)
Si çà marche (en fonction de la structure du fichier en question), c'est beaucoup plus simple qu'en VBA...

JCJ
Commenter la réponse de jcljay
Messages postés
71
Date d'inscription
vendredi 13 septembre 2002
Statut
Membre
Dernière intervention
9 mars 2009
0
Merci
Salut,

Petite question. Dans ce qui suit :

DoCmd.TransferSpreadsheet acImport, 3, _
    "Employees","C:\Lotus\Newemps.wk3", True, "A1:G12"

Comment faire pour spécifier la feuille que l'on désire importer à l'intèru=ieur du classeur ouvert ?

A bientôt et merci.

Cotmar
Commenter la réponse de cs_cotmar