Liaison unilatérale Excel->Access
SILBA31
Messages postés
37
Date d'inscription
Statut
Membre
Dernière intervention
-
PipoWIL -
PipoWIL -
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 ;)
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:
- Liaison unilatérale Excel->Access
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel moyenne - Guide
7 réponses
Bonjour,
Je ne vois pas l'utilité. Pourquoi ne pas renseigner la base access directement ?
Cordialement,
Je ne vois pas l'utilité. Pourquoi ne pas renseigner la base access directement ?
Cordialement,
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.
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
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
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 ?
Ce lien ne serait pas dynamique et tu ne pourrais pas modifier à partir d'access.
C'est ce que tu cherche ?
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.
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.
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?
Mise à jour des lignes existantes
Création de nouvelles lignes
Quelles est selon toi la meilleure stratégie à adopter?
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
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
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
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
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
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
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.
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.