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 27/01/2011, 15h33   #1
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
Par défaut Masquer tous les controle à l'ouverture d'un formulaire

Bonjour,

Je voudrai à l'ouverture de mon formulaire masquer tous les controle pour les afficher selon le choix d'une liste déroulante.
Bon ce n'est pas difficile à faire en écrivant le chemin du control comme par exemple :
Code :
monform.monchamp.visible = false
.
Mais c'est super long quand tu as trop de control.
J'ai voulu le faire avec une boucle mais il me dis qu'il ne peut pas masquer les controles actif.
Voila mon programme:

Code :
1
2
3
4
5
6
7
Dim ctrl As Control
 
    For Each ctrl In [sfrm-Code-Article].Form![sfrm-Conduite].Controls
        If ctrl.Name Like "*Btl" Then
        ctrl.Visible = False
        End If
    Next
est-ce que quelqu'un connais une solution pour mon problème.
Ca m'éviterai des lignes et des lignes de code.

Merci
rob1son76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 16h04   #2
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
Il faut que je rende le control inactif.
J'ai pensé mettre le focus sur un autre control mais ca na pas l'air de marcher.
rob1son76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 16h59   #3
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
bon j'ai trouvé une solution mais j'ai un autre problème.
Voici mon code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim ctrl As Control
Dim c As String
 
    For Each ctrl In [sfrm-Code-Article].Form![sfrm-Conduite].Controls
        If ctrl.Name Like "*Btl" Then
        With ctrl
            Select Case .ControlType
            Case acTextBox
                  .Enabled = False
                  .Visible = False
            Case acLabel
                .Visible = False
           End Select
        End With
        End If
 
        'ctrl.Caption = w
    Next
On ne peut pas appliquer le enable à un control.
Avec ce code c'est possible.
Le problème c'est qu'il me dis que je ne peux pas désactiver un control actif.
Grrrrr!!
Il va me faire péter les plombs.
rob1son76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 17h30   #4
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
Bon voila la solution.
Il faut mettre tout les controle invisible par la propriété (clic droit).
Puis avec se code ca marche.

Code :
1
2
3
4
5
6
7
8
9
10
11
    For Each ctrl In [sfrm-Code-Article].Form![sfrm-Conduite].Controls
    If Me.Groupe = "Groupe 3" Or Me.Groupe = "Groupe 4" Or Me.Groupe = "Groupe 5" Or Me.Groupe = "Groupe 6" Then
        If ctrl.Name Like "*Btl" Then
        ctrl.Visible = True
        End If
    Else
        If ctrl.Name Like "*Btl" Then
        ctrl.Visible = False
        End If
    End If
    Next
Ce qui est bizard c'est que je peux passé du visible à l'invisible et vis versa alors que les controls sont actif.
rob1son76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 18h34   #5
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
En fait, c'est effectivement le focus qui te posait problème (j'ai déjà rencontré le problème).

Il faut alors l'envoyer sur un contrôle qui est toujours visible sur ton formulaire (comme par exemple ta liste déroulante de choix) avant de masquer les contrôles.

Si ce n'est pas possible car tu veux masquer tous les contrôles, il faut faire comme tu l'as fait : rendre invisible les contrôles directement dans le formulaire et les afficher ou non lors du chargement.

Pour ce qui est de la bizarrerie, elle s'explique par le fait que le focus se place au chargement du formulaire sur le premier objet disponible suivant l'ordre de tabulation. Donc lorsque ton code s'exécutait, le focus était déjà placé et avait rendu actif un des contrôles. Si aucun objet n'est disponible pour le focus car les champs sont tous invisibles/disabled/locked, il n'y a pas de focus. Or le focus se place au chargement automatiquement, donc si tu rends actifs les contrôles après le chargement il n'y a toujours pas de focus sur le formulaire et tu peux donc les masquer/démasquer sans rencontrer l'erreur.
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 09h52   #6
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
Merci pour tes explication.
J'avais essayé de mettre le focus sur ma liste déroulante mais ca ne marchait pas.
C'est peu être parce que je voulais masqué tous les contrôle de mon sous-sous-formulaire alors que je mettais le focus sur mon formulaire principale.
Enfin bon j'ai trouvé une solution qui m'évite des lignes et des lignes de codes c'est le principale.
rob1son76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 10h38   #7
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
Re bonjour,

J'ai un autre problème lié au problème précédent.
J'explique mon cas.
J'ai un formulaire (Frm-Rapport de production) dans lequel j'ai un sous formulaire (frm-Code article) qui contient plusieurs sous formulaires.
Se sont dans ces sous formulaires que je veux masquer les différents controle.
Ma boucle dans le message précedent marche pour un sous formulaire mais lorsque je veux qu'il le fasse pour les autres ca ne marche pas car le control Ctrl est déjà utilisé.
Code:
Code :
1
2
3
    For Each ctrl In [sfrm-Code-Article].Form![sfrm-Conduite].Controls
        For Each ctrl In [sfrm-Code-Article].Form![sfrm-Freintes-Ejection].Controls
            For Each ctrl In [sfrm-Code-Article].Form![sfrm-Freintes-Prépa].Controls
Je voudrai éviter de recopier ma boucle en entière 3 fois.
Est-ce que vous savez comment je pourai faire pour faire ma boucle sur les 3 sous-sous formulaire ou alors sur tout les controle de mon sous formulaire code article?

Merci
rob1son76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 12h02   #8
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Bonjour,

Il suffit tout simplement de renommer votre variable d'un nom différent pour chaque boucle :
Code :
1
2
3
    For Each ctrl In [sfrm-Code-Article].Form![sfrm-Conduite].Controls
        For Each ctrl_2 In [sfrm-Code-Article].Form![sfrm-Freintes-Ejection].Controls
            For Each ctrl_3 In [sfrm-Code-Article].Form![sfrm-Freintes-Prépa].Controls
For each Nomvariable In Type est une instruction de déclaration de variable donc si vous déclarez 3 fois la même variable dans des boucles imbriquées les unes dans les autres, le programme ne sait plus où il en est.

cordialement,
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 16h32   #9
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
Merci de t'as réponse mais le problème c'est qu'en dessous de ces lignes j'en ai d'autre qui font appel a CTRL donc si je fait comme tu dis je devrai faire de même pour les autres lignes ce qui reviendrai au même.
rob1son76 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 03h29.


 
 
 
 
Partenaires

Hébergement Web