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 25/11/2010, 18h47   #1
Membre régulier
 
Guillaume
Inscription : décembre 2007
Messages : 161
Détails du profil
Informations personnelles :
Nom : Guillaume
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : décembre 2007
Messages : 161
Points : 91
Points : 91
Par défaut Tester si un sous-formulaire affiche des données

Bonjour !

Une question complémentaire... dans l'optique de résoudre le problème décrit ici.

Voici un contexte simplifié :
- Formulaire principal : 1 champ "Article"
- Sous-formulaire : 1 champ "Total"
=> Fonctionnement : lorsque je saisis une valeur dans le champ "Article", le sous-formulaire apparaît avec le champ "Total" à jour grâce à la relation père/fils.

Le problème : dans une procédure, je fais référence au champ "Total" comme suit :
Code :
1
2
3
Public Sub test()
    MsgBox Nz(Me.Ss_Form.Form.Total.Value, 0)
End Sub
Mais lorsqu'il n'y a pas de valeur correspondant à l'article (champ père) dans la source de données du sous-formulaire, on obtient l'erreur '2427 : Expression sans paramètre'.

Est-il possible tester directement (c'est-à-dire sans recordset) si le sous-formulaire affiche des données ?
dut-dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 18h54   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 079
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 079
Points : 11 620
Points : 11 620
Bonjour,

Intercepte l'erreur 2427 tout simplement...

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 11h19   #3
Membre régulier
 
Guillaume
Inscription : décembre 2007
Messages : 161
Détails du profil
Informations personnelles :
Nom : Guillaume
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : décembre 2007
Messages : 161
Points : 91
Points : 91
Bonjour,

Effectivement ça parait logique mais je cherche s'il n'y a pas une autre solution car cette erreur se produit dans 2 cas de figure :
- cas 1 : lorsqu'il n'y a pas de données à afficher dans le sous-formulaire (cas dont je parle ici)
- cas 2 : lorsque le sous-formulaire va bien contenir des données mais n'a pas encore eu le temps de s'actualiser (cas dont je parle dans ce post)

J'essaie donc de trouver un moyen de distinguer le traitement de ces 2 situations :
- cas 1 : on arrête la procédure et on renvoie un message d'erreur
- cas 2 : on patiente (avec une boucle DoEvents) jusqu'à ce que le sous-formulaire s'actualise
dut-dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 16h34   #4
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour,

J'avais trouvé cet exemple dans l'aide Acces e Microsoft (rubrique "comment faire ... dans Acces 2007)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Form_Current()
 
    With Me![Orders_Subform].Form
 
        ' Check the RecordCount of the Subform.
        If .RecordsetClone.RecordCount = 0 Then
 
            ' Hide the subform.
            .Visible = False
 
        End If
    End With
End Sub
Tu devrait pouvoir adapter ce code pour empêcher l'exécution de ton instruction.
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 09h53   #5
Membre régulier
 
Guillaume
Inscription : décembre 2007
Messages : 161
Détails du profil
Informations personnelles :
Nom : Guillaume
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : décembre 2007
Messages : 161
Points : 91
Points : 91
Bonjour et bon début de semaine !
Je ne suis qu'à moitié convaincu car cette méthode implique un recordset (mes sources de données sont des requêtes parfois compliquées et longues à exécuter) mais en l'absence de meilleure proposition, je vais voir ce que ça donne...
dut-dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 10h09   #6
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 237
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 237
Points : 11 023
Points : 11 023
Bonjour,

Si le problème est d'obtenir une valeur correcte ou "quelque-chose-par-défaut quoi-qu'il-arrive" , j'utilise ceci plutôt que Nz :
Code :
1
2
3
4
5
6
7
8
9
10
11
Function NullToZero(anyValue As Variant) As Variant
On Error GoTo error
    If IsNull(anyValue) Then
        NullToZero = 0
    Else
        NullToZero = anyValue
    End If
Exit Function
error:
NullToZero = 0
End Function
Ici, quoi qu'il arrive, j'obtiens une réponse.
Nz() fonctionne pour une valeur "Null" mais pas si cette valeur n'existe pas ou, dans ton cas, si elle n'existe pas encore.
Ps A utiliser en connaissance de cause !
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 15h31   #7
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 079
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 079
Points : 11 620
Points : 11 620
Bonjour,

Pas d'interception d'erreur, pas d'utilisation de recordset.

Concernant la solution proposée par Dumas-lbr je la trouve parfaitement valable.
Elle ne te convainc pas et pourtant si on analyse les objets utilisés on s'aperçois qu'il utilise le recordset du formulaire. Donc l'argument selon lequel cela pourrait poser des problèmes (de lenteurs ?) avec des requetes complexes ne tient pas trop la route.

En effet le recordset du formulaire est déjà ouvert, et ces propriétés sont déjà intialisées.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 15h55   #8
Membre régulier
 
Guillaume
Inscription : décembre 2007
Messages : 161
Détails du profil
Informations personnelles :
Nom : Guillaume
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : décembre 2007
Messages : 161
Points : 91
Points : 91
Citation:
Envoyé par loufab Voir le message
Bonjour,

Pas d'interception d'erreur, pas d'utilisation de recordset.
Ouais je sais c'est pas très pratique...

Citation:
Envoyé par loufab Voir le message
Concernant la solution proposée par Dumas-lbr je la trouve parfaitement valable.
Elle ne te convainc pas et pourtant si on analyse les objets utilisés on s'aperçois qu'il utilise le recordset du formulaire. Donc l'argument selon lequel cela pourrait poser des problèmes (de lenteurs ?) avec des requetes complexes ne tient pas trop la route.

En effet le recordset du formulaire est déjà ouvert, et ces propriétés sont déjà intialisées.

Cordialement,
Je n'avais pas percuté cette subtilité en ce qui concerne le clone du recordset. C'est bon à savoir et je retiens pour plus tard.
Malheureusement, la solution de dumas.blr ne fonctionne pas dans le cas 2 (lorsque le sous-formulaire va bien contenir des données mais n'a pas encore eu le temps de s'actualiser).

N'ayant toujours pas de solution, en attendant je fonctionne avec des recordsets... La question reste néanmoins en suspend et je ne mets pas le flag "Résolu" au cas où quelqu'un ait une solution à proposer à l'avenir.
dut-dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h36.


 
 
 
 
Partenaires

Hébergement Web