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
PipoWIL - 14 mai 2015 à 17:47
A voir également:
- Liaison unilatérale Excel->Access
- Liste déroulante excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
- Mise en forme conditionnelle excel - Guide
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
12 mai 2015 à 15:23
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,
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
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.
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
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
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
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
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 :)
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
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 ?
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.
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
13 mai 2015 à 09:43
Requete ajout à partir d'un excel ? c'est possible ca ?
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
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?
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
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
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 :)
De mon côté il y a parfaite correspondance entre les noms des champs dans les tables Access et dans les feuilles Excell :)
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.