Passer des données access en excel sous vba

cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004 - 21 juin 2004 à 14:16
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 - 23 juin 2004 à 11:57
bonjour,
je connais absolument rien de chez rien en access, c la premiere fois de ma vie que je vois ca.
j'ai pourtant sous access un espece de tableau un peu comme sous excel mais sans numero de ligne ni de colonne rien!
pourtant sous excel, l'utilisateur doit taper un code nomme "OF" dans une colonne et la je dois aller dans ce fichier access scruter toute les lignes jusqu'a ce que je tombe dessus(le code), moment ou je dois recupérer les donnée de la colonne a cote du code OF et les coller sous excel.
plz help! c urgent
Valer

39 réponses

HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
21 juin 2004 à 14:41
Bonjour,

Access et Excel sont différents.

Excel est un tableur. Rien ne lie obligatoirement une cellule et sa voisine.

Access est un système de gestion de base de données qui contient un ensemble de données sous forme d'enregistrements.

Chaque ligne d'Access correspond à un enregistrement, et il t'es possible de ne récupérer qu'une seule ligne par rapport à une condition.

Exemple :
Table Personne
__________________________
Prenom---|Age---|Ville---
__________________________
Fanny-----|22----|Maurepas
Toto-------|30----|Arras
__________________________

Si tu veux récupérer mon âge, tu peux faire une sélection par ce genre de requête :
SELECT Age FROM Personne WHERE Prenom = 'Fanny'

Cette requête te renverra -> 22

Pour cela, il faut que tu crées un Recordset (jeu d'enregistrements) qui sélectionnera ta ligne de données.

D'une part, il faut connaître la structure de ta table Access (le nom des différentes colonnes) pour aller récupérer le bon champ.

Voilà, c'était juste pour t'expliquer 2 3 trucs qui t'aideront ensuite.

Et pour t'aider, tu fais ta macro à partir d'access ou d'excel ?
Car c'est différent par rapport aux macros :)

Fanny
0
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
21 juin 2004 à 15:27
je pense faire ma macro sous excel.
es ce qu'il est possible d'apres toi de faire un code permettant que (pas tres francais mais bon!!) lorsque l'opérateur tape dans une case excel mettons 1200 qui est mon code OF que le prog aille sous Access et scrute access jusqu'a trouver cette valeur et recupère donc le nom du client (situé dans la case de gauche du code OF sous access) pour le renvoyer sous excel?
Valer
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
21 juin 2004 à 16:04
Oui oui c'est possible ;)
C'est pour cela que je t'expliquais quelques points sur Access.

Par contre là je suis un peu pressée donc je ne pourrais pas t'expliquer tout aujourd'hui, mais il va falloir que tu coches la librairie pour Access et que tu te connectes à la base de données.
Pour cela regarde dans les sources du site ou sur le forum, tu vas trouver des réponses avec la méthode ADO.

ici par exemple

Fanny
0
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
21 juin 2004 à 16:21
merci beaucoup de ton aide, demain je suis la des 8.00 au garde a vous!
Valer
0

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

Posez votre question
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
22 juin 2004 à 08:54
salut,
je suis aller regarder ton lien j'ai capté deux trois truc mais des mysteres flottent
cette macro est a executer sous excel?
si oui, ou et comment lui donne-t-on le chemin d'acces de la bd
merci!

Valer
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
22 juin 2004 à 09:12
Bonjour :) ,

le chemin d'accès à la base de données est à renseigner dès les premières lignes :
cnnADO.Provider = "Microsoft.JET.OLEDB.4.0"
cnnADO.ConnectionString = App.Path + "\DB\Main.mdb" <--ICI|/b]
cnnADO.Open

Exemple , tu remplaces juste par :
cnnADO.ConnectionString = "C:\base.mdb"


Et il faut que tu coches la librairie adéquate.

[b]Fanny
0
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
22 juin 2004 à 09:31
daccord merci!
heuuuuu c ouqu'on coche cette librairie :shy)
merci
Valer
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
22 juin 2004 à 09:46
Erf là est le problème lol.
Je n'ai pas access au boulot là, donc je ne sais plus :sad)
C'est dans Outils-> Références ... Microsoft qqchose ...
activex data object je crois

Fanny
0
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
22 juin 2004 à 09:56
bon j'ai coché microsoft activX 2.7 library, la plus recente que j'ai mais aussi microsoft acces 10.0 object library
Valer
0
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
22 juin 2004 à 09:57
mais je me demande si je pose la source que tu m'a indiqué tel quel dans la macro, car getvalue je sais pas exactement si c'est ce dt j'ai besoin, on en est pas la encore, on va faire du pas a pas sinon je v pas m'en sortir...
Valer
0
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
22 juin 2004 à 10:15
quand je met test=ouvre(entete,entetemanquant)
je defini test comme etant koi?
Valer
0
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
22 juin 2004 à 10:25
en definissant test comme string, je comprend pas car il me dit que ce que je met entre parenthese dans "ouvre" doit etre mal orthographie alors que non,j'ai verifié dans ma bd,bref ca plante a la premiere ligne que je tape :sad)
Valer
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
22 juin 2004 à 10:43
Euh ... c'est quoi ton test=ouvre(entete, entetemanquant)
Car dans le lien que je t'ai filé il n'y a rien qui ressemble à ça, à moins que j'ai mal lu.

Qu'est ce que tu cherches à faire ?

Fanny
0
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
22 juin 2004 à 10:47
ben je veux me servir de la function ouvreDB en lui spécifiant champsDB et tableDB
Valer
0
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
22 juin 2004 à 10:50
voila: je fais
public sub tester()
dim test as string
dim codeof,table1 as string
test=ouvreDB(codeof, table1)

si j'execute le message d'erreur est "DANS L INSTRUCTION SELECT UN MOT RESERVE OU UN ARGUMENT EST MAL ORTHOGRAPHIE OU MANQUANT OU PONCTUATION INCORRECT"
et en debogage je suis envoyé a cette ligne :
cnnADO.Open

merci
Valer
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
22 juin 2004 à 11:15
Il ne faut pas que tu mettes test = ouvreDB(...)
Mais tout simplement :
ouvreDB(codeOf,table1)

Par contre, il faut que codeOf et table1 soit renseignés correctement avant d'appeler la fonction !

Fanny
0
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
22 juin 2004 à 11:21
c'est le cas, c'est bien defini mais pas contre j'avais essayé de suite sans le test, mais il me dit erreur de syntaxe, := attendu"!
Valer
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
22 juin 2004 à 11:48
Si tu as une fonction de type :
Public Function OuvreDB(Champsdb As String, Tabledb As String)

Il faut en l'appelant que tu fasses :

Dim codeof,table1 as string
codeof = "Code OF"
table1 = "TABLE"
ouvreDB(codeof, table1)

Essaies ça, on ne sait jamais :)

Fanny
0
cs_valer Messages postés 140 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 26 juillet 2004
22 juin 2004 à 11:55
un qui a l'air de tourner!!
en une matinée, c mon boss qui va etre content lol!
donc ton idée a l'air bonne, ca compil (bien que si je compile deux fois de suite il aime pas ca mais bon on va pas faire la fine bouche l'utilisateur ben il aura qu'a pas fair nimp'!)
maitenant ou c que je peux recupérer des valeurs?
Valer
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
22 juin 2004 à 13:00
Pour récupérer des valeurs il faut que tu fasses quelque chose du genre :

rsADO.MoveLast
If rsADO.RecordCount = 0 Then
msgbox "aucun enregistrement pour ce code"
Else
rsADO.MoveFirst
Range("A2").Value = rsADO.Fields(1)
End If


Mais bon, d'après ce que tu veux faire ce serait mieux de mettre :


Public cnnADO As New ADODB.Connection
Public cmdADO As New ADODB.Command
Public rsADO As New ADODB.Recordset

cnnADO.Provider = "Microsoft.JET.OLEDB.4.0"
cnnADO.ConnectionString = "C:\base.mdb"
cnnADO.Open
cmdADO.ActiveConnection cnnADO      cmdADO.CommandText "SELECT Client From [TABLE] WHERE CodeOF='" & variable & "'"'(ce qu'a rentré l'utilisateur)

rsADO.Open cmdADO 
rsADO.MoveLAst
'ici tu vérifies que tu as bien un seul enregistrement qui correspond à ton code OF rentré par l'utilisateur
If rsADO.RecordCount = 1 Then
rsADO.MoveFirst
Range("A1").Value = rsADO.Fields("Client").Value
End If



J'ai mis TABLE pour le nom de ta table, et Client et CodeOF pour les noms des champs. A toi de les changer s'ils ne te conviennent pas.

Fanny
0