Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3033 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Export Excel --> Access avec VBA depuis Access

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Export Excel --> Access avec VBA depuis Access

n°1893248
rabihm81
Besoin d'aide en C++
Posté le 09-06-2009 à 15:36:00  profilanswer
 


 

Citation :

Bonjour,
Je fais une fonction en vba qui va exporter les données d'une colonne d'une feuille excel dans le cchamp corrspondant en Access:
Or dans la boucle do while quand je veux mettre le contenu d'une cellule dans un champ de la table tbl_personnes, ça m'affiche une erreur au niveau de la condition de la boucle.
Pourriez vous m'aider svp.
Merci d'avance.
 


Option Compare Database
 
 
Function ExportRabih() As Integer
 
 
Dim NomFic As String
 
Dim Db As DAO.Database
Dim fldId_Personne As DAO.Field
Dim fldPrenom As DAO.Field
 
 
Dim appExcel As Object
Dim Xlwb As Object
 
Dim rs As DAO.Recordset
Dim deb As Integer
Dim ws As Object
 
 
MsgBox "Bonjour"
Set appExcel = CreateObject("Excel.Application" )
appExcel.Visible = True
Set Xlwb = appExcel.Workbooks.Open("C:\Users\rmahfouz\Desktop\Classeur1.xlsx" )
Set ws = Xlwb.Sheets(1)
MsgBox ws.Cells(1, 1)
Set Db = CurrentDb
Set rs = Db.OpenRecordset("tbl_personnes", dbOpenTable)
 
 
deb = 1
 
Do While Len(ws.Range("A" & r).Formula) > 0
 
With rs
.AddNew
MsgBox ws.Cells(1, deb)
.Fields("Prenom" ) = ws.Cells(1, deb)
.Update
End With
deb = deb + 1
Loop
 
 
 
 
rs.Close
Set rs = Nothing
Db.Close
Set Db = Nothing
ExportRabih = 1
End Function
[quote]

mood
Publicité
Posté le 09-06-2009 à 15:36:00  profilanswer
 

n°1893258
olivthill
Posté le 09-06-2009 à 16:02:40  profilanswer
 

Citation :

Do While Len(ws.Range("A" & r).Formula) > 0

D'où vient le r dans "A" & r ? C'est problablement un numéro de ligne (row), mais il faudrait lui donner une valeur, par exemple r = 1

n°1893335
Turkleton
I don't quite understand you
Posté le 09-06-2009 à 19:25:02  profilanswer
 

olivthill a écrit :

Citation :

Do While Len(ws.Range("A" & r).Formula) > 0

D'où vient le r dans "A" & r ? C'est problablement un numéro de ligne (row), mais il faudrait lui donner une valeur, par exemple r = 1


 
Je plussoie : Range("A0" ) va te retourner une erreur, c'est sûr. Il faut absolument que ta variable "r" soit initialisée sous peine de plantage. Mais j'ai l'impression que c'est une coquille, c'était pas "deb" que tu voulais mettre à la place de "r" ?


---------------
If you think it could look good, then I guess it should
n°1893485
rabihm81
Besoin d'aide en C++
Posté le 10-06-2009 à 11:04:11  profilanswer
 

Bonjour,
C'était just eune coquille mais là j'ai un autre souci,
Je te renvoie mon code :

Citation :


Option Compare Database
 
 
 
Function ExportRabih() As Integer
 
 
Dim NomFic As String
 
Dim Db As DAO.Database
Dim fldId_Personne As DAO.Field
Dim fldPrenom As DAO.Field
 
 
Dim appExcel As Object
Dim Xlwb As Object
 
Dim rs As DAO.Recordset
Dim deb As Integer
Dim ws As Object
 
 
MsgBox "Bonjour"
Set appExcel = CreateObject("Excel.Application" )
appExcel.Visible = True
Set Xlwb = appExcel.Workbooks.Open("C:\Users\rmahfouz\Desktop\Classeur1.xlsx" )
Set ws = Xlwb.Sheets(1)
MsgBox ws.Cells(1, 1)
Set Db = CurrentDb
Set rs = Db.OpenRecordset("tbl_personnes", dbOpenTable)
 
 
 
 
rs.AddNew
rs.Fields("Prenom" ).Value = Range("A1" ).Value
rs.Update
 
 
 
 
 
 
rs.Close
Set rs = Nothing
Db.Close
Set Db = Nothing
ExportRabih = 1
End Function
 


 
Il m'affiche l'erreur de compilation suivante :  
 
Erreur d'exécution '1004'
La méthode 'Range' de l'objet '_Global' a échoué.
 
Je t eremercie d'avance

n°1893493
olivthill
Posté le 10-06-2009 à 11:13:31  profilanswer
 

Ce programme tourne du côté d'Access, qui ne connait pas Range.
La solution est

rs.Fields("Prenom" ).Value = ws.Range("A1" ).Value

n°1893501
rabihm81
Besoin d'aide en C++
Posté le 10-06-2009 à 11:21:39  profilanswer
 

