Probleme d'ecriture de code

Résolu
shenkool Messages postés 15 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 21 septembre 2009 - 29 juin 2009 à 15:27
shenkool Messages postés 15 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 21 septembre 2009 - 7 juil. 2009 à 10:35
Bonjour a tous

Tout d'abord un grand merci a vous pour ce site qui m'a sortie du petrin plus d'une fois, malheuresement cette fois ci je seche. Je precise que je suis vraiment debutant en macro Access.

 Voila mon probleme : Je souhaite faire reference a un ensemble d'objets ( listbox, bouton de commande etc) qui expose la meme methode "visible". Je ne sais pas comment m'y prendre sans lister un a un chaque objet et de dire
pour chaque objet si je veut qu'il soit visible ou non.

En claire  au lieu de faire

MonObjet.visible = true
MonObjet1.visible = true
.......

Je souterais avoir quelque chose du genre MonGroupeObjet.visible= true
Je crois qu'il faut passe par des classes  mais j'en suis pas sure et je sais pas comment faire.
Merci d'avance pour votre aide.

15 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
30 juin 2009 à 10:40
l'utilisation de la collection controls selon la position de chacun (1 à 5, 5 à 10, etc.....) n'est malheureusement pas toujours fiable

une solution serait alors de "marquer" les contrôles que tu veux changer, en mode design :
rempli leur propriété TAG, avec n'importe quoi (juste "m" par exemple)
puis dans le for each, ne modifie le visible que des contrôles dont le tag n'est pas vide
++
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
29 juin 2009 à 15:41
Bonjour,

Plusieurs solutions possible :

1\Tu place tes contrôles dans un panel, et tu joue avec la propriété visible de celui-ci

2\Tu joue avec la collection Controls du formulaire (ce qui implique que tu à fais attention à l'ordre dans lequel tu as placer tes controles):

Ex :

For i = 5 to 10
   Me.controls(i).Visible = False
Next i
  
@+ Mayzz.
                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
shenkool Messages postés 15 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 21 septembre 2009
29 juin 2009 à 16:49
Bonjour Mayzz,

Pour la premiere solution, je pense que tu parle d'un frame option bouton mais mes controles sont soit des listbox soit des boutons de commande et je ne sais pas s'il est possible de les integrer dans un frame d'options et de les controlés, et pour la deuxieme solution j'y est pas pensé mais pour la lisibilité du code c'est pas terrible

Je me demande s'il est pas possible de creer une classe qui reference l'ensemble des controles que je souhaite inserer et ensuite dans mon code appeler une methode  (par ex: afficher) pour ma classe.
Par contre je ne sais pas du tout comment m'y prendre

Merci Mayzz pour ta reponse et je croi que j'adopterai ta 2ieme solution si je trouve pas exactement ce que je veux.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
29 juin 2009 à 17:25
salut,

si c'est "tous les contrôles", la 2e proposition de mayzz est la bonne, je ne vois pas le problème de lisibilité

tu peux aussi filtrer par type

(à vérifier pour la syntaxe access) :

sub setVisibility(byval bValue as boolean)
dim ctrl as control 'ou as object
for each ctrl in monformulaire.controls

if (typeof ctrl is msforms.listbox) or (typeof ctrl is msforms.commandbutton) then
ctrl.visible = bValue
endif
next ctrl

set ctrl = nothing
end sub

NB : macro access = VBA , attention aux thèmes, ce n'est pas VB.NET !!

catégorie modifiée


<hr size ="2" width="100%" />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
shenkool Messages postés 15 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 21 septembre 2009
30 juin 2009 à 07:58
Salut pcpt,

justement ce n'est pas tous les controles contenue dans mon formulaire mais seulement 5.

je te remercie pour ton code, je vais essayé de faire une mix de tout ca.
0
shenkool Messages postés 15 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 21 septembre 2009
30 juin 2009 à 13:47
la propieté tag je ne la connaissais pas et ca a l'air tres partique
voila ce que j'ai fais donc

Dim ctr As Control

For Each ctr In Me.Form.Controls  If ctr.Tag "appli" Then ctr.Visible False
Next ctr

je me demande si pour le test comparaison si je peux utiliser ce que j'ai fais ou plutot faire ceci If StrComp(ctr.Tag, "appli") 0 Then ctr.Visible False
quelle est le meilleur choix?
petite question a part , pourqoi l'intellsence ne me propose pas la methode visible pour ctr alors que cela fonctionne correctement
Merci encore pour vos aides.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
30 juin 2009 à 13:56
strcomp donne des options de comparaison plus évoluées et paramétrables que EGAL, pas spécialement utiles ici

le type "control" représentant des objets de différents types, les propriétés peuvent être différentes ou même ne pas exister
l'intellisense ne peut donc pas deviner, en mode conception, le control qui sera représenté en mode execution
0
shenkool Messages postés 15 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 21 septembre 2009
30 juin 2009 à 14:05
ok, merci pour ton aide et t'es explications qui m'on été trés utile.
a+
0
shenkool Messages postés 15 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 21 septembre 2009
6 juil. 2009 à 15:42
Bonjour a tous,

Apres quelque recherche j'ai trouvé exactement ce que je voulais faire. En faite je voulais creer une nouvelle collection d'objet mais je ne savais pas comment l'exprimer.
donc voila un exemple, cela pourra servir a d'autre peut etre:

Dim collEACP As Collection, i As Byte
Set collEACP = New Collection
collEACP.Add Form_Formulaire2.Version
collEACP.Add Form_Formulaire2.Alim

For i = 1 To collEACP.Count
collEACP.Item(i).Visible = False
Next i

Set collEACP = Nothing

Par contre j'ai essayé de faire la meme chose avec la boucle For each mais cela ne fonctionne pas
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 juil. 2009 à 17:52
pour c as control

for each c in collEACP
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
6 juil. 2009 à 22:04
Bonsoir,

As-tu essayé comme cela ?

For Each Ctrl In collEACP 
  Ctrl.Visible = False
Next

++
                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
6 juil. 2009 à 22:07
Oups désolé pour le post, j'était en first page et j'avais pas vu le tien PCPT ^^ lut au passage ;O) 

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
shenkool Messages postés 15 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 21 septembre 2009
7 juil. 2009 à 08:31
Salut Mayzz et PCPT,

J'ai compris pourquoi avec la boucle for each ca ne fonctionne pas. En faite lorsque je declare par exemple C as Control , dans la boucle il commence par C=0, or dans l'ajout de mes controls dans la collection CollEACP( methode .add) la premiere valeur est indexé à 1.
Bon ce n'est pas tres grave du moment que cela fonctionne avec une boucle for traditionnelle je suis deja content
Merci pour vos reponses
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 juil. 2009 à 08:43
salut,
tant mieux si çà marche

mais pour info, c ne vaut pas 0 (ni même 1)
c est le contrôle
en entrant dans la boucle il représente le premier élément de la collection, qui en effet commence à 1
autrement dit, au premier passage,

c

<==> collEACP.item(1)
++
<hr size="2" width="100%" />
0
shenkool Messages postés 15 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 21 septembre 2009
7 juil. 2009 à 10:35
oui PCPT tu as tout a fait raison , c'est moi qui me suis mal exprimé
Merci encore pour ton aide
a+
0
Rejoignez-nous