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 29/11/2011, 15h03   #1
Nouveau Membre du Club
 
Avatar de Marcopololo
 
Inscription : juillet 2008
Messages : 166
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 166
Points : 34
Points : 34
Par défaut Mise en pause code sur ouverture formulaire

Bonjour,

J'ai un petit soucis avec mon code de pause.

Code :
1
2
3
DoCmd.OpenForm ("fichier excel"), WindowMode:=acDialog
 
NameExcel = DLookup("[xlname]", "excel")
Celui ouvre un formulaire ou je saisis un nom. Jusque là pas de problème.

Dans le cas ou aucun nom n'est saisis j'ouvre un autre formulaire

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Validation_Click()
 
'Si aucune nom de fichier, je sors message d'alerte
                If Nz(Me.NomExcel, "") = "" Then
 
                DoCmd.OpenForm ("message nom fichier obligatoire"), WindowMode:=acDialog
                Exit Sub     ' Sortie de la routine
                'Sinon, en fonction de la case cochée, j'ouvre un formulaire
                Else
                End If
 
        DoCmd.Close acForm, Me.Name 'ferme le formulaire en cours
 
End Sub
Cela fonctionne bien. Mais quand je clique sur OK de ma boite d'alerte (qui est un formulaire, le code continue et me renvoi bien sur un message d'erreur car NameExcel est nul.

Ma question est de savoir comment je peux à nouveau mettre en pause mon code sachant que le ACdialog n'est plus actif dès que j'ai appuyé sur le bouton valider de mon formulaire fichier excel.

Merci d'avance d votre aide

Marcopololo
Marcopololo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 15h08   #2
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 225
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 225
Points : 9 928
Points : 9 928
Envoyer un message via Skype™ à Domi2
Bonjour,

Ces 2 codes sont dans le même module ou dans 2 modules différents ?

Domi2
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 17h05   #3
Nouveau Membre du Club
 
Avatar de Marcopololo
 
Inscription : juillet 2008
Messages : 166
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 166
Points : 34
Points : 34
Les codes sont dans deux formulaires différents
Marcopololo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 22h42   #4
Nouveau Membre du Club
 
Avatar de Marcopololo
 
Inscription : juillet 2008
Messages : 166
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 166
Points : 34
Points : 34
La je suis un peu sec, j'ai l'impression qu'il va me falloir passer par une variable public pour que celle ci puisse être récupéré par une fonction do...loop.
Formulaire Recherche client
Code :
1
2
3
4
5
6
                 Do   'permet de controler que le champ du formulaire fichier excel n'est pas vide
                            'Ouvre le formulaire de saisie du nom du fichier en windowmode attente de saisie
                                    DoCmd.OpenForm ("fichier excel"), WindowMode:=acDialog
 
                                    Loop While Xlname = ""
                                    NameExcel = DLookup("[xlname]", "excel")  'Récupération du champ du formulaire fichier excel dans la table excel pour nommer le fichier exportation
Mais ma boucle loop faisant appel à une variable qui n'est pas encore créer, cela ne fonctionne pas.


Merci de venir à mon secours pour cette crotte de variable public.

Marcopololo
Marcopololo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 22h50   #5
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 225
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 225
Points : 9 928
Points : 9 928
Envoyer un message via Skype™ à Domi2
Ta variable, il faut bien la déclarer comme "Public", dans l'entête d'un module de code standard.

Une fois fait, s'il y a encore un problème, il faudrait poster tous tes codes en expliquant où ils se trouvent dans les différents modules, et surtout en respectant l'ordre chronologique de leur utilisation.
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 08h50   #6
Nouveau Membre du Club
 
Avatar de Marcopololo
 
Inscription : juillet 2008
Messages : 166
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 166
Points : 34
Points : 34
Je vais essayé d'être le plus concis possible :

J'ai un formulaire F1. Lorsque je clique sur un bouton Export je lance la procédure d'exportation vers Excel. Tout cela fonctionne.
Ce que je veux c'est que l'utilisateur puisse donner lui même le nom de son fichier Excel. Cela fonctionne aussi, à un détail près, c'est que je veux contrôler que le champ du formulaire F2, ouvert par la procédure de F1, que le champ de F2 n'est pas vide, j'ouvre alors une boite d'alerte (formulaire) qui me dit que le nom est obligatoire. Je clique OK et je retourne à mon formulaire de saisie du nom.

Mon soucis est que si le champ est vide, j'ouvre bien ma boite d'alerte (qui est un formulaire et pas une msgbox), mais comme j'ai cliqué sur Valider de F2, le ACdialog de F1 ne fait plus effet et mon code continue pour me retourner une erreur car mon nom est nul.

CODE DU FORMULAIRE F1
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim xlApp As excel.Application
Dim xlSheet1 As excel.Worksheet, xlSheet2 As excel.Worksheet
Dim xlBook As excel.Workbook
Dim strXLFile As String, NameExcel As String
 
DoCmd.OpenForm ("F2"), WindowMode:=acDialog
 
 
                           NameExcel = DLookup("[xlname]", "excel")  'Récupération du champ du formulaire fichier excel dans la table excel pour nommer le fichier exportation
 
 
'Ouvre l'application Excel
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
 
' Nom complet du fichier excel
                strXLFile = "d:\bases extincteurs\Access 2007\" & NameExcel & ".xls"
'Supprimer fichier avant export
                    If Dir(strXLFile) <> "" Then Kill strXLFile
CODE DU FORMULAIRE F2 - NomExcel étant le nom du champ du formulaire
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Compare Database
Option Explicit
 
Private Sub Validation_Click()
 
'Si aucune nom de fichier, je sors message d'alerte
                If Nz(Me.NomExcel, "") = "" Then
 
                DoCmd.OpenForm ("message nom fichier obligatoire"), WindowMode:=acDialog
                Exit Sub     ' Sortie de la routine
                'Sinon, en fonction de la case cochée, j'ouvre un formulaire
                Else
                End If
 
        DoCmd.Close acForm, Me.Name  'ferme le formulaire en cours
 
End Sub
CODE DU FORMULAIRE Message nom fichier obligatoire
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Option Compare Database
Option Explicit
 
Private Sub Form_Close()
 
        'Fait réapparaitre le formulaire de  exportation Fichier Excel après fermeture du formulaire message
        If CurrentProject.AllForms("F2").IsLoaded Then Forms![F2].Visible = True
 
 
End Sub
 
Private Sub Form_Open(Cancel As Integer)
        'Rend invisible le formulaire de exportation Fichier Excel
        If CurrentProject.AllForms("F2").IsLoaded Then Forms![F2].Visible = False
 
 
End Sub
 
Private Sub OK_Click()
 
        DoCmd.Close acForm, Me.Name
 
End Sub
J'espère avoir été le plus clair possible.

Merci d'avance

Marcopololo
Marcopololo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 18h38   #7
Nouveau Membre du Club
 
Avatar de Marcopololo
 
Inscription : juillet 2008
Messages : 166
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 166
Points : 34
Points : 34
Help, si quelqu'un pouvait me donner quelque pisteµ. Alors j'ai testé avec une msgbox, cela fonctionne, mais cela ne résoud pas mon problème car j'ai sur mon formulaire F2 un bouton annuler, et là mon code plante.

Donc je crois que je ne vais pas avoir le choix que la variable public, alors si une âme charitable passait par là..

Merci d'avance

Marcopololo
Marcopololo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 23h02   #8
Nouveau Membre du Club
 
Avatar de Marcopololo
 
Inscription : juillet 2008
Messages : 166
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 166
Points : 34
Points : 34
Bon je progresse lentement.

J'arrive à ne plus avoir d'erreur sur ma variable public, sans être sur de bien l'utiliser.

J'ai créer un module de classe :
Code :
1
2
3
4
Option Compare Database
Option Explicit
 
Public xlfile As String
J'ai ensuite déclaré mes variables public de cette manière dans mes deux formulaires ou j'en ai besoin, sinon cela ne fonctionne pas :

Code :
1
2
3
Option Compare Database
Option Explicit
Public xlfile As String
Et j'utilise ma variable xlfile en la nommant.

Alors cela fonctionne bien dans mon second formulaire (test avec Msgbox), mais pas pour le second, ma msgbox du second formulaire me donne une valeur nulle ??

Formulaire 1 (c'est ici que la Msgbox renvoi une valeur nulle)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'Ouvre le formulaire de saisie du nom du fichier en windowmode attente de saisie
                                    DoCmd.OpenForm ("fichier excel"), WindowMode:=acDialog
 
                                    MsgBox xlfile, vbOKOnly
                                    'NameExcel = DLookup("[xlname]", "excel")  'Récupération du champ du formulaire fichier excel dans la table excel pour nommer le fichier exportation
                                    NameExcel = xlfile
 
 
'Ouvre l'application Excel
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
 
' Nom complet du fichier excel
 
                strxlfile = "d:\bases extincteurs\Access 2007\" & NameExcel & ".xls"

Formulaire 2
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Validation_Click()
 
 
                xlfile = Me.NomExcel
 
                MsgBox xlfile, vbOKOnly
'Si aucune nom de fichier, je sors message d'alerte
                If Nz(Me.NomExcel, "") = "" Then
                MsgBox "Nom fichier obligatoire", vbOKOnly
                Exit Sub     ' Sortie de la routine
                'Sinon, en fonction de la case cochée, j'ouvre un formulaire
                Else
                End If
 
        DoCmd.Close acForm, Me.Name  'ferme le formulaire en cours
 
End Sub
La je suis un peu perdu alors merci de votre aide

Marcopololo
Marcopololo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 05h50   #9
Nouveau Membre du Club
 
Avatar de Marcopololo
 
Inscription : juillet 2008
Messages : 166
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 166
Points : 34
Points : 34
Bon et bien voilà j'ai trouvé mon erreur.

J'ai tout simplement utilisé un module de classe pour créer ma variable public au lieu d'un module...

Enfin, le tout est de trouver et comprendre sopn erreur.

Marcopololo
Marcopololo 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 00h29.


 
 
 
 
Partenaires

Hébergement Web