Apparemment ça marche pas, y'a toujours une erreur.
Merci quand même.
Si t'as une autre idée, n'hésites pas à m'écrire.
Merci d'avance

n°1893502
rabihm81
Besoin d'aide en C++
Posté le 10-06-2009 à 11:22:16  profilanswer
 

mais sans le message d'erreur dont j'ai cité la dessus

n°1893505
olivthill
Posté le 10-06-2009 à 11:24:17  profilanswer
 

Une autre idée :

rs.Fields("Prenom" ).Value = ws.Cells(1, 1).value

n°1893506
rabihm81
Besoin d'aide en C++
Posté le 10-06-2009 à 11:24:48  profilanswer
 

Le nom de la colonne d'excel que je souhaite exporter est A. Le nom du champ de ma table créée sous Access 'tbl_personnes' est Prenom.
Le nom du champ et celui de la colonne devraient t'ils obligatoirement être les mêmes?
Merci

n°1893509
olivthill
Posté le 10-06-2009 à 11:26:27  profilanswer
 

Le nom du champ Access n'a pas de rapport avec le nom de la colonne Excel. le lien se fait avec le signe égal.

mood
Publicité
Posté le 10-06-2009 à 11:26:27  profilanswer
 

n°1893510
rabihm81
Besoin d'aide en C++
Posté le 10-06-2009 à 11:26:41  profilanswer
 

C'est pas parceque je lu' pas spécifié la table dans laquelle se trouve le champ Prenom?

n°1893512
Deamon
Posté le 10-06-2009 à 11:27:40  profilanswer
 

Tu l'as spécifié là : Set rs = Db.OpenRecordset("tbl_personnes", dbOpenTable)  
Donc normalement il devrait le savoir.

n°1893513
olivthill
Posté le 10-06-2009 à 11:27:45  profilanswer
 

Le nom de la table est connu grâce à la déclaraction de rs (recordset).

n°1893517
rabihm81
Besoin d'aide en C++
Posté le 10-06-2009 à 11:29:35  profilanswer
 

Ah oui c'est vrai ;-).
Je suis con.lol.
La solution alors?
j'ai trop cherché sur internet et partout ils mettent la même chose

n°1893532
olivthill
Posté le 10-06-2009 à 11:36:54  profilanswer
 

Le message d'erreur ne concernait pas rs.Fields mais concernait Range, qu'il fallait préfixer, c'est certain. Je pensais à le préfixer par ws, mais si ça ne marche pas, alors, il vaut mieux peut-être abandonné Range et utiliser Cells qui devrait marcher et revenir au même. Donc

rs.Fields("Prenom" ).Value = ws.Cells(1, 1).value


n°1893564
rabihm81
Besoin d'aide en C++
Posté le 10-06-2009 à 12:06:41  profilanswer
 

Même avec ça y'a toujours une erreur je ne comprends toujours pas.
Peut etre que sous Microsoft Visual basic, faut activer une librairie ds Outils --> Références???

n°1893812
Turkleton
I don't quite understand you
Posté le 10-06-2009 à 19:44:06  profilanswer
 

rabihm81 a écrit :

Même avec ça y'a toujours une erreur je ne comprends toujours pas.
Peut etre que sous Microsoft Visual basic, faut activer une librairie ds Outils --> Références???


Non, ça m'étonnerait.
 
Déjà, que te retourne ton "MsgBox ws.Cells(1, 1) " ? S'il te retourne bien la valeur que tu veux, alors il faut définitivement utiliser "ws.Cells(1, 1).value" dans la deuxième partie de ton instruction "rs.Fields("Prenom" ).Value = ws.Cells(1, 1).value", tu sauras que c'est bon et que le problème ne vient pas de là.
 
Pour moi, c'est la première partie de ton instruction qui merde (ton "Erreur d'exécution '1004' La méthode 'Range' de l'objet '_Global' a échoué." a dû être résolu par l'ajout du "ws" devant). Tu devrais peut-être essayer avec "rs![Prenom] = ws.Cells(1, 1).value" (et c'est bien "Prenom" et pas "Prénom" dans ta table ?)
Sinon, il ne veut peut-être pas créer de nouvel enregistrement si tu ne peuples pas le champ correspondant à ta clé primaire dans ta table "tbl_personnes", et ça m'étonnerait que tu utilises le champ "Prénom" comme clé (ou alors tu t'exposes à de gros problèmes plus tard !  :D )
 
Voila quelques idées à tester/creuser.


---------------
If you think it could look good, then I guess it should

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Export Excel --> Access avec VBA depuis Access

 

Sujets relatifs
import/export data base mysqlExcel 2003, problème avec une boucle
VBA Access! Pbm déclaration application ExcelAccess : créer une condition If
Détecter une fenetre internet active VBA excelProblème avec Split VBA ACCESS
[VBA_Access] Export de requêtes à la suite de la même feuille Excel 
Plus de sujets relatifs à : Export Excel --> Access avec VBA depuis Access


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR