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

IHM Discussion :

Champs visibles sous condition dans un formulaire Access [AC-2010]


Sujet :

IHM

  1. #1
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 48
    Points
    48
    Par défaut Champs visibles sous condition dans un formulaire Access
    Bonjour le forum,

    Je suis en train de créer un formulaire Access qui gère les demandes d'échelonnement de dettes, mais, compte tenu de mes connaissances en la matière, je galère un peu !

    Je vous explique mon problème : dans mon formulaire (ci-joint), j'ai inséré 100 étiquettes numérotées de 1 à 100 représentant le nombre de mois, 100 champs textes dans lesquels les dates d'échéance sont automatiquement indiquées et 100 champs indiquant le montant dû par le débiteur.

    100 est le nombre de mois maximum pour échelonner la dette.

    Le nombre de mois varie en fonction du montant de la dette ...

    Je voudrais que lorsque le nombre de mois est sélectionné dans une liste déroulante, les champs dont je parle ci-dessus ne soient visibles qu'à concurrence du nombre de mois. Exemple : si la dette est remboursée sur 12 mois, les champs de 13 à 100 ne sont plus visibles.

    J'ai commencé avec une formule du type :

    Private Sub Form_Remboursement()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If [Modifiable36] = [Etiquette61] Then
    [Texte60].Visible = True
    [Texte98].Visible = True
     
     
    End Sub
    Mais, compte tenu du nombre de champs que j'ai, ça va être totalement ingérable ! En fait, il faudrait, me semble-t-il, un code du genre : si [Modifiable36]=x, seules les étiquettes dont le nombre est inférieur ou égal à x apparaissent, ainsi que les deux textes qui sont liés à cette étiquette.

    Quelqu'un pourrait-il me mettre sur la voie ?

    Merci d'avance.

    Cordialement.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    À la place de 100 fois 3 contrôles par échéance dont certains à cacher, je procèderais plutôt avec un sous-formulaire (en continu).
    Lorsque les données de base sont encodées dans le formulaire principal, on déclenche un processus qui crée la table source du sous-formulaire : autant d’enregistrements que nécessaire avec chacun les 3 données de l'échéance.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    Bonjour le forum,
    Bonjour Claude,


    Merci pour votre réponse.

    Je vais m'orienter vers quelque chose qui me simple plus simple et qui va donc mieux correspondre à mes capacités en la matière.

    Je vais rendre visibles les champs, uniquement si le solde est positif.

    Pour chaque champ concerné, j'ai donc mis Visible = Non en propriété, puis le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub FormCurrent()
     
    If Me.Texte98 > 0 Then
    Me.Texte98.Visible = True
    Me.Texte60.Visible = True
    Me.Etiquette61.Visible = True
    Me.Etiquette400.Visible = True
    Me.M1.Visible = True
    Comme vous l'avez compris, la valeur contenue dans le champ Texte98 (dans cet exemple) contient le solde à payer.

    Je vais répéter ce code pour chacune de mes 100 lignes.

    Le problème est qu'il ne se passe rien ! Y a t-il un problème de syntaxe ?

    J'ai essayé aussi en indiquant [Texte98].Value.Visible = True ...

    Mais, ça ne marche pas mieux.

    Quelqu'un pourrait-il m'éclairer ?

    Je vous prie de m'excuser par avance, mais je suis néophyte en programmation Access. Je pioche de forum en forum, mais le résultat n'est pas forcément toujours très cohérent.

    Merci d'avance pour votre aide.

    Cordialement.

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Arrangez-vous alors pour que le nom des contrôles soit significatif :
    - pour les contrôles qui contiennent les soldes , par exemple « Solde » suivi de 3 chiffres : Solde028 pour la 28e échéance ;
    - pour les étiquettes N° d’échéance : Ech028 ;
    - pour les dates : Date028.

    On peut ainsi lancer une boucle qui cache ou montre ce qui est significatif du genre de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim ctl As Control
      For Each ctl In Me.Controls
        If ctl.Name Like "Solde###" And ctl = 0 Then
            ctl.Visible = False
            Me("Ech" & Right(ctl.Name), 3).Visible = False
            Me("Dte" & Right(ctl.Name), 3).Visible = False
        End If

  5. #5
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    Bonjour le forum,
    Bonjour Claude,


    Merci pour votre réponse.

    J'ai changé tous les noms, rendu visibles tous les champs (sauf ceux qui ne doivent jamais apparaître) et intégré votre code.

    Mais, il ne se passe rien.

    Je vous joins le fichier test. Auriez-vous la gentillesse d'y regarder ?

    Merci d'avance pour votre patience.


    Cordialement.
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    - Quelques contrôles étaient mal nommés (Solde10 au lieu de Solde010, par exemple).
    - La procédure n’était pas référencée :



    - Le test sur « Soldexxx » doit porter sur « négatif » et non sur « égal zéro ».



    Quoi qu’il en soit, j’ai un peu modifié le code que je proposais sans avoir pu tester :
    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
    26
    27
    28
    Option Compare Text
    Option Explicit
     
     
    Private Sub Form_Current()
      On Error GoTo GestionErreurs
      Dim ctl As Control
      For Each ctl In Me.Controls
        If ctl.Name Like "Solde###" Then
            If ctl.Value <= 0 Then
                Me("Ms" & Right(ctl.Name, 3)).Visible = False
                Me("Date" & Right(ctl.Name, 3)).Visible = False
                Me("Solde" & Right(ctl.Name, 3)).Visible = False
                Me("M" & Right(ctl.Name, 3)).Visible = False
                Me("EM" & Right(ctl.Name, 3)).Visible = False
            End If
        End If
      Next ctl
    GestionErreurs:
      Select Case Err.Number
        Case 0 ' pas d'erreur
          Exit Sub
        Case 438 'pas ces propriétés pour ce contrôle
          Resume Next
        Case Else
          MsgBox "Erreur dans Form_Current : " & Err.Number & " " & Err.Description
      End Select
    End Sub

    Résultat


  7. #7
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    Re-,

    Je viens de regarder votre réponse.

    Merci beaucoup pour votre aide. Sans vous, il est évident que je n'y serai pas arrivé, ou alors après une galère sans fin et avec un résultat bien moins abouti !

    J'ai juste une dernière petite question : il faudrait que le nombre de ligne de champs se mette à jour automatiquement quand je sélectionne le nombre de mois dans la liste déroulante "Nbre_mois_déb".

    Or, là ce n'est pas le cas : il faut que je passe en mode création, puis en mode formulaire pour que la mise à jour se fasse.

    Qu'est-ce que j'ai raté (encore !) ?

    Merci encore d'avance pour votre réponse.

    Cordialement.

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Il faut provoquer le rafraîchissement du formulaire après la mise à jour du nombre de mois.

    N.B.

    J'ai modifié le code pour que les contrôles cachés redeviennent visibles si on modifie le nombre de mois.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Option Compare Text
    Option Explicit
     
     
    Private Sub Form_Current()
      On Error GoTo GestionErreurs
      Dim ctl As Control
      For Each ctl In Me.Controls
        If ctl.Name Like "Solde###" Then
            If ctl.Value <= 0 Then
                Me("Ms" & Right(ctl.Name, 3)).Visible = False
                Me("Date" & Right(ctl.Name, 3)).Visible = False
                Me("Solde" & Right(ctl.Name, 3)).Visible = False
                Me("M" & Right(ctl.Name, 3)).Visible = False
                Me("EM" & Right(ctl.Name, 3)).Visible = False
              Else
                Me("Ms" & Right(ctl.Name, 3)).Visible = True
                Me("Date" & Right(ctl.Name, 3)).Visible = True
                Me("Solde" & Right(ctl.Name, 3)).Visible = True
                Me("M" & Right(ctl.Name, 3)).Visible = True
                Me("EM" & Right(ctl.Name, 3)).Visible = True
            End If
        End If
      Next ctl
    GestionErreurs:
      Select Case Err.Number
        Case 0 ' pas d'erreur
          Exit Sub
        Case 438 'pas ces propriétés pour ce contrôle
          Resume Next
        Case Else
          MsgBox "Erreur dans Form_Current : " & Err.Number & " " & Err.Description
      End Select
    End Sub
     
    Private Sub Modifiable36_Click()
     Me.Requery
     Call Form_Current
    End Sub
    Fichiers attachés Fichiers attachés

  9. #9
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Points : 48
    Points
    48
    Par défaut
    Bonjour Claude,
    Bonjour le forum,

    Merci encore pour votre aide et votre patience. Ca marche très bien.

    Bien cordialement.

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

Discussions similaires

  1. [PHP 5.2] Calcule sous condition dans un formulaire
    Par bryan1000ch dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2014, 14h44
  2. Etat champ visible sous condition
    Par rose0729 dans le forum IHM
    Réponses: 10
    Dernier message: 12/12/2013, 13h36
  3. Champs visible sous condition Access
    Par AminaAccess dans le forum Macros Access
    Réponses: 3
    Dernier message: 20/01/2013, 13h46
  4. [AC-2010] Champ visible sous condition
    Par eric0512 dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/02/2012, 19h17
  5. Réponses: 10
    Dernier message: 08/12/2010, 05h48

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