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

Ajouter des enregistrements via une reqûete ou un module dans x ta

10 réponses
Avatar
cadouxmi
Bonjour,

Je voudrais automatiser l'ajout d'enregistrements dans toutes les tables
d'une même base de données (> 150 tables) .
Je dois ajouter 4 enregistrements correspondants à de nouvelles agences dans
toutes mes tables.
Mes connaissances en VB étant limitées je me permets de m'adresser à la
communauté afin de savoir si cela est possible via une requête ajout ou via
un module.

Merci pour votre aide .

10 réponses

Avatar
FFO
salut à toi

Mets dans une nouvelle table tes nouvelles agences que tu nomeras "Agences"

Dans un module tu mets ce code :

Public Function Ajout() As Boolean
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "Agences" Then
CurrentDb.Execute "Insert into " & tdf.Name & " Select * From Agences"
End If
Next
End Function

Exécutes ce code via une Macro

Celà devrait faire
Dis moi !!!!
Avatar
cadouxmi
"FFO" a écrit :

salut à toi

Mets dans une nouvelle table tes nouvelles agences que tu nomeras "Agences"

Dans un module tu mets ce code :

Public Function Ajout() As Boolean
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "Agences" Then
CurrentDb.Execute "Insert into " & tdf.Name & " Select * From Agences"
End If
Next
End Function

Exécutes ce code via une Macro

Celà devrait faire
Dis moi !!!!

J'ai suivi tes instructions.


J'ai le message erreur n° 3134 avec info "erreur de syntaxe dans
l'instruction "INSERT INTO" lorsque je lance le module . Si je selectionne
débogage cela ne selectionne la ligne "CurrentDb.Execute "Insert into " &
tdf.Name & " Select * From zAgences""



J'ai nommé volontairement ma table Zagences et le nom du champ est CCM
(comme dans chaque table).
Avatar
FFO
Rebonjours à toi

Peux tu me transmettre ta base avec quelques tables et celle-ci avec son
module en .Zip par ce biais :

http://www.cijoint.fr/index.php

Communiques moi le lien pour que je la récupère

Merci
Avatar
FFO
Rebonjour à toi

Attention d'utiliser dans le code le même nom que celui de la table créée :

Table créée : Zagences

donne ce code :

Public Function Ajout() As Boolean
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "Zagences" Then
CurrentDb.Execute "Insert into " & tdf.Name & " Select * From Zagences"
End If
Next
End Function

surtout ne pas utiliser dans le code : zAgences
qui n'est pas la même chose que Zagences

Ce qui semblerait être le cas à en croire ta réponse

A vérifier !!!!!
Avatar
cadouxmi
Ci joint le lien vers le fichier que j'ai déposé.

http://www.cijoint.fr/cjlink.php?file=cj200903/cijBpViCu5.zip

La codification de "zAgences" est identique entre le nom de la table et la
saisie dans le module . J'ai simplement fait une erreur de frappe lors de
l'envoi du précédent message.
Je vais profiter de ta grande bonté en posant une question subsidiaire .

Je souhaite aussi avoir un module qui va me créer automatiquement un nouveau
champ dans chaque table . Actuellemnt cela s'arrête à 1210 (décembre 2010) et
je voudrais pouvoir rajouter une année en créaént automatoquement des champs.
J'ai ainsi plus de 2000 (deux milles) petites tables à mettre à jour.

Merci beaucoup pour ton aide .



"FFO" a écrit :

Rebonjour à toi

Attention d'utiliser dans le code le même nom que celui de la table créée :

Table créée : Zagences

donne ce code :

Public Function Ajout() As Boolean
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "Zagences" Then
CurrentDb.Execute "Insert into " & tdf.Name & " Select * From Zagences"
End If
Next
End Function

surtout ne pas utiliser dans le code : zAgences
qui n'est pas la même chose que Zagences

Ce qui semblerait être le cas à en croire ta réponse

A vérifier !!!!!



Avatar
FFO
Rebonjour à toi

Aprés analyse de ta base le code fonctionne trés bien

Tout d'abors utilises dans la macro "Ajout Nouvelles CCM" l'Action
"ExécuterCode" en choisissant la fonction de la base "Ajout Nouvelles CCM"

Puis pour que l'ajout dans les tables fonctionne il est impératif que les
données de chaque champ à rajouter soient compatibles avec la nature du champ
de destination
Tu ne peux intégrer dans un champ Numérique des données Textes
En l'état les données de la table zAgences ne peuvent être intégrées dans
les autres tables suite à incompatibilité de type

Si tu essaies par un copier/coller basique l'opération c'est un échec total

Résouds ce problème et le code fonctionnera

Si tu arrives par un copier/coller manuel la recopie des données de la table
zAgences dans une table de destination sachant qu'elles doivent être toutes
identiques au niveau de la structure de leurs champs le code sera opérationnel

