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 10/06/2011, 19h02   #1
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
Par défaut Débogage Pas à pas

Bonsoir,

J'ai suivi la ressource "Création d'un état basé sur une requête analyse croisée" mais n'atteint malheureusement pas le résultat escompté. Le nombre de lignes est bien celui attendu mais les champs reste vides et le nombre de colonnes est supérieur à celui attendu.
Pour comprendre ce qui se passe, j'aimerais exécuter la macro en pas à pas je n'arrive à ne parcourir que le Report_Open de cette façon. Les points d'arrêt que j'ai placé dans les autres parties du code sont sans effet. Existe-t-il un moyen de suivre tout le code VBA lié à l'état en pas à pas ?
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 08h59   #2
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
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 242
Points : 11 040
Points : 11 040
Bonjour,

Quand tu affiches le code (<ALT> + <F11>), clique sur l'icône entourée :

Images attachées
Type de fichier : jpg ScreenShot004.jpg (63,1 Ko, 36 affichages)
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 13h47   #3
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
Bonjour,

C'est en cliquant sur ce bouton (ou en passant par le menu ou en appuyant sur F9) que je n'arrive à parcourir que la sub Report_Open. Toutes les sub relatives aux zones de l'état semblent ne pas être accessibles en pas à pas.
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 13h54   #4
Rédacteur/Modérateur
 
Avatar de Dolphy35
 
Homme Morgan BILLY
Technicien de Production
Inscription : octobre 2004
Messages : 4 103
Détails du profil
Informations personnelles :
Nom : Homme Morgan BILLY
Âge : 33
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Technicien de Production
Secteur : Industrie

Informations forums :
Inscription : octobre 2004
Messages : 4 103
Points : 8 728
Points : 8 728
Bonjour,

As-tu une annulation d'ouverture cancel = True sur l'événement NoData ?

@+
__________________
Personnaliser la vue Backstage d'Access 2010
Découvrez avec nous Office 2010
Je ne réponds pas aux questions techniques par MP
Dolphy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 14h06   #5
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
Oui, d'ailleurs semble-t-il sans effet pour le moment.

Edit: En fait, le problème semble venir de la macro ouvrant l'état. Le remplissage ne s'effectue pas si j'ouvre la page en mode état et se fait si je l'ouvre en mode aperçu avant impression.
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 14h12   #6
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
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 242
Points : 11 040
Points : 11 040
Je viens de tester sur un état avec des événements sur Report_Open, EntêteGroupe0_Format, ZonePiedPage_Format.

Si je place un point d’arrêt sur Report_Open, effectivement le pas-à-pas ne me montre pas le passage dans les autres étapes.
Par contre si je place un point d’arrêt dans chacune des étapes, je peux suivre le processus entier.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 14h19   #7
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
En effet, je viens de constater cela également mais seulement lorsque l'ouverture de l'état se fait en mode aperçu avant impression; en mode état, pas de pas à pas.
Ce qui est curieux, c'est que la sub est exécutée "à moitié" en mode état: j'ai bien le nombre de colonnes attendues mais toutes les cases sont vides.
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 14h32   #8
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
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 242
Points : 11 040
Points : 11 040
Citation:
je viens de constater cela également mais seulement lorsque l'ouverture de l'état se fait en mode aperçu avant impression;
C'est effectivement comme cela que j'ai testé.


Citation:
j'ai bien le nombre de colonnes attendues mais toutes les cases sont vides
.

Peux-tu expliquer ce que tu fais :

- je sais qu'il s'agit d'un état ;
- basé sur une requête croisée ;
- ... et que ça ne va pas.

Mais encore...
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 14h44   #9
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
J'applique cette ressource.

J'ai modifié deux ou trois petites choses pour l'adapter à mes besoins mais le problème mode état / aperçu avant impression est présent en reprenant scrupuleusement cette ressource.

Pour le détail, j'ai 3 tables (PAIES, FACTURES, ANIMATEURS) et la requête suivante:
Code :
1
2
3
4
5
TRANSFORM Sum(PAIES.Cachet) AS SommeDeCachet
SELECT [ANIMATEURS].[PrenomAnimateur] & " " & [ANIMATEURS].[NomAnimateur] AS Animateurs
FROM (FACTURES INNER JOIN PAIES ON FACTURES.IdFacture = PAIES.IdFacture) INNER JOIN ANIMATEURS ON PAIES.IdAnimateur = ANIMATEURS.IdAnimateur
GROUP BY [ANIMATEURS].[PrenomAnimateur] & " " & [ANIMATEURS].[NomAnimateur]
PIVOT FACTURES.DateFacture;
Le résultat de la requête comporte 3 animateurs et 4 jours de paies. Lorsque j'ouvre mon état, qui peut recevoir jusqu'à 16 colonnes, j'ai bien 4 lignes et 5 colonnes mais les cellules sont vides. Si je passe en aperçu avant impression, les cellules se remplissent.
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 15h04   #10
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
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 242
Points : 11 040
Points : 11 040
Je n'ai pas lu la référence que tu donnes.

Citation:
Pour le détail, j'ai 3 tables (PAIES, FACTURES, ANIMATEURS) et la requête suivante:
Lorsque tu exécutes la requête, indépendamment de l'état, as-tu un résultat correct ?
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 15h22   #11
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
Oui, il n'y a que lorsque l'état est en mode état que les données n'apparaissent pas.
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 15h34   #12
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
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 242
Points : 11 040
Points : 11 040
Dès lors, ne peux-tu pas procéder en 2 étapes :
- créer la requête
- et alors seulement ouvrir l'état ?

Je suis loin d'être un spécialiste, mais à l'instinct, d'après ce que tu décris, c'est comme si l'état essayait d'afficher des données que Access n'a pas encore eu le temps de confectionner.
D'où l'idée de construire d'abord les données de la requête, laisser à Access le temps qu'il lui faut. Et ensuite, les exploiter dans l'état.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 15h53   #13
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
Cela doit être faisable en effet. Cela dit, il y a quand même quelque chose qui continue à me paraître illogique, c'est ce passage :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub ZoneEntêtePage_Format(Cancel As Integer, FormatCount As Integer)
 
    Dim entX As Integer
 
    ' Inscription du mois dans le cartouche supérieur
    Me("Mois") = "MOIS DE " & UCase(Format(rstEnregistrement(entX + 1).Name, "mmm yyyy"))
 
    ' Met les entêtes de colonnes
    ' dans des zones de texte dans la section Entête.
    For entX = 1 To NbColonnes
        Me("Entete" + Format(entX)) = Format(rstEnregistrement(entX - 1).Name, "dd")
    Next entX
 
    ' Crée l'entête Totaux de la prochaine zone de liste disponible.
    Me("Entete" + Format(NbColonnes + 1)) = "Totaux"
    ' Paramètre la police et la largeur de la zone de liste
    Me("EnTete" + Format(NbColonnes + 1)).Width = 1134
    Me("EnTete" + Format(NbColonnes + 1)).FontWeight = 700
 
    ' Cache les zones de texte inutilisées dans la section Entête.
    For entX = (NbColonnes + 2) To Nombre_colonnes
        Me("Entete" + Format(entX)).Visible = False
    Next entX
 
End Sub
C'est lors de ce formatage que l'état affiche le bon nombre de colonnes d'en-tête. Puisqu'en mode état j'ai bien le bon nombre de colonnes, c'est que cette sub est lue, donc pourquoi le débogage ne s'y arrête-t-il pas (en mode état uniquement) malgré la présence d'un point d'arrêt?
Mais bon, cela va rester de la rhétorique pour le moment, le but étant de vérifier les données avant de les imprimer, je vais me contenter de l'aperçu avant impression pour le moment.


J'ai un peu poursuivi mon travail sur cet état et je me heurte à un nouveau problème. Je souhaite afficher cet état mois par mois, ma requête est donc devenue :
Code :
1
2
3
4
5
6
7
PARAMETERS [Tri] Text ( 255 );
TRANSFORM Sum(PAIES.Cachet) AS SommeDeCachet
SELECT [ANIMATEURS].[PrenomAnimateur] & " " & [ANIMATEURS].[NomAnimateur] AS Animateurs
FROM (FACTURES INNER JOIN PAIES ON FACTURES.IdFacture = PAIES.IdFacture) INNER JOIN ANIMATEURS ON PAIES.IdAnimateur = ANIMATEURS.IdAnimateur
WHERE Format(FACTURES.DateFacture,"mm/yy")=[Tri]
GROUP BY [ANIMATEURS].[PrenomAnimateur] & " " & [ANIMATEURS].[NomAnimateur]
PIVOT FACTURES.DateFacture;
J'ai également cette fonction que j'utilise à d'autres endroit de mon logiciel:
Code :
1
2
3
4
Public Function TriParMois(p1, p2)
  'TriParMois("Insérez le mois et l'année sous la forme mm/aa" :";"Choix du mois")
  TriParMois = InputBox(p1, p2)
End Function
Il faut donc que je passe mon paramètre à l'ouverture de l'état :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Report_Open(Cancel As Integer)
 
    Dim rstRequete As DAO.QueryDef
 
    Set dBase = CurrentDb
    Set rstRequete = dBase.QueryDefs("R_Planning_Paies")
    rstRequete.Parameters("Tri") = TriParMois("Insérez le mois selon le format mm/aa", "Choix du Mois")
    Set rstEnregistrement = rstRequete.OpenRecordset()
 
    NbColonnes = rstRequete.Fields.Count
 
    Initvar
 
End Sub
Ma boîte de dialogue s'ouvre bien mais j'ai tout de même la boite de dialogue "Paramètres" qui s'ouvre ensuite (deux fois d'ailleurs) et la requête me renvoie un ensemble vide. Pourtant, si je passe directement pas la requête sur access, je n'ai la boite de dialogue "Paramètres" qu'une seule et le résultat de la requête est celui attendu.

Comment dois-je donc faire pour passer mon paramètre en VBA ?
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 16h24   #14
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
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 242
Points : 11 040
Points : 11 040
1er problème : primum vivere deinde philosophari
2e problème :

Je procèderais comme ceci :
- demander la période (avec ta fonction) ;
- mémoriser dans une variable ;
- construire le SQL de la requête en se référant au contenu de la variable (et non plus à un paramètre) ;
- ouvrir l’état.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 16h32   #15
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
J'ai pensé partir sur cette solution en effet. Le problème que je vois venir est que ma requête doit être la source de mon état; je vais voir ce que cela donne.
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 18h29   #16
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 242
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 242
Points : 11 040
Points : 11 040
Suggestion :

1° En "dur" :
- tu as une requête : "resSourceEtat" peu importe son SQL ;
- tu codes "resSourceEtat" comme source de ton état.

2° Procédure pour utiliser l'état :
- demander la période (avec ta fonction) ;
- mémoriser dans une variable ;
- transformer sur mesure le SQL de la requête "resSourceEtat" en se référant au contenu de la variable (et non plus à un paramètre) ;
- ouvrir l’état... qui ne s'est rendu compte de rien.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 13h11   #17
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
Bonjour,

Après quelques recherches, voilà la fonction qui m'a permis de m'affranchir de ces multiples ouvertures de fenêtres.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub CDE_Planning_Paies_Click()
 
    Dim Tri As String
    Dim qdf As QueryDef
 
    Tri = TriParMois("Insérez le mois et l'année sous la forme mm/aa", "Choix du mois")
 
    Set qdf = CurrentDb.QueryDefs!R_PLANNING_PAIES
    qdf.SQL = "TRANSFORM Sum(PAIES.Cachet) AS SommeDeCachet " & _
                            "SELECT ANIMATEURS.PrenomAnimateur & ' ' & ANIMATEURS.NomAnimateur AS Animateurs " & _
                            "FROM (FACTURES INNER JOIN PAIES ON FACTURES.IdFacture = PAIES.IdFacture) INNER JOIN ANIMATEURS ON PAIES.IdAnimateur = ANIMATEURS.IdAnimateur " & _
                            "WHERE (format(FACTURES.DateFacture, 'mm/yy') = '" & Tri & "') " & _
                            "GROUP BY ANIMATEURS.PrenomAnimateur & ' ' & ANIMATEURS.NomAnimateur " & _
                            "PIVOT FACTURES.DateFacture;"
 
    DoCmd.OpenReport "E_Paies", acViewPreview
 
End Sub
En fait, le plus simple aurait sans doute été de mettre une clause HAVING dans la requête mais j'ai l'impression qu'il n'est pas possible de metter cette clause dans une requête croisée.

Merci beaucoup pour ton aide.
Francesco34 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 05h01.


 
 
 
 
Partenaires

Hébergement Web