Liaison unilatérale Excel->Access

Fermé
SILBA31 Messages postés 37 Date d'inscription mardi 28 avril 2015 Statut Membre Dernière intervention 27 mai 2015 - 12 mai 2015 à 14:01
 PipoWIL - 14 mai 2015 à 17:47
Bonjour,

je possède une BDD créée sous ACCESS 2010. L'ensemble des tables sont importés à partir d'un fichier Excel (une table=un fichier).
Je voudrais que toutes les modifications effectuées sur les fichiers Excel (modification et ajouts de lignes notamment) soient répercutés sur les tables ACCESS.

J'ai effectué quelques recherches et à priori cela ne se fait plus automatiquement sur les dernières version d'ACCESS.

Quelqu'un aurait une idée concernant la fonctionnalité à utiliser? Ou bien le recours à une macro?

Merci d'avance ;)
A voir également:

7 réponses

eljojo_e Messages postés 1155 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 14 octobre 2022 153
12 mai 2015 à 15:23
Bonjour,

Je ne vois pas l'utilité. Pourquoi ne pas renseigner la base access directement ?

Cordialement,
0
SILBA31 Messages postés 37 Date d'inscription mardi 28 avril 2015 Statut Membre Dernière intervention 27 mai 2015
12 mai 2015 à 15:24
Tout simplement parce que les personnes qui seront amenées à modifier/mettre à jours les données n'y connaissent rien en ACCESS mais sont habituées à utiliser Excel. Il est donc beaucoup plus simple pour elles de renseigner un tableur Excel.
0
eljojo_e Messages postés 1155 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 14 octobre 2022 153
12 mai 2015 à 15:52
tu peux créer des formulaire vachement simple quand même.
Je suis un peu dans le même cas que toi à travailler avec des anciens lol.
J'ai fait basculer tout le monde sur access avec des formulaires simple et ca roule..

Si vraiment tu veux pas, on peut le faire par macro mais c'est un peu long à faire
0
SILBA31 Messages postés 37 Date d'inscription mardi 28 avril 2015 Statut Membre Dernière intervention 27 mai 2015
12 mai 2015 à 15:54
Je n'ai pas trouvé de macro "tout fait" pour lier Excell à Access mais si c'est faisable je préfère que le lien se fasse automatiquement par macro :)
0
eljojo_e Messages postés 1155 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 14 octobre 2022 153
12 mai 2015 à 15:57
Même si je trouve ca pas top, il faudrait que tu range tes fichier excel dans un endroit où il bouge pas, qu'il ne soit pas renommé et que tu créé un code qui aille ouvrir un fichier excel, copie toutes les lignes non-vide, vide la table access et colle les valeurs.
Ce lien ne serait pas dynamique et tu ne pourrais pas modifier à partir d'access.
C'est ce que tu cherche ?
0
Re...
La question principale me semble être de savoir si tes tableaux Excel sont "modifier" ou s'il s'agit de lignes ajoutées sans modification des précédentes.
Dans le 2ème cas, il suffirait d'avoir une requête-ajout en prenant garde aux doublons. S'il s'agit de modifications, ce sera plus difficile avec une requête-mise à jour; mais c'est faisable.
0
eljojo_e Messages postés 1155 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 14 octobre 2022 153
13 mai 2015 à 09:43
Requete ajout à partir d'un excel ? c'est possible ca ?
0
SILBA31 Messages postés 37 Date d'inscription mardi 28 avril 2015 Statut Membre Dernière intervention 27 mai 2015
13 mai 2015 à 10:58
Potentiellement les deux possibilités peuvent apparaitre:

Mise à jour des lignes existantes
Création de nouvelles lignes

Quelles est selon toi la meilleure stratégie à adopter?
0

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

Posez votre question
Bonjour à tous,
Pour ElJojo : "Requete ajout à partir d'un excel ? c'est possible ca ?"
Bien sûr, c'est possible.
1) Il existe la possibilité des tables externes Excel, mais je ne connais pas les manipulations. La seule chose est que c'est possible.
2) Par Importation d'une table Excel et conversion en une table Access. Mais il y a plusieurs précaution à prendre, à savoir qu'il faut absolument que le nom des colonnes Excel soit toujours les mêmes et correspondent exactement aux noms des champs de la table Access sur laquelle on veut ajouter les données.
3) Il y a 2 possibilités pour l'importation dans Access depuis un tableau Excel. Soit dans une table existante, soit dans une nouvelle table. Je n'ai jamais pu faire fonctionner correctement l'import dans une table existante. Donc je n'utilise que l'importation dans une nouvelle table.
4) Pour l'importation dans une nouvelle table, il faut savoir que le nom de la table donnée par défaut est le nom de la feuille Excel, et le nom des colonnes Excel est repris pour le nom des champs Access. Il suffit donc de bien faire attention que tous ces noms dans Excel soient toujours les mêmes sans aucun changement.
5) Après il suffit d'avoir une requête-ajout de la table provisoire vers la table définitive. Cela ne pose aucun problème si on a bien calibré les noms.
6) L'ensemble peut être programmé dans un code VBA. Je l'ai fait des centaines de fois sans aucun soucis. Je peux t'adresser un modèle si vous le souhaitez.
Bonne suite
0
SILBA31 Messages postés 37 Date d'inscription mardi 28 avril 2015 Statut Membre Dernière intervention 27 mai 2015
13 mai 2015 à 11:39
Je suis preneur du modèle de code VBA.
De mon côté il y a parfaite correspondance entre les noms des champs dans les tables Access et dans les feuilles Excell :)
0
Ci-dessous la 1ère partie du code. Pour l'importation de la feuille dans une nouvelle table, le transfert des données dans la table définitive figure dans le 2ème post.
Attention aux lignes de commentaire.

Function ImportActiviteMedecins()
Dim Msg0, Msg1, Msg2, Msg3, Style1, Style2, Title, Reponse1, Response2
' Indique le dossier où aller chercher le fichier Excel
Msg0 = "Vous trouverez la feuille des données d'activité des médecins dans le dossier : Cs5_PLANNINGS_PM+PNM/STAT_ACTIVITE/Docts2015/StatsCs/ RecapStatCs2015-04.xls , 1ère Page ('ImportActiviteMedecins & an' ). "
Style1 = vbOKCancel + vbDefaultButton2 ' Définit les boutons.
Title = "Importations" ' Définit le titre.
Response = MsgBox(Msg0, Style1, Title)
If Response = vbCancel Then GoTo Sortie

DebutImport:
' Message d'alerte avant le lancement du processus.
Msg1 = "Avant d'importer des données externes, vous devez vérifier que la page EXCEL a bien été configurée. Pour importer les données de statistiques des activités médicales vérifiez que le nom de la page à importer est bien 'ImportActiviteMedecins' ."
Response1 = MsgBox(Msg1, Style1, Title)
If Response1 = vbCancel Then ' L'utilisateur a choisi Oui.
GoTo Sortie
ElseIf Response1 = vbOK Then
Msg2 = " Voulez-vous lancer l'importation automatique ? ( Oui ) / Ou manuelle ? ( Non )"
Style2 = vbYesNoCancel + vbDefaultButton3
Response2 = MsgBox(Msg2, Style2, Title)

' Supprime la table précédente "ImportActiviteMedecins", afin de la remplacer
DoCmd.DeleteObject acTable, "ImportActiviteMedecins"

If Response2 = vbYes Then ' L'utilisateur a choisi l'importation automatique
' Définit le nom de la feuille à importer
FeuilleAImporter = "D:\D-Mes documents\Cs5_PLANNINGS_PM+PNM\STAT_ACTIVITE\Docts2015\StatsCs\RecapStatCs2015-04".xls"
DoCmd.TransferSpreadsheet acImport, 8, "ImportActiviteMedecins", FeuilleAImporter, True, ""
ElseIf Response2 = vbNo Then ' ' L'utilisateur a choisi l'importation manuelle
Msg0 = " Nous vous rappelons que " & Msg0
Response = MsgBox(Msg0, Style, Title)
DoCmd.RunCommand acCmdImport
ElseIf Response2 = vbCancel Then ' L'utilisateur a choisi de sortir de la boucle
GoTo Sortie
End If
End If

' extraction des données
ExtractionExportStatActivitesMed
Sortie:
End Function
0
2ème partie / copie des données de la table provisoire à la table définitive.

Function ExtractionExportStatActivitesMed()
Import_ActiviteMedecins = "INSERT INTO StatistiquesConsultations ( Specialite1, Specialite2, Annee, Mois, Medecins, honores, nonVus, annules, deconvoques )
SELECT ImportActiviteMedecins.[Spécialité 1], ImportActiviteMedecins.[Spécialité 2], ImportActiviteMedecins.Annee, ImportActiviteMedecins.Mois, ImportActiviteMedecins.Médecins, Sum(ImportActiviteMedecins.honorés) AS SommeDehonorés, Sum(ImportActiviteMedecins.[non vus]) AS [SommeDenon vus], Sum(ImportActiviteMedecins.annulés) AS SommeDeannulés, Sum(ImportActiviteMedecins.déconvoq) AS SommeDedéconvoq
FROM ImportActiviteMedecins LEFT JOIN StatistiquesConsultations ON (ImportActiviteMedecins.Mois = StatistiquesConsultations.Mois) AND (ImportActiviteMedecins.Médecins = StatistiquesConsultations.Medecins) AND (ImportActiviteMedecins.Annee = StatistiquesConsultations.Annee) AND (ImportActiviteMedecins.[Spécialité 2] = StatistiquesConsultations.Specialite2)
WHERE (((StatistiquesConsultations.Numéro) Is Null))
GROUP BY ImportActiviteMedecins.[Spécialité 1], ImportActiviteMedecins.[Spécialité 2], ImportActiviteMedecins.Annee, ImportActiviteMedecins.Mois, ImportActiviteMedecins.Médecins, IIf(Month(Date())<ImportActiviteMedecins!mois,Year(Date())-1,Year(Date()))
ORDER BY ImportActiviteMedecins.[Spécialité 1], ImportActiviteMedecins.[Spécialité 2], ImportActiviteMedecins.Annee, ImportActiviteMedecins.Mois, ImportActiviteMedecins.Médecins"

DoCmd.RunSQL Import_ActiviteMedecins

Sortie:
End Function
0
Bon courage.
0
Bonjour,
Si tu veux dans Access toujours voir les dernières modifications sur les tableurs Excel, au lieu d'importer les tableurs, il faut établir un lien. Cela créera une table liée.

Ceci devrait résoudre ton problème mais je me permets de d'attirer ton attention sur l'utilissation de Excel. Excel est très souple et convivial mais permet tout et n'importe quoi. Cela risque fort de troubler tes données Access. Personellement, j'éviterais Excel autant que possible.
0