Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/10/2011, 09h13   #1
Nouveau Membre du Club
 
Inscription : juin 2011
Messages : 93
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 93
Points : 28
Points : 28
Par défaut Suppression record dans sous-formulaire

Bonjour,

Dans un sous-formulaire, je fais appel à une fonction pour calculer le total de toutes les lignes
Quand je supprime une ligne de mon sous-formulaire, la fonction, que j'appelle sur l'événement après suppression de mon sous-formulaire me renvoie une erreur
Voici la fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Function pFctTotal(Ref As String) As Single
    Dim dbmadb As DAO.Database
    Set dbmadb = CurrentDb
    Dim RecGraux As DAO.Recordset
    Dim StrSql As String
    StrSql = "SELECT TblGrauxDet.edref, Sum(TblGrauxDet.edprixnet) AS SommeDeedprixnet FROM TblGrauxDet GROUP BY TblGrauxDet.edref HAVING TblGrauxDet.edref=" & Chr(34) & Ref & Chr(34)
    Set RecGraux = dbmadb.OpenRecordset(StrSql)
    'MsgBox StrSql
     If RecGraux.EOF Then
        pFctTotal = 0
     Else
        pFctTotal = RecGraux!sommedeedprixnet
    End If
    RecGraux.Close
    Set RecGraux = Nothing
    Set dbmadb = Nothing
End Function
Merci pour votre aide
fclus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 10h34   #2
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Ce n'est sans doute pas cela, mais essayez en ajoutant le type de recordset qui est ouvert (c'est facultatif, mais sait on jamais)

Code :
Set RecGraux = dbmadb.OpenRecordset(StrSql, dbOpendynaset))
Bonne journée

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 10h42   #3
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour,

Je ne vois pas d'erreur si les champs edref et edprixnet sont bien respectivement en texte et numérique.

Quel est le message d'erreur et comment appelez vous la fonction ?

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 11h46   #4
Nouveau Membre du Club
 
Inscription : juin 2011
Messages : 93
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 93
Points : 28
Points : 28
dbopendynaset ne corrige pas le problème

edref est bien alpha
edprixnet est bien numérique

la fonction est appelée via un contrôle CtlTotal dans mon sous-formulaire

source du contrôle = pfcttotal([edref])

événement après suppression de mon sous-formulaire
fclus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 11h57   #5
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Je ne vois tjrs rien ... quel est le message d'erreur ?

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 12h00   #6
Nouveau Membre du Club
 
Inscription : juin 2011
Messages : 93
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 93
Points : 28
Points : 28
Il n'y a pas de message d'erreur
Mon contrôle CtlTotal indique #Erreur
fclus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 12h09   #7
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Vous avez bien :

source du contrôle CtlTotal ayant comme valeur ?
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 13h02   #8
Nouveau Membre du Club
 
Inscription : juin 2011
Messages : 93
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 93
Points : 28
Points : 28
oui, c'est bien ça
fclus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 13h17   #9
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Salut,

Tu as essayé ta fonction dans une requête ?

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 09h15   #10
Nouveau Membre du Club
 
Inscription : juin 2011
Messages : 93
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 93
Points : 28
Points : 28
Ma fonction marche dans tous les cas sauf si je supprime un enregistrement
Lorsque Access supprime un record dans une table, il remplace les données par du blanc (pour schématiser) mais le record est toujours présent
La fonction ne doit pas apprécier ce record à blanc
Il faudrait pouvoir réorganiser la table pour supprimer physiquement ce record
Mais de quelle manière ?
fclus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 09h19   #11
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour,

J'ai testé la fonction qui fonctionne parfaitement sous A2000. (A noter que la fonction de domaine Dsum permet d'obtenir le même résultat, mais ça n'explique pas votre problème ...)

Testez la fonction comme l'indique User ou avec un :

Code :
MsgBox pFctTotal([edref])
Essayez aussi source du contrôle CtlTotal ayant comme valeur :

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 10h55   #12
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Nos messages se sont croisés ...

Sur mon test, je n'obtiens CtlTotal indique #Erreur que si je me place sur un nouvel enregistrement (logique). N'est ce pas le cas lorsque vous supprimez un enregistrement : n'avez vous pas du code qui place le curseur sur un nouvel enregistrement ?

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 15h19   #13
Nouveau Membre du Club
 
Inscription : juin 2011
Messages : 93
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 93
Points : 28
Points : 28
Oui, c'est bien ça ! Le curseur se positionne sur un nouvel enregistrement et la fonction me renvoie donc une erreur

En fait, le but final est de mettre à jour le champ <eeprix> dans le formulaire père. J'utilise donc un contrôle dans mon sous-formulaire

Code :
1
2
3
4
5
6
7
8
Me.edprixnet = Me.edprixbrut * (1 - Me.edremise)
Me.eddatmaj = Now
Forms![FrmGrauxEnt]![eedatmaj] = Now
Forms![FrmGrauxEnt]![eedatmaj].Requery
DoCmd.RunCommand acCmdSaveRecord
Me.CtlTotal.Requery
Forms![FrmGrauxEnt]![eeprix] = Round(Me.CtlTotal, 2)
Forms![FrmGrauxEnt]![eeprix].Requery
Comment mettre à jour ce prix sur suppression d'un enregistrement de mon sous-formulaire ?
fclus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 15h37   #14
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Rafraichissez ou recalculez le contrôle du formulaire père à partir de l'événement après suppression du sous-formulaire.

PS : à la réflexion je suis surpris par le raisonnement car selon l'enregistrement du sous formulaire sur lequel se trouve votre curseur, la valeur de votre fonction change, donc celle de votre champ du formulaire père aussi ... ou je n'ai pas tout suivi ...

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 15h52   #15
Nouveau Membre du Club
 
Inscription : juin 2011
Messages : 93
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 93
Points : 28
Points : 28
Voilà,
Je me positionne sur l'enregistrement précédent et je relance le calcul

Code :
1
2
3
4
Me.Form.Recordset.MovePrevious
Me.CtlTotal.Requery
[Forms]![FrmGrauxEnt]![eeprix] = Round(Me.CtlTotal, 2)
[Forms]![FrmGrauxEnt]![eeprix].Requery
Merci pour votre aide
fclus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h58.


 
 
 
 
Partenaires

Hébergement Web