Update depuis Excel d'une Base Access

Résolu
Signaler
Messages postés
37
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
27 janvier 2010
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
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

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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
Messages postés
37
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
27 janvier 2010

C'est justement dans la commande SQL que j'ai du mal à savoir comment exploiter les variables issus d'excel et celle d'access...
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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
Messages postés
37
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
27 janvier 2010

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?
Messages postés
37
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
27 janvier 2010

Bon alors, je vois pas du tout comment utiliser ton bout de code, MPi?
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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