IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Acceder a tous les formulaires [AC-2010]


Sujet :

Access

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 84
    Points : 63
    Points
    63
    Par défaut Acceder a tous les formulaires
    Bonjour, voici mon problème :

    je voudrais blocker un contrôle sur tous les formulaires de mon appli suivant la valeur d'une constante. Ce serait un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Select Case cgrade
        Case 3
        For Each Forms In Me
        For Each ctl In Forms
        nom = "Menu_principal_Administration"
          If ctl.name = nom Then ctl.Enabled = False
        Next
        Next
     
    End Select
    Mais j'avoue que la je sèche...

    Quelqu'un à une idée???

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Bonjour.

    Essaye cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Select Case cgrade
        Case 3 'Peut-être remplacer le 3 par une constante symbolique (ex : GRADE_DIRECTEUR) ? Utiliser des constantes symboliques rend le code plus compréhensible.
     
        nom = "Menu_principal_Administration" 'Pas la peine de refaire l'assignation à chaque itération de la boucle puisque le nom ne change pas.
     
        dim f as form : For Each f in Forms 'Parcourt la liste des formulaires actuellement ouverts
     
          dim ctl as control : For Each ctl In f 'Parcourt les contrôles du formulaire
     
             If ctl.name = nom Then 
                ctl.Enabled = False
                exit for 'Pas la peine de vérifier les autre contrôles.
             end if
     
          Next ctl 'Fermer les boucles avec la vairiable rend le code plus lisible.
     
        Next f
     
    End Select
    A+

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 84
    Points : 63
    Points
    63
    Par défaut Etats des formulaires
    Et pour les formulaires fermés?

    Est- ce que c'est possible ?

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Bonjour.

    C'est possible mais cela va modifier ton formulaire définitivement. Est-ce cela que tu veux ?

    Je te suggérerai ceci :

    À mettre dans chacun des formulaires concernés, à l'ouverture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call ActiverDeactiverMenuAdmin(me)
    À mettre dans un module.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public sub ActiverDeactiverMenuAdmin(prmForm as form)
        prmForm.Menu_principal_Administration.enabled=true 'Par défaut le control est actif
     
        if currentProject.AllForms("NomTonFormulaierParam").isLoaded
     
            if forms("NomTonFormulaierParam").Controls("cgrade")=3 then
               prmForm.Menu_principal_Administration.enabled=false 'Désactive pour grade 3
            end if
     
        end if
     
    end sub
    A+

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 84
    Points : 63
    Points
    63
    Par défaut pour modification
    Si je mets une condition inverse genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public sub ActiverDeactiverMenuAdmin(prmForm as form)
        prmForm.Menu_principal_Administration.enabled=true 'Par défaut le control est actif
     
        if currentProject.AllForms("NomTonFormulaierParam").isLoaded
     
            if forms("NomTonFormulaierParam").Controls("cgrade")=3 then
               prmForm.Menu_principal_Administration.enabled=false 'Désactive pour grade 3
            end if
           if forms("NomTonFormulaierParam").Controls("cgrade")=1 then
               prmForm.Menu_principal_Administration.enabled=true 'Désactive pour grade 3
            end if
        end if
     
    end sub
    ça rechangera me formulaires non ? Et donc une modification similaire pour rendre l'appli a son état d'origine logiquement ?

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 366
    Points : 23 834
    Points
    23 834
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public sub ActiverDeactiverMenuAdmin(prmForm as form)
        prmForm.Menu_principal_Administration.enabled=true 'Par défaut le control est actif
     
        if currentProject.AllForms("NomTonFormulaierParam").isLoaded
     
            if forms("NomTonFormulaierParam").Controls("cgrade")=3 then
               prmForm.Menu_principal_Administration.enabled=false 'Désactive pour grade 3
            end if
     
           if forms("NomTonFormulaierParam").Controls("cgrade")=1 then
               prmForm.Menu_principal_Administration.enabled=true 'Inutile puisqu'il est déjà actif par défaut, voir 1ère ligne du code.
            end if
     
        end if
     
    end sub
    ça rechangera me formulaires non ? Et donc une modification similaire pour rendre l'appli a son état d'origine logiquement ?
    Absolument tu peux "annuler" une modification en en faisant une autre à contre sens.

    Généralement, on évite de modifier la structure d'une application. Une base de données c'est pour manipuler des données pas elle-même :-).

    Pour modifier la structure des formulaires il faut faire quelque chose du genre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim f as form
    dim ae as accessObject:for each ae in currentPorject.allforms 'Parcourt tous les formulaires de l'application
       docmd.openform ae.name, acdesign 'Ouvre le formulaire en mode modification
       set f=forms(ae.name)
       'ici le code pour modifier le formulaire
       set f=nothing
       docmd.close acForm, ae.name, acSaveYes 'Ferme et enregistre les modifications
    next ae
    Et j'ai commis une petite erreur dans mon 1er code, ici la correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Select Case cgrade
        Case 3 'Peut-être remplacer le 3 par une constante symbolique (ex : GRADE_DIRECTEUR) ? Utiliser des constantes symboliques rend le code plus compréhensible.
     
        nom = "Menu_principal_Administration" 'Pas la peine de refaire l'assignation à chaque itération de la boucle puisque le nom ne change pas.
        dim ctl as control
     
        dim f as form : For Each f in Forms 'Parcourt la liste des formulaires actuellement ouverts
     
          'On teste pour ne pas se modifier soi-même 
          if f.name<>me.name then
     
             For Each ctl In f 'Parcourt les contrôles du formulaire
     
                If ctl.name = nom Then 
                   ctl.Enabled = False
                   exit for 'Pas la peine de vérifier les autre contrôles.
                end if
     
             Next ctl 'Fermer les boucles avec la vairiable rend le code plus lisible.
     
           end if
     
        Next f
     
    End Select
    A+

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 84
    Points : 63
    Points
    63
    Par défaut Mille merci
    Merci beaucoup voial ce que j'ai fait:
    Dans un module à part j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Public Sub ActiverDesactiverMenuAdmin(prmForm As Form)
        prmForm.Menu_principal_Administration.Enabled = True 'Par défaut le control est actif
     
        If CurrentProject.AllForms("Frm_menu_principal").IsLoaded Then
     
            If cgrade = 3 Then
                prmForm.Menu_principal_Administration.Enabled = False 'Désactive pour grade 3
                prmForm.Code_vba.Visible = False
                prmForm.Creation_Ei.Enabled = False
                prmForm.Maj_ei.Enabled = False
            End If
             If cgrade = 1 Then
                prmForm.Menu_principal_Administration.Enabled = True 'Désactive pour grade 3
                prmForm.Code_vba.Visible = True
                prmForm.Creation_Ei.Enabled = True
                prmForm.Maj_ei.Enabled = True
            End If
        End If
    Sachant que "cgrade" est en faite une constante équivalente à un champ récupéré lors de la connexion et non un contrôle.
    Ensuite je refait cette boucle pour chaque formulaire en changeant le nom.
    Je pense que ça fait un peu sagouin et surtout amateur mais ça marche.....
    Le seul bémol c'est que j'ai sept formulaire et que je dois répéter chaque fois la boucle....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FAQ] Fermer tous les formulaires ouverts
    Par guigui5931 dans le forum Contribuez
    Réponses: 19
    Dernier message: 15/02/2024, 16h57
  2. Comment accéder à tous les caractères ?
    Par Girafe enrhumée dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 07/06/2006, 17h44
  3. [VB.net 2005] Rendre tous les formulaires invisibles
    Par PoZZyX dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/05/2006, 14h23
  4. Réponses: 3
    Dernier message: 27/01/2006, 23h45
  5. [LG] Accéder à tous les fichiers d'un dossier
    Par arno15 dans le forum Langage
    Réponses: 3
    Dernier message: 27/10/2005, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo