Probleme de Transfert de Donnees entre Excel et Acces

colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005 - 27 avril 2005 à 20:01
 colibrialuile3 - 6 mai 2005 à 08:22
Bonjour a tous et a toutes,

J'ai un probleme avec access, je veux importer des données depuis excel vers access, j'ai reussi à le faire dans une macro access ("TransférerFeuilleCalcul") mais a chaque fois que j'éxecute la macro les données excel (10 lignes d'une seule collone) sont mises les une a la suite des autres (si je l'éxecute trois fois de suite j'aurais des données qui se repete toute les dix lignes sous ma table access)
Et moi je voudrais que quand j'éxecute la macro, ça recopie les 10 lignes de la collone d'excel dans les 10 premières lignes de la table access, à chaque execution, une sorte de mise a jour, comme ca ,si une valeur a changé dans excel, elle sera modifié aussi dans access, après l'execution de la macro.
C'est important car je dois faire ça pour mon stage, merci a vous.
Merci, a celui qui saura m'aider et aux autres aussi.
TCHAO

25 réponses

jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
27 avril 2005 à 20:25
Si tu pouvais montrer ta macro, ce serais mieux pour essayer de t'aider

jpleroisse
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
27 avril 2005 à 21:45
Il te suffit pour cela que tu reçoives tes 10 lignes dans la Feuil1 sur la première colone

Tu donnes un nom à ta colonne à la ligne n°1

Et tu formates les cellules au format qu'elles doivent recevoir.
Une fois que c'est fait dans access tu lances cette fonction

que tu écris dans un module:

Public Function MsImportation()

DoCmd.Hourglass True 'lance le sablier pour montrer que ça charge

'Cette fonction crée des tables Feuil1$_ImportErrors (des fois)

'Continue à partir de suite en cas d'erreur du DeleteObject

On Error GoTo suite

'Suppression de la table copiée lors de la dernière ouverture (pour la MAJ des données)

DoCmd.DeleteObject acTable, NomDeLaTableCréée

suite: 'Si la table n'existe pas, l'erreur amène ici, on importe directement

MsgBox "Patientez pendant le chargement de la table", , "Chargement en cours..."

'Création d'une table à partir d'un fichier excel par ex CheminNomFic = "C:\Fichier.xls"

DoCmd.TransferSpreadsheet acImport, 8, NomDeLaTableACréer, CheminNomFic, True

'Lancement de la procédure d'effacement des tables d'erreurs

EffaceTableErreurImport

Docmd.Hourglass false 'Arrête le sablier

End Function

'fonction qui efface les tables d'erreurs

Public Sub EffaceTableErreurImport()

Dim Ctr

Dim Effacer As Boolean

On error goto fin

'Pour toutes les tables de la BD en cours, Effacer = false

For Each Matable In CurrentDb.TableDefs

Effacer = False

For Ctr = 1 To Len(Matable.Name)

'Efface toutes les tables contenant "$" dans leur nom

If Mid$(Matable.Name, Ctr, 1) "$" Then Effacer True

Next

If Effacer = True Then DoCmd.DeleteObject acTable, Matable.Name

Next

fin:

End Sub



Voilà, il ne te reste plus qu'à lancer la fonction MsImportation à l'autoexec de ton prog Access

Comme ça il récupérera automatiquement tes 10 lignes de ton fichier
Excel et créera une table contenant comme champ le nom de ta colonne
(celui que tu as écris à la 1ere ligne) et le nom de ta table que tu as
choisis à l'importation. Et dedans il y aura des fameuses 10 lignes.

Et à chaque lancement de ton programme, la table présente sera
supprimée et une nouvelle table issue du fichier excel sera créée.

Si cette réponse te convient, n'oublies pas de cliquer sur "Réponse acceptée"

@+

TBBUIM
0
colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005
28 avril 2005 à 07:43
Ok, jpleroisse, je te l'envoie par mail
0
colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005
28 avril 2005 à 07:48
Merci, pour ta reponse mais le probleme est que dans ma table, jai d'autre champs que je ne veu pas effacer, en fait je veu copier 10 ligne d'excel, dans les dix premieres ligne de la table mai dans un seul champ san modifier les autres, Mais merci de mavoir repondu, si tu a une autre sulution jaimerai bien la connaitre
SALUT
0

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

Posez votre question
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
28 avril 2005 à 12:17
Mais c ce que je dis, ma solution est idéale pour ton problème.

Il te suffit de faire une récupération des cellules dont tu as besoin sur la 1ere Feuille

si tu veux rien toucher, tu n'as rien a effacer...

C'est simple à faire ça sous Excel, tu sais le faire?

Ensuite il ne te reste plus qu'à lancer mes fonctions.

Franchement tu as la solution sous les yeux, jpeux pas mieux faire à part le faire pour toi.

Mais franchement, t'en as pour 5 min à faire ça.

TBBUIM
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
28 avril 2005 à 12:21
Tu crées une feuille vide que tu places en tête dans ton classeur.

Ensuite tu récupères les 10 lignes dont tu as besoin dans ton classeur
pour les placer dans cette feuille vide de la façon dont jte l'ai
décris avant.

Donc tu vois bien que tu n'as rien effacer!!!!!!!!!

Ton fichier Excel ne va pas bouger!

Et la table access sera constamment réactualiser.

C'est pas ce que tu veux?
TBBUIM
0
colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005
28 avril 2005 à 14:55
MERCI de maider tbbuim1 mai jai essaye ta fonction et elle cree une nouvelle table a partir de la feuille excel.
Moi jai une table excel qui existe deja et qi comporte trois champs, et je veu copier dix ligne dune feuil excel et les coller dans les 10 premiere ligne dun seul champ de ma table, et ce a chaque execution de la macro ou du module comme ca si une valeur a change dan ma feuil elle sera change aussi dans ma table apre que jai lance la macro, mai ton prog ne marche pa pour ce que je veu faire. Ou alore jai mal compris ton prog.
Si tu veu je peu tenvoyer ma table et ma feuil excel et tu pourra me montrer si tu arrive a la faire marcher ca serait cool.
en tout cas merci pour ton aide SALUT
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
28 avril 2005 à 15:38
Voilà, là ton problème est bien expliqué ;)

Toutefois, j'ai une dernière question:

La macro qui passe les données dans Access, elle est forcément une
macro lancé à partir d'excel? Car dans le cas contraire, à partir
d'access, il suffirait de te connecter à ta feuille Excel et de faire
une requête de mise à jour sur ta table qui récupérerait les données
Excel à chaque lancement. Mais cela implique que ton fichier Excel soit
fermé à ce moment précis.

Public Sub Export()

Dim ClasseurXLS As Object

Dim i as integer

Dim Feuille, Emplacement As String

Feuille = "Feuil1" 'nom de la feuille ou se trouve tes données

Emplacement = Forms.Application.CurrentProject.Path 'récupère le chemin de ton appli

'MsgBox Emplacement 'donc ton fichier et ton appli doivent être ds le mm rep

Set ClasseurXLS = CreateObject("Excel.application")

ClasseurXLS.Workbooks.Open Emplacement & "\FichierExcel.xls" 'Ouverture du classeur

'Activation de la feuille que l'on veut remplir

ClasseurXLS.Workbooks("FichierExcel.xls").Worksheets(Feuille).Activate

'Une fois que c fait on est connecté à la feuille Excel

'****************************************

'Pour accéder aux cellules il faut les n° A =1 B = 2.... ClasseurXLS.Cells(5,2) => ligne 5 colonne B

'Donc par exemple pour récupérer les valeurs de la 1er colonne on écrirait

'ClasseurXLS.Cells(de 1 à 10,1)...

'ensuite on lance une commande SQL

For i =1 to 10 'on récupère les 10 lignes

Docmd.RunSql "update TaFameuseTable SET [TonChamp] =
'" & ClasseurXLS.Cells(i,1) & "' WHERE N° = " & i & ";"

Next i

'Il faut donc dans cette rq que ta table ait une colonne N° qui
comporte 1,2,3 ...10 pour chaque ligne, une clé primaire quoi, non
automatique de façon à pouvoir les n°t comme tu veux.

'Fermeture du classeur d'importation

ClasseurXLS.Workbooks.Close

'Fermeture de l'objet Excel

Set ClasseurXLS = Nothing

'Biensur ne pas oublier de faire Outils => Références=> Microsoft Excel 9.0 object library

'Avec ça tu peux y arriver en principe

End sub
TBBUIM
0
colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005
28 avril 2005 à 15:47
Merci de repondre aussi vite
pour repondre a ta questio, ma macro est sous acces et si tu a une solution plus facile avec une macro acces ca minteresse
merci
0
colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005
28 avril 2005 à 15:51
Ton prog a lair bien mais il est un peu compliqué , est ce que si je tenvoie mes deux fichiers .xls et .mdb et un genre de cahier des charges de ce qe je veu faire tu pourrai me le faire et me renvoyer mes deu fichiers modifie ca serait sympa
mai si ca te derange pa bien sur
merci
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
28 avril 2005 à 16:04
Le problème c que c pas facile ce que tu veux faire...

Donc t'attends pas à un truc facile.

Et puis si tu enlèves les commentaires ya à peine 10 lignes de code...

Fais un effort...

J'ai tout fait déjà, il te reste plus qu'à faire des copier/coller

Tu fais un stage c pr que tu progresses

là t'as plus rien à faire.

Remplace juste les noms par les bons noms de ta table et ton fichier.

Fais des tests regardent si ça marche.

Tu peux faire ça, c pas dur. Essayes tu verras.
Et lache les macros sous access c naze, ça ralentit tout lol

Pour ouvrir un form faut faire Docmd.openForm "NomForm"

Docmd.OpenQuery "NomRequêtes"

Docmd.close

Si t'as une fonction écris la directement

Mafonction (mon param)

Dans le Form_load d'un formulaire.

Si t'en as pas, oui tu peux faire ça dans l'autoexec.

Mais si yen a un tu peux faire démarrer Access dessus et le form_load se lancera

Regarde ce tu peux faire tout avec ça.

TBBUIM
0
colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005
28 avril 2005 à 16:16
OK, je vai essayer, mai si jamai ta le tps de mi faire voila ce que je voudrais:

>Un fichier .mdb
avec une table nommé, "T_defauts" contenant trois champs nommees, "Nom_defaut", "Groupe_alarme" et "Valeur_defaut".

>Un fichier .xls
contenant une feuille nommée, "Valeur défauts" et avec des valeurs dans les cellules A1 à A10 et si il le faut un titre dans la cellule A1 (valeur défauts si il faut le reconaitre dans access)
les valeurs des cellules seront quelconque mais forcement numerique.

>et bien sur, une macro ou un module, de preference sous access ou alors sous excel si on peu la lancer depuis access. Cette macro devra recopier les cellules A1 à A10 dans les dix premieres lignes du champ "Valeur_defaut". et a chaque fois les dix premieres lignes

Ca serait vraiment bien si tu pouvai me faire ca et me lenvoyer ensuite par mail, je te passrai mon adresse. Merci
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
28 avril 2005 à 20:27
lollllllllllllllllllll

Apparement tu ne lis pas les messages que je t'envois car c'est exactement ce que je t'ai envoyé.

Maintenant, si tu tiens vraiment à ce que je te file la solution toute
cuite, envois moi ton adresse email sur ma bal codes-sources.
TBBUIM
0
colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005
29 avril 2005 à 19:03
Desole javai pa vu, mon adresse c'est:
colch@mail.annecy.univ-savoie.fr

Merci bien
0
colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005
29 avril 2005 à 19:10
Je nai pas recu ton message
0
colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005
2 mai 2005 à 08:16
Desolé
mai je vien de remarquer que javais fait une erreur en texpliquant ce que je voulais la voici :

MERCI de maider tbbuim1 mai jai essaye ta fonction et elle cree une nouvelle table a partir de la feuille excel.

Moi jai une table ACCES qui existe deja et qi comporte trois champs, et je veu copier dix ligne dune feuil excel (qui existe deja elle aussi) et les coller dans les 10 premiere ligne dun seul champ de ma table, et ce a chaque execution de la macro ou du module comme ca si une valeur a change dan ma feuil elle sera change aussi dans ma table apre que jai lance la macro, mai ton prog ne marche pa pour ce que je veu faire. Ou alore jai mal compris ton prog.
Si tu veu je peu tenvoyer ma table et ma feuil excel et tu pourra me montrer si tu arrive a la faire marcher ca serait cool.
en tout cas merci pour ton aide SALUT
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
2 mai 2005 à 16:58
La première solution crée effectivement une table à partir d'un fichier Excel.

Et comme tu me l'as dis par la suite, ce n'est pas ce que tu veux...

Et je t'ai répondu que tu avais raison mais que ton problème était mal
expliqué au départ, mais que maintenant c'etait clair. C'est pourquoi
j'ai envoyé une autre solution avec la fonction Export. C'est celle là
qu'il faut utiliser. Il faut remplacer tous les noms par les tiens et
mettre une colonne N° de 1 à 10 dans ta table.
TBBUIM
0
colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005
3 mai 2005 à 10:22
Si tu parle de ce prog:

Public Sub Export()
Dim ClasseurXLS As Object
Dim i as integer
Dim Feuille, Emplacement As String
Feuille = "Feuil1" 'nom de la feuille ou se trouve tes données
Emplacement = Forms.Application.CurrentProject.Path 'récupère le chemin de ton appli
'MsgBox Emplacement 'donc ton fichier et ton appli doivent être ds le mm rep
Set ClasseurXLS = CreateObject("Excel.application")
ClasseurXLS.Workbooks.Open Emplacement & "\FichierExcel.xls" 'Ouverture du classeur
'Activation de la feuille que l'on veut remplir
ClasseurXLS.Workbooks("FichierExcel.xls").Worksheets(Feuille).Activate
'Une fois que c fait on est connecté à la feuille Excel

Je vois tout de suite que ca pe pa aller car il y a un truc qui va pas (en rouge)
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
3 mai 2005 à 10:47
lolllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll

En fait, j'ai tout simplement oublié d'enlever ce commentaire

Car il fait partie du programme d'ou j'ai tiré ce code, que j'ai adapté à ta solution.

Désolé pour le désagrément lol. Dans ce code, il faut remplacer ce commentaire par

'Activation de la feuille d'ou l'on va tirer les informations...

Puisque si tu regardes bien, par la suite, je fais la requête de mise à
jour qui modifie la table ACCESS, aucune modification n'est faites sur
la feuille EXCEL!

Donc C'EST BON....
TBBUIM
0
colibrialuile Messages postés 25 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 3 mai 2005
3 mai 2005 à 13:35
autant pour moi
0
Rejoignez-nous