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

Diviser une table en autant de tables que de valeurs possibles

10 réponses
Avatar
Newsfeeds
Je souhaite diviser une très grande table en plusieurs tables selon un
critère.
Exemple : j'ai une base qui a un champ pays. Je voudrai une table pour
chaque valeur de pays contenue dans la table.
J'obtiens cela par requête création. Mais cela demande de nombreuses
opérations manuelles qui doivent être répétées.
Quelqu'un a-t-il une astuce ou un bout de code pour faire cette tâche ?

Merci
Charlie




----== Posted via Newsfeed.Com - Unlimited-Uncensored-Secure Usenet News==----
http://www.newsfeeds.com The #1 Newsgroup Service in the World! >100,000 Newsgroups
---= 19 East/West-Coast Specialized Servers - Total Privacy via Encryption =---

10 réponses

Avatar
3stone
Bonjour aussi,

| Je souhaite diviser une très grande table en plusieurs tables selon un
| critère.
| Exemple : j'ai une base qui a un champ pays. Je voudrai une table pour
| chaque valeur de pays contenue dans la table.
| J'obtiens cela par requête création. Mais cela demande de nombreuses
| opérations manuelles qui doivent être répétées.


Ce que tu veux faire est contraire au principe d'une base de données relationnelle...
Si tu veux voir "par pays", une simple requête fait cela très bien.

Car, après avoir "divisé" en un foultitude de tables... ou vas tu faire une
éventuelle recherche... dans quelle table ?

--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------
Avatar
hm15
Bonsoir Pierre,

... mais de quoi je me mêle...
J'ai eu un cas similaire il y a quelque temps :
une base internationale, puis "ils" ont voulu décentraliser et faire des
bases nationales (avec compilation des données par la suite).
Qu'est-ce que tu fais dans ces cas-là ?
Ne sachant pas programmer, j'ai exécuté mes requêtes pour chaque pays (12 à
l'époque).
Suppose que Charlie doive le faire pour les plus de 200 pays que compte la
planète ;-))

Toi, tu sais programmer ;-))
Ah ! Mais alors, cette façon de ne pas répondre aux questions...

A toi de dire,

Annette
---------------------------------------------------------------------------
www.horizon-micro.com


"3stone" a écrit dans le message de news:
3f804e58$0$24168$
Bonjour aussi,

| Je souhaite diviser une très grande table en plusieurs tables selon un
| critère.
| Exemple : j'ai une base qui a un champ pays. Je voudrai une table pour
| chaque valeur de pays contenue dans la table.
| J'obtiens cela par requête création. Mais cela demande de nombreuses
| opérations manuelles qui doivent être répétées.


Ce que tu veux faire est contraire au principe d'une base de données
relationnelle...

Si tu veux voir "par pays", une simple requête fait cela très bien.

Car, après avoir "divisé" en un foultitude de tables... ou vas tu faire
une

éventuelle recherche... dans quelle table ?

--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------





Avatar
Raymond
Bonsoir.

tu dois passer par vba pour faciliter la tâche, par exemple:

Dim Db As DAO.Database
Dim Rs As DAO.Recordset
Set Db = CurrentDb
Set Rs = Db.OpenRecordset("SELECT Table1.Pays FROM Table1 GROUP BY
Table1.Pays ORDER BY Table1.Pays;")
Do Until Rs.EOF
Db.Execute "SELECT Table1.* INTO " & Rs!pays & " FROM Table1 WHERE
Table1.Pays = '" & Rs!pays & "'"
Rs.MoveNext
Loop
Rs.Close
Set Rs = Nothing
Set Db = Nothing

non testé, tu fais une copie de ta base avant.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Newsfeeds" <¤> a écrit dans le message de news:
Je souhaite diviser une très grande table en plusieurs tables selon un
critère.
Exemple : j'ai une base qui a un champ pays. Je voudrai une table pour
chaque valeur de pays contenue dans la table.
J'obtiens cela par requête création. Mais cela demande de nombreuses
opérations manuelles qui doivent être répétées.
Quelqu'un a-t-il une astuce ou un bout de code pour faire cette tâche ?

Merci
Charlie


Avatar
3stone
Salut Annette et Charlie,

"hm15" a écrit:
| ... mais de quoi je me mêle...
| Ne sachant pas programmer,
| Toi, tu sais programmer ;-))

Trop modeste ou tu te moque ( peut-être les deux ;-))))


Charlie:
Si dans ta table, le champ s'appelle [Pays]...
execute cette fonction en adaptant le nom de ta table.
Tu remplace donc "MaTable" par... le nom de la tienne.


Function SplitTable()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sSQL As String
Dim sPays As String

sSQL = "SELECT Pays FROM MaTable GROUP BY Pays ORDER BY Pays;"

