Update depuis Excel d'une Base Access

Résolu
tedtheOrs Messages postés 37 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 27 janvier 2010 - 12 avril 2008 à 21:35
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 13 avril 2008 à 18:13
Yop


Voilà la situation:


Une feuille Excel avec 2 colonnes "Articles" et "Tarif". Chaque article est défini par une référence à 8 chiffres.


Exemple:


ligne1: l'article 12345678 coute 1 ? donne A1=12345678 et B1=1


ligne2: l'article 87654321 coute 5 ? donne A1=87654321 et B1=5


Une base Access (que j'appellerai "Mabase") avec (entre autres) une
table (que j'appellerai "MaTable") avec (entre autres) 2 colonnes:
[Articles] et [Tarifs]...


Mon but est de faire une macro (VBA donc) sous Excel qui me permettent
de "mettre à jour" la colonne [Tarif] à partir de la valeur "Article"...


Le net regorge de tuto pour l'export de données Excel vers Access, mais
il est généralement question d'export "massif" à savoir: à partir d'une
feuille Excel, génération d'une table excel...


J'ai cependant trouvé ça sur les tutos du site:


<!-- BEGIN TEMPLATE: bbcode_code -->




Code :


<!--[if !IE]><-->

<!---->
<!--[endif]-->
<!--[if IE]>
<![endif]-->

Sub exportDonnées_DAO()
Dim Db As DAO.Database
Dim strSQL AsString
Set Db = DAO.OpenDatabase("C:\dossier\Mabase.mdb", False, False)
strSQL = "INSERT INTO [MaTable] VALUES('999','8','DVP','7','mimi','22/10/2007')"
Db.Execute strSQL
Db.Close
EndSub




<!-- END TEMPLATE: bbcode_code -->
Comment faut il coder la requete pour une mise à jour ? Sachant qu'il faudrait balayer l'ensemble de la colonne A


D'avance merci!


Bonne soirée


@+


Ted

[EDIT] Au fait, c'est mon premier message, donc si j'ai dérogé d'une manière ou d'une autre à la charte du forum, il n'est pas trop tard pour me remettre dans le droit chemin!

6 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
13 avril 2008 à 15:01
Bienvenue,
Je ne pense pas que tu aies dérogé de façon quelconque... Le message est clair et posté dans la bonne section (VBA), ce qui est assez rare...

Pour ton problème, tu peux utiliser l'Automation, c'est-à-dire que tu crées dans Excel des variables qui pointent vers Access et ta base. Tu pourrais faire des recherches sur
Access.Application

Ensuite, tu peux utiliser DoCmd.TransferSpreadsheet pour exporter d'un coup les données de ta feuille. Recherche aussi cette commande...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
tedtheOrs Messages postés 37 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 27 janvier 2010
13 avril 2008 à 17:20
C'est justement dans la commande SQL que j'ai du mal à savoir comment exploiter les variables issus d'excel et celle d'access...
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
13 avril 2008 à 17:33
En utilisant TransferSpreadsheet, tu n'as pas besoin de créer de Recordset donc de SQL.

Voici un exemple utilisant différentes variables qui ne te seront pas utiles, mais bon, pour la compréhension, ça pourrait aider...(?)

    Set objAccess = New Access.Application
    objAccess.OpenCurrentDatabase txtBase, False
   
    objAccess.DoCmd.TransferSpreadsheet _
        FileName:=LocalFilename, _
        transfertype:=acImport, _
        tablename:=LocalTablename, _
        HasFieldNames:=LocalBoolHeader, _
        Range:=LocalRange, _
        SpreadSheetType:=5

    objAccess.Quit
    Set objAccess = Nothing

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
tedtheOrs Messages postés 37 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 27 janvier 2010
13 avril 2008 à 18:02
Bon, j'ai essayé avec ca, mais ca plante sur l'instruction en gras...




      Dim Db As DAO.Database
      Dim strSQL As String
      Dim demande
      Dim commentaire
      Dim i

For i = 4 To 30
      demande = Range("B" & i)
      commentaire = Range("E" & i)
     
Do Until demande = Null

      Set Db = DAO.OpenDatabase("F:\Generali\ma_bas.mdb", False, False)      strSQL "UPDATE Demande ou Projet SET Réponse commentaire WHERE IdDemande = '" & demande & "'"
      Db.Execute strSQL
      Db.Close
Loop
Next i

End Sub






Des idées?
0

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

Posez votre question
tedtheOrs Messages postés 37 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 27 janvier 2010
13 avril 2008 à 18:07
Bon alors, je vois pas du tout comment utiliser ton bout de code, MPi?
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
13 avril 2008 à 18:13
Si tu tiens à y aller avec le SQL, j'essaierais comme ceci pour la connexion
Set Db = Workspaces(0).OpenDatabase("F:\Generali\ma_bas.mdb", False, False)

Pour la requête, je ne sais pas... Je n'utilise jamais ce genre de requête...
J'y vais plutôt avec Edit (modification) ou AddNew (ajout) puis Update pour mettre à jour.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous