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 13/12/2011, 13h57   #1
Membre du Club
 
Homme Yves
Inscription : novembre 2006
Messages : 114
Détails du profil
Informations personnelles :
Nom : Homme Yves
Localisation : Belgique

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2006
Messages : 114
Points : 50
Points : 50
Par défaut Formulaire appelé ne rend pas la main

Bonjour,

Comme d'hab, je m'adresse à vous car j'ai besoin de lumière.

Ceci est la fonction (juste pour les tests préliminaires) qui est appelée à l'ouverture du formulaire principal:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Public Function test()
Dim SQL As String
Dim C As Integer, i As Integer
Dim rs01 As DAO.Recordset 'recordset pour les enregistrements
Dim db As DAO.Database
 
Set db = CurrentDb()
 
SQL = "SELECT Query1.NumMIC, Query2.numMIC, Query1.NumCD, Query2.[Autre réf], Query1.NumPIMS, Query2.[N° PIMS], Query1.NumDossier, Query2.[N° dossier], Query1.NumNotice, Query2.[N° notice], Query1.Faits, Query2.Sujet "
SQL = SQL & "FROM Query1 LEFT JOIN Query2 ON Query1.NumMIC = Query2.numMIC;"
 
Set rs01 = db.OpenRecordset(SQL, dbOpenDynaset)
 
rs01.MoveLast
MsgBox "nbr retourné = " & rs01.RecordCount
rs01.MoveFirst
 
For i = 0 To 10
rs01.MoveNext
Next
'Do While Not rs01.EOF
continue:
    For C = 0 To (rs01.Fields().Count - 2) Step 2
        If Nz(rs01.Fields(C), "1") = Nz(rs01.Fields(C + 1), "0") Then 'ca veut dire qu'il sont parfaitement identique
        Else    'sinon ca veut dire qu'il y a des différences entre champs
            If (IsNull(rs01.Fields(C)) And IsNull(rs01.Fields(C + 1))) Or (IsEmpty(rs01.Fields(C)) And IsEmpty(rs01.Fields(C + 1))) Then      'si les deux champs sont null ou vide
            'DoCmd.OpenForm "test", , , , , acHidden
            DoCmd.OpenForm "test", , , , , acDialog
 
            Else 'ca veut dire qu'au moins un des champs n'est pas vide
 
            'DoCmd.OpenForm "test", , , , , acHidden
            DoCmd.OpenForm "test", , , , , acDialog
 
            End If
        End If
    Next
 
 
    i = i + 1
 
    If i = 20 Then
    GoTo quitte
    Else
    rs01.MoveNext
    GoTo continue
    End If
'Loop
 
quitte:
    SQL = ""
    rs01.Close
    db.Close
    Set rs01 = Nothing
    Set db = Nothing
 
End Function
Ce que je souhaiterai c'est que mon formulaire principal s'ouvre,
-appelle une fonction qui parcoure le recordset qui va être affiché dans ce formulaire principal,
-cette fonction vérifie le contenu des enregistrements (par paires de champs) et signale au travers d'un formulaire d'édition quand un des deux champs est différents de l'autre (ou quand les deux champs sont vides),
-dans le formulaire d'edition l'utilisateur pourra corriger les deux champs ou laisser tels quel, valider sa décision
-le formulaire se ferme, la fonction passe à la paire suivante et ainsi de suite jusqu'à la fin du recordset.

Le problème c'est que ma fonction qui boucle sur le recordset ne stoppe pas sur le formulaire d'édition (il est ouvert en acDialog et donc devrait attendre l'action de l'utilisateur pour se fermer?) mais fait l'ensemble de la boucle...

Le code ci-dessus est simplifier pour le forum mais le résultat est le même.

Avez vous une idée de comment arranger cela?

Merci d'avance.
Dermochelys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 16h17   #2
Membre du Club
 
Homme Yves
Inscription : novembre 2006
Messages : 114
Détails du profil
Informations personnelles :
Nom : Homme Yves
Localisation : Belgique

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2006
Messages : 114
Points : 50
Points : 50
Bonsoir,

Ce petit post pour vous dire que j'ai résolu le problème.

Dans le formulaire appelant, sur Open, je l'ai rendu visible (True) avant de lancer l'appel à la fonction qui parcourera le recordset.
Je lance la fonction qui parcoure le recordset. Aux étapes de tests, j'ouvre le formulaire de vérification (comme dans le code ci dessous avec le formulaire "test")
Dans le formulaire test, sur Open, je mets le focus sur le bouton de fermeture

Et c'est tout

Quand le formulaire de vérification s'ouvre, le formulaire appelant est aussi ouvert et lis la fonction de test. et chaque fois que le formulaire de vérification est fermé, on continue le processus.

Donc affaire classée dans mon cas.

Merci pour les trois étoiles en tout cas :-)

A bientôt

Et Bonnes fêtes de fin d'année!
Dermochelys 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 03h25.


 
 
 
 
Partenaires

Hébergement Web