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 18/02/2011, 20h57   #1
Membre du Club
 
Emmanuel
Inscription : novembre 2010
Messages : 49
Détails du profil
Informations personnelles :
Nom : Emmanuel

Informations forums :
Inscription : novembre 2010
Messages : 49
Points : 66
Points : 66
Par défaut Activé boutons sur formulaires appelants depuis formulaire appelé

Bonsoir à tous.

J'ai plusieurs formulaires dans lesquels il y a un Textbox date (ET_datesoins) et deux boutons associés pour décrémenter (BtnDec) et incrémenter (BtnInc) de un jour à chaque click.

Petite précision : je veux interdire la saisie de date > à Date().
Jusque là, tout va bien.

J'ai mis une procédure sur click sut mon TextBox pour ouvrir un autre form, une boite de dialogue avec dedans un activex Calendar.
Jusque là tout va encore trés bien, je sais récupérer dans ET_datesoins, la date sélectionnée dans mon activex.

Mais là où je bloque complètement, c'est que je voudrais aussi réactiver mon bouton BtnInc de mon form actif si la date est < à date().

Voici mon code et le pb se situe dans activation de BtnInc :

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
Private Sub Calendar0_Click()
    Dim frm As String
    Dim ctl As String
    Dim btn As CommandButton
    Dim objForm As AccessObject, dbs As Object
 
    On Error GoTo Err_Args
    frm = Mid(Me.Caption, 1, InStr(1, Me.Caption, "!") - 1)
    ctl = Mid(Me.Caption, InStr(1, Me.Caption, "!") + 1)
 
    If IsNull(frm) Or frm = "" Or IsNull(ctl) Or ctl = "" Then GoTo Err_Args
 
    If Me.calendar0 > Date Then
        MsgBox "Veuillez saisir une date antérieure à aujourd'hui !", vbOKOnly + vbCritical, "Action interdite"
        Forms(frm)(ctl) = Date
        GoTo Err_Args
    Else: Forms(frm)(ctl) = Me.calendar0
        DoCmd.Close
 
        'activation de BtnInc quelque soit le formulaire appelant
        Set dbs = Application.CurrentProject
        For Each objForm In dbs.AllForms
        If objForm.IsLoaded = True Then
 
            Set btn = objForm!BtnInc
            objForm!btn.Enabled = True
 
        End If
        Next
    End If
 
Err_Args:
End Sub
J'arrive à identifier le form actif et rien de plus.
Le code ci joint n'affiche aucune erreur mais ne fonctionne pas du tout car rien ne se passe.

Merci pour vos idées.
Dixies est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 21h27   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 205
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 205
Points : 5 258
Points : 5 258
Salut,

Une chose me gène dans ton code quand tu fais:

Code :
1
2
3
4
...
Else: Forms(frm)(ctl) = Me.calendar0
        DoCmd.Close
...
Le :

ferme le formulaire actif, donc le formulaire contenant le code de ta procédure, donc il serait logique que le reste du code ne s'exécute pas

D'autre part, pourquoi n'essaie tu pas pour activer ou déactiver ton bouton du formulaire appelant un truc comme :

Code :
Forms!TonFormulaire!BtnInc.Enabled = True
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 23h09   #3
Membre du Club
 
Emmanuel
Inscription : novembre 2010
Messages : 49
Détails du profil
Informations personnelles :
Nom : Emmanuel

Informations forums :
Inscription : novembre 2010
Messages : 49
Points : 66
Points : 66
Bonsoir User.

Donc pour le :

à priori, le pb ne vient pas de là car j'ai testé en ajoutant une MsgBox pour savoir si mon code reconnaissait mon form actif. Et donc la procédure suivait son chemin normalement.

Quant au :

Code :
Forms!TonFormulaire!BtnInc.Enabled = True
effectivement ça marche trés bien. Mais mon souci est que j'ai plusieurs formulaires avec une Textbox date qui appellent ma boite de dialogue Calendar.
Je pourrai c'est vrai ajouter cette écriture autant de fois que j'ai de formulaires concernés.
Ce serai quand même plus propre de passer par variables ...

Merci pour ton aide.
Dixies est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 00h17   #4
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 205
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 205
Points : 5 258
Points : 5 258
Re,

Une solution parmi d'autres serait de passer le nom du formulaire appelant au formulaire appelé en utilisant l'argument "openargs" de la méthode OpenForm.

1 exemple, si ton formulaire appelé se nomme "F_Calendar" :

Sur le formulaire appelant tu auras le code qui ouvre "F_Calendar" :

Code :
DoCmd.OpenForm "F_Calendar", , , , , , Me.Name

Et après dans le formulaire "F_Calendar", tu as le code :

Code :
Forms(Me.OpenArgs)!BtnInc.Enabled = True
Si j'ai bien tout saisi

A moins que frm désigne le nom du formulaire appelant, dans ce cas la solution est évidente ...
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/02/2011, 10h46   #5
Membre du Club
 
Emmanuel
Inscription : novembre 2010
Messages : 49
Détails du profil
Informations personnelles :
Nom : Emmanuel

Informations forums :
Inscription : novembre 2010
Messages : 49
Points : 66
Points : 66
Par défaut Ca marche !!!

Bonjour et merci pour l'info.

Ca marche exactement comme je je souhaitais.
Voici mon code à présent si ça intéresse qqun :

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
Private Sub Calendar0_Click()
    Dim frm As String
    Dim ctl As String
 
    On Error GoTo Err_Args
    frm = Mid(Me.Caption, 1, InStr(1, Me.Caption, "!") - 1)
    ctl = Mid(Me.Caption, InStr(1, Me.Caption, "!") + 1)
 
    If IsNull(frm) Or frm = "" Or IsNull(ctl) Or ctl = "" Then GoTo Err_Args
 
    If Me.calendar0 > Date Then
        MsgBox "Veuillez saisir une date antérieure à aujourd'hui !", vbOKOnly + vbCritical, "Action interdite"
        Forms(frm)(ctl) = Date
        GoTo Err_Args
    End If
 
    If Me.calendar0 = Date Then
        Forms(Me.OpenArgs)!BtnInc.Enabled = False
        DoCmd.Close
    End If
 
    If Me.calendar0 < Date Then
        Forms(frm)(ctl) = Me.calendar0
        Forms(Me.OpenArgs)!BtnInc.Enabled = True
        DoCmd.Close
    End If
 
Err_Args:
End Sub
Merci User et bon WE.
Dixies 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 09h18.


 
 
 
 
Partenaires

Hébergement Web