Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
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 21/11/2011, 15h09   #1
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Par défaut Compte nombre enregistrement d'un autre formulaire

Bonjour,

Sur un formulaire frm_customers, j'ai crée une étiquette qui ouvre un autre formulaire (frm_phonecalls) correspondant à ce même client.

Code :
1
2
3
4
Private Sub Label332_Click()
DoCmd.OpenForm "frm_phonecalls", acNormal, , "[Customer]=" & "'" & Me![Customernumber] & "'"
Forms.frm_phonecalls.Customer.DefaultValue = Me.Customernumber
End Sub
J'aimerais sur le formulaire frm_customers avoir une zone de texte faisant apparaître le nombre d'enregistrement du formulaire frm_phonecalls.

Voici la source contrôle du formulaire frm_phonecalls :

Code :
SELECT tbl_phonecalls.N°, tbl_phonecalls.Datetoday, tbl_phonecalls.Employee, tbl_phonecalls.Comment, tbl_phonecalls.Term, tbl_phonecalls.Datenextcall, tbl_phonecalls.Importance, tbl_phonecalls.Customer, tbl_phonecalls.N° FROM tbl_phonecalls ORDER BY tbl_phonecalls.Datetoday, tbl_phonecalls.Employee;
Merci de m'aider svp
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 17h06   #2
Membre éprouvé
 
Homme Robert LINCE
Conseiller psycho-pédagogique
Inscription : octobre 2007
Messages : 280
Détails du profil
Informations personnelles :
Nom : Homme Robert LINCE
Localisation : Belgique

Informations professionnelles :
Activité : Conseiller psycho-pédagogique
Secteur : Enseignement

Informations forums :
Inscription : octobre 2007
Messages : 280
Points : 479
Points : 479
Bonjour.
Voici une façon de faire :
Tu crées une zone de texte indépendante que tu appelles NbRecords. Dans ses propriétés, tu attribues la valeur par défaut 0, le format Standard et le nombre de décimales = 0
Ensuite, voici comment aménager ton code :
Code :
1
2
3
4
5
6
7
Private Sub Label332_Click()
Dim NbRcd As Long     'déclaration de la variable
DoCmd.OpenForm "frm_phonecalls", acNormal, , "[Customer]=" & "'" & Me![Customernumber] & "'"
NbRcd = Forms![frm_phonecalls].RecordsetClone.RecordCount    'Comptage du nombre d’enregistrements ouverts
Forms.frm_phonecalls.Customer.DefaultValue = Me.Customernumber
Me!NbRecords = NbRcd     ' Attribution à la zone de texte de la valeur de la variable
End Sub
Quand tu cliques sur ton Label332, le nombre d'enregistrements est compté et la zone texte est remplie par le résultat.
Cordialement.
RobiPMS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 17h18   #3
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Merci pour ta réponse mais je voudrais en fait avoir le résultat directement sans devoir clicker dessus ...
Je ne veux donc pas que le formulaire frm_phonecalls s'ouvre
Par ailleurs, si j'utilise ton code, lors de l'ouverture du formulaire frm_phonecalls il m'indique qu'il ne trouve pas le champ NbRecords auquel il est fait référence dans l'expression
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 22h18   #4
Membre éprouvé
 
Homme Robert LINCE
Conseiller psycho-pédagogique
Inscription : octobre 2007
Messages : 280
Détails du profil
Informations personnelles :
Nom : Homme Robert LINCE
Localisation : Belgique

Informations professionnelles :
Activité : Conseiller psycho-pédagogique
Secteur : Enseignement

Informations forums :
Inscription : octobre 2007
Messages : 280
Points : 479
Points : 479
Citation:
Par ailleurs, si j'utilise ton code, lors de l'ouvertude du formulaire frm_phonecalls il m'indique qu'il ne trouve pas le champ NbRecords auquel il est fait référence dans l'expression
As-tu préalablement créé dans ton formulaire "frm_customers" une zone de texte nommée NbRecords? Dans le code que j'ai écrit, "Me!NbRecords" fait évidemment référence à un champ indépendant nommé NbRecords dans le formulaire frm_customers.

Maintenant, si tu ne veux pas ouvrir le formulaire "frm_phonecalls", mais simplement afficher le nombre d'enregistrements correspondants, tu peux utiliser le code suivant, sur activation de ton formulaire frm_customers :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub Form_Current()
Dim db As DAO.Database
Set db = CurrentDb()
Dim reqSQL As String        		' variable qui contiendra la requête SQL à executer
Dim nbRcds As Long             		' variable qui contiendra le nombre d'enregistrements correspondant à ce client
Dim rcds As DAO.Recordset
reqSQL = "SELECT tbl_phonecalls.Customer FROM tbl_phonecalls Where tbl_phonecalls.Customer = '" & Forms![frm_customers]! Customernumber & "'"
Set rcds = db.OpenRecordset(reqSQL)
        If rcds.EOF Then               	' Cas où il n'y a pas d'enregistrements correspondant à la requête
        nbRcds = 0
        Else
        rcds.MoveLast
        nbRcds = rcds.RecordCount       ' comptage du nombre d'enregistrements correspondant à la requête
        End If
Me!NbRecords = nbRcds                  	' attribution de cette valeur à la zone de texte NbRecords existant dans  le formulaire frm_customers
db.Close                    		' fermeture et mise à zéro des variables critiques
Set db = Nothing
Set rcds = Nothing
End Sub
Le code fonctionne parfaitement, je l'ai testé. Vérifie que je ne me suis pas trompé dans les noms de tes tables et champs.
Cordialement.
RobiPMS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 10h00   #5
Débutant
 
Inscription : octobre 2004
Messages : 432
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 432
Points : 93
Points : 93
Cela marche merci beaucoup RobiPMS
J'ai un dernier problème, je dois faire cela pour plusieurs autres formulaires
Imaginons que je crée un autre champ texte "Contact" toujours sur le formulaire "frm_customers" et que je dois compter le nombre d'enregistrements d'un formulaire "frm_contact".
De quelle manière aménager ce code ?
lucas-18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 20h06   #6
Membre éprouvé
 
Homme Robert LINCE
Conseiller psycho-pédagogique
Inscription : octobre 2007
Messages : 280
Détails du profil
Informations personnelles :
Nom : Homme Robert LINCE
Localisation : Belgique

Informations professionnelles :
Activité : Conseiller psycho-pédagogique
Secteur : Enseignement

Informations forums :
Inscription : octobre 2007
Messages : 280
Points : 479
Points : 479
La partie de code à aménager et à reproduire dans ton événement « sur Activation »est celle qui suit :
Code :
1
2
3
4
5
6
7
8
9
10
11
Dim nbRcds As Long             
Dim rcds As DAO.Recordset
reqSQL = "SELECT tbl_phonecalls.Customer FROM tbl_phonecalls Where tbl_phonecalls.Customer = '" & Forms![frm_customers]! Customernumber & "'"
Set rcds = db.OpenRecordset(reqSQL)
        If rcds.EOF Then               	' Cas où il n'y a pas d'enregistrements correspondant à la requête
        nbRcds = 0
        Else
        rcds.MoveLast
        nbRcds = rcds.RecordCount       ' comptage du nombre d'enregistrements correspondant à la requête
        End If
Me!NbRecords = nbRcds                  	' attribution de cette valeur à la zone de texte NbRecords existant dans  le formulaire frm_customers
Tu dois déclarer les variables relatives à chacun des enregistrements que tu veux compter, en modifiant les noms pour les enregistrements que tu vas compter et le recordset que tu vas créer. Tu declares donc deux nouvelles variables
Code :
1
2
Dim nbRcds2 As Long             		
Dim rcds2 As DAO.Recordset
Ensuite, ce n’est pas le nombre de formulaires que l’on compte, mais le nombre d’enregistrements correspondant à une condition (ici, le client affiché) dans la source du formulaire que tu ne vas pas ouvrir et où se trouvent ces enregistrements. Donc tu dois simplement, dans ta requête (reqSQL) sélectionner les enregistrements de la table ou requête source de ton formulaire. Pour les appels téléphoniques c’est la tbl_phonecalls.
Donc, tu remplaces tbl_phonecalls par tbl_contacts (si c’est le nom de la source !) dans la nouvelle rqSQL
Code :
1
2
3
4
5
6
7
8
reqSQL = "SELECT tbl_ contacts.Customer FROM tbl_ contacts Where tbl_ contacts.Customer = '" & Forms![frm_customers]! Customernumber & "'"
Set rcds2 = db.OpenRecordset(reqSQL)
        If rcds2.EOF Then               	' Cas où il n'y a pas d'enregistrements correspondant à la requête
        nbRcds2 = 0
        Else
        Rcds2.MoveLast
        nbRcds2 = rcds2.RecordCount       ' comptage du nombre d'enregistrements correspondant à la requête
        End If
Enfin, tu attribues à ton nouveau champ la valeur qui vient d’être comptée
Code :
Me!Contact = nbRcds2                  	' attribution de cette valeur à la zone de texte Contact  existant dans  le formulaire frm_customers
A la fin de la suite de comptages, n’oublie pas la fermeture de la base et mise à zéro des variables critiques (db.Close etc).
RobiPMS 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 10h53.


 
 
 
 
Partenaires

Hébergement Web