Excel vers Access

therafou Messages postés 46 Date d'inscription mercredi 26 février 2003 Statut Membre Dernière intervention 10 juin 2007 - 24 juil. 2006 à 09:23
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.

10 réponses

cs_thierry la fronde Messages postés 351 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 août 2009
24 juil. 2006 à 09:52
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
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
24 juil. 2006 à 23:26
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
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
1 août 2006 à 09:32
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]
0
cs_thierry la fronde Messages postés 351 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 août 2009
1 août 2006 à 10:20
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
1 août 2006 à 13:23
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]
0
cs_thierry la fronde Messages postés 351 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 août 2009
1 août 2006 à 14:23
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
0
ManuAntibes Messages postés 491 Date d'inscription mardi 24 octobre 2000 Statut Membre Dernière intervention 18 novembre 2021 5
2 août 2006 à 07:15
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]
0
jcljay Messages postés 3 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 2 août 2006
2 août 2006 à 09:41
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
0
jcljay Messages postés 3 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 2 août 2006
2 août 2006 à 09:48
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
0
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,

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
0
Rejoignez-nous