Set db = CurrentDb
Set rs = db.OpenRecordset(sSQL)
If Not rs.EOF Then
Do Until rs.EOF
sPays = rs!Pays
CurrentDb.Execute "Select * INTO " & "tbl_" & rs!Pays & " From MaTable Where [Pays]='" & sPays & "';"
rs.MoveNext
Loop
Else
msgbox "Pas de données"
End If

rs.Close
Set rs = Nothing
Set db = Nothing
End Function



Cela t'aide Charlie ?

;-)

--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------
Avatar
Raymond
Bonsoir.

tu dois passer par vba pour faciliter la tâche, par exemple:

Dim Db As DAO.Database
Dim Rs As DAO.Recordset
Set Db = CurrentDb
Set Rs = Db.OpenRecordset("SELECT Table1.Pays FROM Table1 GROUP BY
Table1.Pays ORDER BY Table1.Pays;")
Do Until Rs.EOF
Db.Execute "SELECT Table1.* INTO " & Rs!pays & " FROM Table1 WHERE
Table1.Pays = '" & Rs!pays & "'"
Rs.MoveNext
Loop
Rs.Close
Set Rs = Nothing
Set Db = Nothing

non testé, tu fais une copie de ta base avant.
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Newsfeeds" <¤> a écrit dans le message de news:
Je souhaite diviser une très grande table en plusieurs tables selon un
critère.
Exemple : j'ai une base qui a un champ pays. Je voudrai une table pour
chaque valeur de pays contenue dans la table.
J'obtiens cela par requête création. Mais cela demande de nombreuses
opérations manuelles qui doivent être répétées.
Quelqu'un a-t-il une astuce ou un bout de code pour faire cette tâche ?

Merci
Charlie




----== Posted via Newsfeed.Com - Unlimited-Uncensored-Secure Usenet
News==----

http://www.newsfeeds.com The #1 Newsgroup Service in the World! >100,000
Newsgroups

---= 19 East/West-Coast Specialized Servers - Total Privacy via Encryption
=---


Avatar
Charlie
Merci pour la réponse. Cela marche.
Super ! Merci!


-----Message d'origine-----
Salut Annette et Charlie,

"hm15" a écrit:
| ... mais de quoi je me mêle...
| Ne sachant pas programmer,
| Toi, tu sais programmer ;-))

Trop modeste ou tu te moque ( peut-être les deux ;-))))


Charlie:
Si dans ta table, le champ s'appelle [Pays]...
execute cette fonction en adaptant le nom de ta table.
Tu remplace donc "MaTable" par... le nom de la tienne.


Function SplitTable()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sSQL As String
Dim sPays As String

sSQL = "SELECT Pays FROM MaTable GROUP BY Pays ORDER BY
Pays;"


Set db = CurrentDb
Set rs = db.OpenRecordset(sSQL)
If Not rs.EOF Then
Do Until rs.EOF
sPays = rs!Pays
CurrentDb.Execute "Select * INTO " & "tbl_" & rs!
Pays & " From MaTable Where [Pays]='" & sPays & "';"

rs.MoveNext
Loop
Else
msgbox "Pas de données"
End If

rs.Close
Set rs = Nothing
Set db = Nothing
End Function



Cela t'aide Charlie ?

;-)

--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------



.



Avatar
Charlie
Merci pour la réponse. Le code marche.
Si je veux remplacer le nom de la table et le nom du champ
par des variables comment dois-je les déclarer.
Je voudrai utiliser des Inputbox pour renseigner le nom de
la table et le nom du champ.
Dans le code SQL, il semble que je ne peux mettre des
variables (j'ai essayé le String).

Encore merci pour le code.

cordialement

Charlie
-----Message d'origine-----
Salut Annette et Charlie,

"hm15" a écrit:
| ... mais de quoi je me mêle...
| Ne sachant pas programmer,
| Toi, tu sais programmer ;-))

Trop modeste ou tu te moque ( peut-être les deux ;-))))


Charlie:
Si dans ta table, le champ s'appelle [Pays]...
execute cette fonction en adaptant le nom de ta table.
Tu remplace donc "MaTable" par... le nom de la tienne.


Function SplitTable()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sSQL As String
Dim sPays As String

sSQL = "SELECT Pays FROM MaTable GROUP BY Pays ORDER BY
Pays;"


Set db = CurrentDb
Set rs = db.OpenRecordset(sSQL)
If Not rs.EOF Then
Do Until rs.EOF
sPays = rs!Pays
CurrentDb.Execute "Select * INTO " & "tbl_" & rs!
Pays & " From MaTable Where [Pays]='" & sPays & "';"

rs.MoveNext
Loop
Else
msgbox "Pas de données"
End If

rs.Close
Set rs = Nothing
Set db = Nothing
End Function



