Export Excel --> Access avec VBA depuis Access - VB/VBA/VBS - Programmation
Marsh Posté le 09-06-2009 à 16:02:40
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
Marsh Posté le 09-06-2009 à 19:25:02
olivthill a écrit :
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" ?
Marsh Posté le 10-06-2009 à 11:04:11
Bonjour,
C'était just eune coquille mais là j'ai un autre souci,
Je te renvoie mon code :
Citation : |
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
Marsh Posté le 10-06-2009 à 11:13:31
Ce programme tourne du côté d'Access, qui ne connait pas Range.
La solution est
rs.Fields("Prenom" ).Value = ws.Range("A1" ).Value |
Marsh Posté le 10-06-2009 à 11:21:39
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
Marsh Posté le 10-06-2009 à 11:24:17
Une autre idée :
rs.Fields("Prenom" ).Value = ws.Cells(1, 1).value |
Marsh Posté le 10-06-2009 à 11:24:48
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
Marsh Posté le 10-06-2009 à 11:26:27
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.
Marsh Posté le 10-06-2009 à 11:26:41
C'est pas parceque je lu' pas spécifié la table dans laquelle se trouve le champ Prenom?
Marsh Posté le 10-06-2009 à 11:27:40
Tu l'as spécifié là : Set rs = Db.OpenRecordset("tbl_personnes", dbOpenTable)
Donc normalement il devrait le savoir.
Marsh Posté le 10-06-2009 à 11:27:45
Le nom de la table est connu grâce à la déclaraction de rs (recordset).
Marsh Posté le 10-06-2009 à 11:29:35
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
Marsh Posté le 10-06-2009 à 11:36:54
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 |
Marsh Posté le 10-06-2009 à 12:06:41
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???
Marsh Posté le 10-06-2009 à 19:44:06
rabihm81 a écrit : Même avec ça y'a toujours une erreur je ne comprends toujours pas. |
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 ! )
Voila quelques idées à tester/creuser.
Marsh Posté le 09-06-2009 à 15:36:00
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]