[Base] Comment ajouter un enregistrment dans une table avec une macro

Bonjour à tous,
Je voudrais ajouter un enregistrement dans une table, directement avec une macro associée à un bouton de formulaire sans passer par la propriété “Action” du bouton. Certains champs du formulaire seront à reprendre dans l’enregistrement mais pas tous, d’autres champs de la table seront alimentés par d’autres données. Enfin les champs du formulaire seront réinitialisés pour pouvoir saisir un nouvel enregistrement. Pensez-vous que cela soit possible ?
Je pensais peut-être exécuter une requête SQL (pour l’ajout) puis un boucle pour réinitialiser les champs de formulaire.
Merci pour votre aide.

Bonsoir,
Ce que tu cherche à faire est assez compliqué, mais faisable, il y a des éléments dans “la bible” Marcelly-Godard.
Pour l’accès aux formulaires, c’est bien décrit dans le Guide Base.
Il faudrait un exemple de base et un cahier des charges précis (détail et chronologie des opérations) pour répondre efficacement.
Cordialement,

Merci jeanmi2403.
En effet je ne connaissait pas ce guide. Ça m’a l’air assez complet. J’espère bien en tirer quelque chose.
Cordialement

Bonsoir,
Je reviens sur ce sujet avec une question. Je suppose qu’il s’agit de créer un enregistrement avec certains éléments du précédent ?
Si c’est le cas, je peux écrire un exemple simple…
Bonne soirée,
JM

merci pour ton aide et tes conseils
Je suis arrivé à mes fins … mise à part le oForm.reload qui ne fonctionne toujours pas, jai posté un topic à ce sujet
Voici ce que j’ai écris et qui ne marche pas trop mal

Blockquote
Sub Save_Ecriture (oEvt As Object )
Dim sSQL, sLibel, sPiece, sDate, sMode As String
Dim oForm As Object
Dim oAffiche As Object
Dim lnumID As Long
Dim vDebit As Variant

oForm=oEvt.Source.Model.Parent

oForm.txtLibel.Text=Replace(oForm.txtLibel.Text,"’","’’")
oForm.txtPiece.Text=Replace(oForm.txtPiece.Text,"’","’’")
sDate=Format(CDateToIso(oForm.dteDate.Text),“0000-00-00”)

lnumID = oForm.numEcrID.Value

‘SET f_Postnr = CAST(‘66886’ AS INT)
‘replace(cast(Champs_1 as varchar(10)),’.’,’,’)
If lnumID Then
’ Print “update”
sSQL = “UPDATE ““Ecriture”” SET " & _
“”“ecrnum”” =’" & oForm.numEcr.Value & “’,” & _
“”“ecrjnl”" = ‘" & oForm.lstJournal.SelectedValue &"’, " & _
“”“ecrdate”" =’" & sDate &"’, " & _
“”“ecrcpt”" = ‘" & oForm.lstCptnum.SelectedValue &"’, " & _
“”“ecrlib”" = ‘" & oForm.txtLibel.Text &"’, " & _
“”“ecrdebit”" = REPLACE( ‘" & oForm.numDebitValue &"’,’,’,’.’) , " & _
“”“ecrcredit”" = REPLACE( ‘" & oForm.numCredit.Value &"’,’,’,’.’) , " & _
“”“ecrpiece “”= '” & oForm.txtPiece.Text &"’" & _
" WHERE ““ecrID”” = ‘" & lnumID &"’"
Else
’ Print “Insert”
sSQL = “INSERT INTO ““Ecriture”” " & _
" (”“ecrnum”","“ecrjnl”","“ecrdate”","“ecrcpt”"," & _
“”“ecrlib”","“ecrdebit”","“ecrcredit”","“ecrpiece”") " & _
“VALUES (” & _
“’” & oForm.numEcr.Value &"’, " & _
“’” & oForm.lstJournal.SelectedValue &"’, " & _
“’” & sDate &"’, " & _
“’” & oForm.lstCptnum.SelectedValue &"’, " & _
“’” & oForm.txtLibel.Text &"’, " & _
" REPLACE(’" & oForm.numDebit.Value &"’,’,’,’.’), " & _
" REPLACE(’" & oForm.numCredit.Value &"’,’,’,’.’), " & _
“’” & oForm.txtPiece.Text &"’)"
End if

Update_SQL(sSQL)

MsgBox(“Enregistrement effectué”,64,“Saisie des écritures”)

oForm.numEcrSolde.Value=Solde_Ecr(oForm.numEcr.Value)

'initialisation des champs pour une nouvelle écriture
oForm.numEcrID.Value = “”
oForm.txtPiece.Text = “”
oForm.txtLibel.Text =""
oForm.lstCptNum.SelectedValue=""
oForm.numDebit.Value=0
oForm.numCredit.Value=0

toggleBouton(oForm,“False”,“False”,“True”,“True”)

'rafraichi l’affichage du sous formulaire
oAffiche = oForm.sfEcriture
oAffiche.Filter="(ecrnum = ‘" & oForm.numEcr.Value &"’)"
oAffiche.reload
'oAffiche.Filter = “”

End Sub

Blockquoteles p
Bon il y quelques trucs un peu ch…nts dans le SQL il faut remplacer les “,” par des “.” pour les champs décimaux, ainsi que les quotes et doubles quotes dans les tes champs texte. Bon c’est encore en travaux je trouverais sans doute des solutions plus “élégante”
Merci encore.

Bonsoir,
Effectivement, en SQL c’est assez lourd à écrire.
Je verrais plutôt :

  • Récupération dans le formulaire des données à conserver
  • passer à l’enregistrement suivant
  • placer les valeurs dans le formulaire.
    en travaillant directement dans le RecordSet
    Pour le reload, s’il n’y a pas de sous-formulaire, je ne vois pas pourquoi ça ne fonctionne pas.
    Et je mettrais le inumID en autovaleur, ça devrait simplifier la gestion…
    Cordialement

Bonjour,
Merci d’avoir pris un peu de temps pour me répondre.
J’ai du mal à comprendre ta procédure :relieved:
J’ai envoyé une basetest dans mon topic sur le prblème d’affichage.. Si tu as un peu de temps à y consacrer …
Le inumID est bien en autovaleur, je le récupère uniquement dans le cas de la mise à jour ou suppression de l’enregistrement.
Cordialement