Cela t'aide Charlie ?

;-)

--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------



.



Avatar
3stone
Salut,

"Charlie"
Si je veux remplacer le nom de la table et le nom du champ
par des variables comment dois-je les déclarer.
Je voudrai utiliser des Inputbox pour renseigner le nom de
la table et le nom du champ.


Voilà... mais... bizarre tout de même ;-))



Function SplitTable()

Dim db As Database
Dim rs As Recordset
Dim sSQL As String
Dim sPays As Integer
Dim sTable As String
Dim sChamp As String

sTable = inputbox("Nom de la table :")
sChamp = inputbox("Nom du champ :")
if sTable="" OR sChamp="" Then Exit Function

sSQL = "SELECT [" & sChamp & "] FROM " & sTable & " GROUP BY [" & sChamp & "] ORDER BY [" & sChamp & "];"

Set db = CurrentDb
Set rs = db.OpenRecordset(sSQL)
If Not rs.EOF Then
Do Until rs.EOF
sPays = rs.Fields(sChamp)
CurrentDb.Execute "Select * INTO tbl_" & rs.Fields(sChamp) & " From " & sTable & " Where [" & sChamp & "]=" &
sPays & ";"
rs.MoveNext
Loop
Else
msgbox "Pas de données"
End If

rs.Close
Set rs = Nothing
Set db = Nothing

End Function



--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------

Avatar
Charlie
Merci pour ces bouts de code qui m'ont aidé à intégrer
les substilités de l'intégration et de la syntaxe du SQL
en VBA.
J'ai un très bon Prof.
Le besoin peut paraître bizarre, mais dans mon cas il
s'agit de transmettre des tables très volumineuses
(environ 500 000 -> 700 000 enreg x 10 champs )à des
experts pour tests et par domaine. J'ai donc une base par
testeur. En tout j'ai environ 10 millions
d'enregistrements extraits d'Oracle à répartir dans 20
bases.

Les Inputbox doivent me permettre d'accélérer le
processus de création de table en l'étendant à d'autres
champs et tables. ex : domaine et responsable.

J'ai glané des astuces et des exemples un peu partout sur
Internet. Cependant, dans le cas qui nous concerne j'ai
passé en vain 1 heure à chercher ce que je voulais.
Existe-t-il des ressources cachées sur Internet qui
donnent de façon complète des réponses à ces multitudes
de besoins qui au premier abord paraissent simples, mais
qui dans la pratique sont plus compliqués ?

-----Message d'origine-----
Salut,

"Charlie"
Si je veux remplacer le nom de la table et le nom du
champ


par des variables comment dois-je les déclarer.
Je voudrai utiliser des Inputbox pour renseigner le nom
de


la table et le nom du champ.


Voilà... mais... bizarre tout de même ;-))



Function SplitTable()

Dim db As Database
Dim rs As Recordset
Dim sSQL As String
Dim sPays As Integer
Dim sTable As String
Dim sChamp As String

sTable = inputbox("Nom de la table :")
sChamp = inputbox("Nom du champ :")
if sTable="" OR sChamp="" Then Exit Function

sSQL = "SELECT [" & sChamp & "] FROM " & sTable & "
GROUP BY [" & sChamp & "] ORDER BY [" & sChamp & "];"


Set db = CurrentDb
Set rs = db.OpenRecordset(sSQL)
If Not rs.EOF Then
Do Until rs.EOF
sPays = rs.Fields(sChamp)
CurrentDb.Execute "Select * INTO tbl_" & rs.Fields
(sChamp) & " From " & sTable & " Where [" & sChamp & "]="

&
sPays & ";"
rs.MoveNext
Loop
Else
msgbox "Pas de données"
End If

rs.Close
Set rs = Nothing
Set db = Nothing

End Function



--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------



.




Avatar
3stone
Salut,

[...]
En tout j'ai environ 10 millions
d'enregistrements extraits d'Oracle à répartir dans 20
bases.

Les Inputbox doivent me permettre d'accélérer le
processus de création de table en l'étendant à d'autres
champs et tables. ex : domaine et responsable.


Ceci explique cela ;-)))

Mais, attention tout de même...
Il n'y à aucune gestion d'erreur dans ces quelques lignes !!
Si tu saisi une table ou un champ qui n'existe pas...
Pour un usage intensif, il aurait fallu étoffé quelque peu.


[...]
Existe-t-il des ressources cachées sur Internet qui
donnent de façon complète des réponses à ces multitudes
de besoins qui au premier abord paraissent simples, mais
qui dans la pratique sont plus compliqués ?


Commence par regarder le lien dans ma signature...
tu y trouvera, entre autre, tous les sites que nous conseillons.

Et puis, ici est un exellent lieu pour trouver de l'aide ;-))


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------