Probleme de Transfert de Donnees entre Excel et Acces
colibrialuile
Messages postés25Date d'inscriptionmercredi 27 avril 2005StatutMembreDerniè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
A voir également:
Probleme de Transfert de Donnees entre Excel et Acces
'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"
colibrialuile
Messages postés25Date d'inscriptionmercredi 27 avril 2005StatutMembreDerniè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
Vous n’avez pas trouvé la réponse que vous recherchez ?
colibrialuile
Messages postés25Date d'inscriptionmercredi 27 avril 2005StatutMembreDerniè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
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 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
'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
colibrialuile
Messages postés25Date d'inscriptionmercredi 27 avril 2005StatutMembreDerniè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
colibrialuile
Messages postés25Date d'inscriptionmercredi 27 avril 2005StatutMembreDerniè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
colibrialuile
Messages postés25Date d'inscriptionmercredi 27 avril 2005StatutMembreDerniè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
colibrialuile
Messages postés25Date d'inscriptionmercredi 27 avril 2005StatutMembreDerniè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
tbbuim1
Messages postés940Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention 3 février 20119 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
colibrialuile
Messages postés25Date d'inscriptionmercredi 27 avril 2005StatutMembreDerniè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)
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!