Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ajouter des données à une table seulement si le numéro perso existe ...

7 réponses
Avatar
ymer.hyseni
Salut tout le monde,

J'ai une table qui contient des donn=E9es, environs 3000
enregistrements. Dans un fichier excel j'ai des donn=E9es, environs
50000,ce sont les m=EAmes champs que dans la table access.

Je veux importer ces donn=E9es dans la table access, mais pas toutes,
seulement celles qui ont le num=E9ro personnel le m=EAme que celles qui se
trouvent dans access d=E9j=E0.

comment faire?

merci, et =E0 plus.

7 réponses

Avatar
pgz
Bonsoir.

Dans le principe, je te proposerais la manip suivante :
- importer toutes les données XL dans une table particulière et provisoire,
- récupérer alors les données utiles avec une procédure DAO ou ADO,
- supprimer la table provisoire

Bon courage,

--
pgz
_____________________________




Salut tout le monde,

J'ai une table qui contient des données, environs 3000
enregistrements. Dans un fichier excel j'ai des données, environs
50000,ce sont les mêmes champs que dans la table access.

Je veux importer ces données dans la table access, mais pas toutes,
seulement celles qui ont le numéro personnel le même que celles qui se
trouvent dans access déjà.

comment faire?

merci, et à plus.




Avatar
Fabien
Bonsoir.

Dans le principe, je te proposerais la manip suivante :
- importer toutes les données XL dans une table particulière et provisoire,
- récupérer alors les données utiles avec une procédure DAO ou ADO,
- supprimer la table provisoire

Bon courage,

Bonjour,

Ok pour l'import.
Puis Mise a jour de la table par les éléments de la table d'import :
UPDATE ImportClassTmp INNER JOIN Matable ON (ImportClassTmp.Num =
Matable.Num)
SET Matable.Champ1 = ImportClasstmp.Champ1, Matable.Champ2 =
ImportClasstmp.Champ2 ;
Voilou

Avatar
ymer.hyseni
On 8 juin, 08:31, Fabien wrote:
pgz a écrit :> Bonsoir.

Dans le principe, je te proposerais la manip suivante :
- importer toutes les données XL dans une table particulière et pro visoire,
- récupérer alors les données utiles avec une procédure DAO ou ADO,
- supprimer la table provisoire

Bon courage,


Bonjour,
Ok pour l'import.
Puis Mise a jour de la table par les éléments de la table d'import :
UPDATE ImportClassTmp INNER JOIN Matable ON (ImportClassTmp.Num =
Matable.Num)
SET Matable.Champ1 = ImportClasstmp.Champ1, Matable.Champ2 =
ImportClasstmp.Champ2 ;
Voilou


Salut, merci pour vos réponse, j'avoue que je ne comprends pas tout...

j'ai suivi donc un peu votre aide, j'ai crée une nouvelle table qui
s'appelle T_Provisoire, et qui contient les mêmes champs que la table
originale, elle s'appelle T_Data. Le champs sur lequel le update doit
fonctionner s'appelle NoPersonnel.

Pouvez-vous écrire votre fonction sql avec mes données svp.

merci.


Avatar
Fabien
On 8 juin, 08:31, Fabien wrote:
pgz a écrit :> Bonsoir.

Dans le principe, je te proposerais la manip suivante :
- importer toutes les données XL dans une table particulière et provisoire,
- récupérer alors les données utiles avec une procédure DAO ou ADO,
- supprimer la table provisoire
Bon courage,
Bonjour,

Ok pour l'import.
Puis Mise a jour de la table par les éléments de la table d'import :
UPDATE ImportClassTmp INNER JOIN Matable ON (ImportClassTmp.Num >> Matable.Num)
SET Matable.Champ1 = ImportClasstmp.Champ1, Matable.Champ2 >> ImportClasstmp.Champ2 ;
Voilou


Salut, merci pour vos réponse, j'avoue que je ne comprends pas tout...

j'ai suivi donc un peu votre aide, j'ai crée une nouvelle table qui
s'appelle T_Provisoire, et qui contient les mêmes champs que la table
originale, elle s'appelle T_Data. Le champs sur lequel le update doit
fonctionner s'appelle NoPersonnel.

Pouvez-vous écrire votre fonction sql avec mes données svp.

merci.

Le plus simple c'est de creer une nouvelle requete.

Tu choisit tes 2 tables T_provisoire et T_data
Tu créé un lien entre les deux sur le champs NoPersonnel
Tu indique qu'il s'agit d'une requte de mise a jour
et tu séléctionne les champs a mettre a jour dans ta table T_data.
Pour chaque champs de T_Data tu indique dans la ligne mise a jour, le
champ de la table T_Provisoire qui lui correspond.
Tu dois obtenir quelque chose comme :

T_data T_provisoire
NoPersonnel-----------------NoPersonnel
Champs1 Champs1
champs2 Champs2

---------------------------------------------------------------------
Champs | Champ1 | Champ2
Table |T_data |T_data
Mise a jour |T_Provisoire.[Champ1] |T_Provisoire.[Champ2]
----------------------------------------------------------------------



Avatar
ymer.hyseni
On 8 juin, 11:58, Fabien wrote:



On 8 juin, 08:31, Fabien wrote:
pgz a écrit :> Bonsoir.

Dans le principe, je te proposerais la manip suivante :
- importer toutes les données XL dans une table particulière et p rovisoire,
- récupérer alors les données utiles avec une procédure DAO o u ADO,
- supprimer la table provisoire
Bon courage,
Bonjour,

Ok pour l'import.
Puis Mise a jour de la table par les éléments de la table d'import :
UPDATE ImportClassTmp INNER JOIN Matable ON (ImportClassTmp.Num =
Matable.Num)
SET Matable.Champ1 = ImportClasstmp.Champ1, Matable.Champ2 =
ImportClasstmp.Champ2 ;
Voilou


Salut, merci pour vos réponse, j'avoue que je ne comprends pas tout...

j'ai suivi donc un peu votre aide, j'ai crée une nouvelle table qui
s'appelle T_Provisoire, et qui contient les mêmes champs que la table
originale, elle s'appelle T_Data. Le champs sur lequel le update doit
fonctionner s'appelle NoPersonnel.

Pouvez-vous écrire votre fonction sql avec mes données svp.

merci.


Le plus simple c'est de creer une nouvelle requete.
Tu choisit tes 2 tables T_provisoire et T_data
Tu créé un lien entre les deux sur le champs NoPersonnel
Tu indique qu'il s'agit d'une requte de mise a jour
et tu séléctionne les champs a mettre a jour dans ta table T_data.
Pour chaque champs de T_Data tu indique dans la ligne mise a jour, le
champ de la table T_Provisoire qui lui correspond.
Tu dois obtenir quelque chose comme :

T_data T_provisoire
NoPersonnel-----------------NoPersonnel
Champs1 Champs1
champs2 Champs2

---------------------------------------------------------------------
Champs | Champ1 | Champ2
Table |T_data |T_data
Mise a jour |T_Provisoire.[Champ1] |T_Provisoire.[Champ2]
----------------------------------------------------------------------- M asquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Salut, merci pour ta réponse, mais moi je ne veux justement pas mettre
à jour les champs que j'ai dans T_Data, je veux juste ajouter des
lignes à ma table, mais ajouter seulement les personnes qui existent
déjà dans ma T_Data, donc en fait au final j'aurai deux lignes pour la
même personne... c'est ce que je veux...

et non pas mettre à jour un champ particulier... ca je ne veux pas...

merci à toi




Avatar
pgz
Bonjour.

Je te propose la procédure DAO suivante, dans l'idée et donc à mattre au
point dans ton contexte

Public sub subImporter
dim db as DAO.Database, rstData as DAO.Recordset, rstProvisoire as
DAO.Recordset

set db = Application.CurrentDb
set rstData = db.OpenRecordSet("T_Data",dbOpenDynaset)
set rstProv = db.OpenRecordSet("T_Provisoire",dbOpenDynaset)

While Not rstProv.EOF
rstData.FindFirst "NoPersonnel = " & rstProv("NoPersonnel")
if Not rstData.NoMatch Then
rstData.AddNew
rstData("NoPersonnel") = rstProv("NoPersonnel")
rstData("NomChamp") = rstProv("NomChamp")
...
rstData.Update
End if
rstProv.MoveNext
Wend

rstProv.Close
rstData.Close
set rstProv = Nothing
Set rstData=Nothing
Set db = Nothing
End sub


Et tu exécutes : F5

Bon courage,
--
pgz
_____________________________



- Afficher le texte des messages précédents -


Salut, merci pour ta réponse, mais moi je ne veux justement pas mettre
à jour les champs que j'ai dans T_Data, je veux juste ajouter des
lignes à ma table, mais ajouter seulement les personnes qui existent
déjà dans ma T_Data, donc en fait au final j'aurai deux lignes pour la
même personne... c'est ce que je veux...

et non pas mettre à jour un champ particulier... ca je ne veux pas...

merci à toi





Avatar
ymer.hyseni
On 8 juin, 12:57, pgz wrote:
Bonjour.

Je te propose la procédure DAO suivante, dans l'idée et donc à matt re au
point dans ton contexte

Public sub subImporter
dim db as DAO.Database, rstData as DAO.Recordset, rstProvisoire as
DAO.Recordset

set db = Application.CurrentDb
set rstData = db.OpenRecordSet("T_Data",dbOpenDynaset)
set rstProv = db.OpenRecordSet("T_Provisoire",dbOpenDynaset)

While Not rstProv.EOF
rstData.FindFirst "NoPersonnel = " & rstProv("NoPersonnel")
if Not rstData.NoMatch Then
rstData.AddNew
rstData("NoPersonnel") = rstProv("NoPersonnel")
rstData("NomChamp") = rstProv("NomChamp")
...
rstData.Update
End if
rstProv.MoveNext
Wend

rstProv.Close
rstData.Close
set rstProv = Nothing
Set rstData=Nothing
Set db = Nothing
End sub

Et tu exécutes : F5

Bon courage,
--
pgz
_____________________________




- Afficher le texte des messages précédents -


Salut, merci pour ta réponse, mais moi je ne veux justement pas mettre
à jour les champs que j'ai dans T_Data, je veux juste ajouter des
lignes à ma table, mais ajouter seulement les personnes qui existent
déjà dans ma T_Data, donc en fait au final j'aurai deux lignes pour la
même personne... c'est ce que je veux...

et non pas mettre à jour un champ particulier... ca je ne veux pas...

merci à toi- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -


Merci à toi, ca fonctionne comme il faut... bravo

cioa