Pour l'ajout des colonnes je te propose ce code testé avec ta base :

Champ supplémentaire de type Numérique

Public Function AjoutChamp() As Boolean
Champ = InputBox("Veuillez saisir le nom du champ à ajouter", "Nom du champ")
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "zAgences" Then
CurrentDb.Execute "ALTER TABLE [" & tdf.Name & "] ADD COLUMN " & Champ
& " Numeric"
End If
Next
End Function

Champ supplémentaire de type Texte

Public Function AjoutChamp() As Boolean
Champ = InputBox("Veuillez saisir le nom du champ à ajouter", "Nom du champ")
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "zAgences" Then
CurrentDb.Execute "ALTER TABLE [" & tdf.Name & "] ADD COLUMN " & Champ
& " text"
End If
Next
End Function


Le code demandera par l'intémédiaire d'une boîte de dialogue le libellé du
champ à rajouter puis l'intégrera dans toutes les tables

Fais des essais et dis moi
Avatar
cadouxmi
Pour la partie "Ajout d'enregistrement" j'ai fait un copier coller pour
tester (sans rien changer) et cela fonctionne sans problème . Je copie des
données texte (Champ Codefede de la table zAgences) vers des données texte
(Champ CCM d'une des 4 tables présentes dans le fichier transmis tout à
l'heure).
J'ai modifié comme demandé la macro , en sélectionnant "executer code" puis
le nom du module .
J'ai toujours le même problème.
Ne faut il aps que je spécifie quelque part le nom du champ de destination
(CCM en l'occurence) qui est le même pour toutes les tables ?

Pour la partie ajout champ je ferai un test demain.

"FFO" a écrit :

Rebonjour à toi

Aprés analyse de ta base le code fonctionne trés bien

Tout d'abors utilises dans la macro "Ajout Nouvelles CCM" l'Action
"ExécuterCode" en choisissant la fonction de la base "Ajout Nouvelles CCM"

Puis pour que l'ajout dans les tables fonctionne il est impératif que les
données de chaque champ à rajouter soient compatibles avec la nature du champ
de destination
Tu ne peux intégrer dans un champ Numérique des données Textes
En l'état les données de la table zAgences ne peuvent être intégrées dans
les autres tables suite à incompatibilité de type

Si tu essaies par un copier/coller basique l'opération c'est un échec total

Résouds ce problème et le code fonctionnera

Si tu arrives par un copier/coller manuel la recopie des données de la table
zAgences dans une table de destination sachant qu'elles doivent être toutes
identiques au niveau de la structure de leurs champs le code sera opérationnel

Pour l'ajout des colonnes je te propose ce code testé avec ta base :

Champ supplémentaire de type Numérique

Public Function AjoutChamp() As Boolean
Champ = InputBox("Veuillez saisir le nom du champ à ajouter", "Nom du champ")
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "zAgences" Then
CurrentDb.Execute "ALTER TABLE [" & tdf.Name & "] ADD COLUMN " & Champ
& " Numeric"
End If
Next
End Function

Champ supplémentaire de type Texte

Public Function AjoutChamp() As Boolean
Champ = InputBox("Veuillez saisir le nom du champ à ajouter", "Nom du champ")
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "zAgences" Then
CurrentDb.Execute "ALTER TABLE [" & tdf.Name & "] ADD COLUMN " & Champ
& " text"
End If
Next
End Function


Le code demandera par l'intémédiaire d'une boîte de dialogue le libellé du
champ à rajouter puis l'intégrera dans toutes les tables

Fais des essais et dis moi



Avatar
Eric
Bonjour,

Si c'est juste le champ CCM que tu veux renseigner par Codefede:
Public Function Ajout()
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "zAgences" Then
CurrentDb.Execute "Insert into [" & tdf.Name & "](CCM) Select
Codefede From zAgences"
End If
Next
End Function

cadouxmi a écrit :
Pour la partie "Ajout d'enregistrement" j'ai fait un copier coller pour
tester (sans rien changer) et cela fonctionne sans problème . Je copie des
données texte (Champ Codefede de la table zAgences) vers des données texte
(Champ CCM d'une des 4 tables présentes dans le fichier transmis tout à
l'heure).
J'ai modifié comme demandé la macro , en sélectionnant "executer code" puis
le nom du module .
J'ai toujours le même problème.
Ne faut il aps que je spécifie quelque part le nom du champ de destination
(CCM en l'occurence) qui est le même pour toutes les tables ?

Pour la partie ajout champ je ferai un test demain.

"FFO" a écrit :

Rebonjour à toi

Aprés analyse de ta base le code fonctionne trés bien

Tout d'abors utilises dans la macro "Ajout Nouvelles CCM" l'Action
"ExécuterCode" en choisissant la fonction de la base "Ajout Nouvelles CCM"

Puis pour que l'ajout dans les tables fonctionne il est impératif que les
données de chaque champ à rajouter soient compatibles avec la nature du champ
de destination
Tu ne peux intégrer dans un champ Numérique des données Textes
En l'état les données de la table zAgences ne peuvent être intégrées dans
les autres tables suite à incompatibilité de type

Si tu essaies par un copier/coller basique l'opération c'est un échec total

Résouds ce problème et le code fonctionnera

Si tu arrives par un copier/coller manuel la recopie des données de la table
zAgences dans une table de destination sachant qu'elles doivent être toutes
identiques au niveau de la structure de leurs champs le code sera opérationnel

Pour l'ajout des colonnes je te propose ce code testé avec ta base :

Champ supplémentaire de type Numérique

Public Function AjoutChamp() As Boolean
Champ = InputBox("Veuillez saisir le nom du champ à ajouter", "Nom du champ")
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "zAgences" Then
CurrentDb.Execute "ALTER TABLE [" & tdf.Name & "] ADD COLUMN " & Champ
& " Numeric"
End If
Next
End Function

Champ supplémentaire de type Texte

Public Function AjoutChamp() As Boolean
Champ = InputBox("Veuillez saisir le nom du champ à ajouter", "Nom du champ")
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "zAgences" Then
CurrentDb.Execute "ALTER TABLE [" & tdf.Name & "] ADD COLUMN " & Champ
& " text"
End If
Next
End Function


Le code demandera par l'intémédiaire d'une boîte de dialogue le libellé du
champ à rajouter puis l'intégrera dans toutes les tables

Fais des essais et dis moi






--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Avatar
FFO
Rebonjour à toi

Effectivement comme je te l'ai dit dans ma réponse tu ne peux intégrer dans
un champ d'une table que des données de même type
Donc du texte avec du texte aucun souci
Mais tes données de 3 autres champs étant de nature différentes sont
inintégrables en l'état
Or ta demande initiales parles de 4 enregistrements sans être limité à un
seul champ :


"Je dois ajouter 4 enregistrements correspondants à de nouvelles agences dans
toutes mes tables"

D'ou mon constat et ma réponse

Si tu ne souhaites ajouter que le seul champ "CodeFede" en format texte dans
le champ "CCM" de toutes les tables lui aussi en format texte aucun souci
avec la proposition d'Eric

Maintenant précise bien tout le contexte de ton attente afin d'éviter des
propositions inadaptées

Pour les autres champs seul le champ "s_Generation" sera lui aussi intégrable

Une petite adaptation du code devra être nécessaire ainsi :

Public Function Ajout() As Boolean
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "zAgences" Then
CurrentDb.Execute "Insert into [" & tdf.Name & "](CCM,0307) Select
Codefede, s_Generation From zAgences"
End If
Next
End Function

J'espère cette fois-ci avoir bien collé à l'objet de tes attentes

Fais des essais et dis moi !!!!!
Avatar
cadouxmi
Re bonjour

Tout est Ok . Merci pour tout

"FFO" a écrit :

Rebonjour à toi

Aprés analyse de ta base le code fonctionne trés bien

Tout d'abors utilises dans la macro "Ajout Nouvelles CCM" l'Action
"ExécuterCode" en choisissant la fonction de la base "Ajout Nouvelles CCM"

Puis pour que l'ajout dans les tables fonctionne il est impératif que les
données de chaque champ à rajouter soient compatibles avec la nature du champ
de destination
Tu ne peux intégrer dans un champ Numérique des données Textes
En l'état les données de la table zAgences ne peuvent être intégrées dans
les autres tables suite à incompatibilité de type

Si tu essaies par un copier/coller basique l'opération c'est un échec total

Résouds ce problème et le code fonctionnera

Si tu arrives par un copier/coller manuel la recopie des données de la table
zAgences dans une table de destination sachant qu'elles doivent être toutes
identiques au niveau de la structure de leurs champs le code sera opérationnel

Pour l'ajout des colonnes je te propose ce code testé avec ta base :

Champ supplémentaire de type Numérique

Public Function AjoutChamp() As Boolean
Champ = InputBox("Veuillez saisir le nom du champ à ajouter", "Nom du champ")
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "zAgences" Then
CurrentDb.Execute "ALTER TABLE [" & tdf.Name & "] ADD COLUMN " & Champ
& " Numeric"
End If
Next
End Function

Champ supplémentaire de type Texte

Public Function AjoutChamp() As Boolean
Champ = InputBox("Veuillez saisir le nom du champ à ajouter", "Nom du champ")
For Each tdf In CurrentDb.TableDefs
If tdf.Name Like "MSys*" = False And tdf.Name <> "zAgences" Then
CurrentDb.Execute "ALTER TABLE [" & tdf.Name & "] ADD COLUMN " & Champ
& " text"
End If
Next
End Function


Le code demandera par l'intémédiaire d'une boîte de dialogue le libellé du
champ à rajouter puis l'intégrera dans toutes les tables

Fais des essais et dis moi