web-dev-qa-db-fra.com

Rendre les champs visibles dans le formulaire MS Access lorsque certains champs sont complétés

Je construis un formulaire dans MS Access pour permettre aux utilisateurs de saisir des données, mais il y a trop de champs possibles. La plupart du temps, environ la moitié seulement des champs seront utilisés.

Je voudrais donc que certains champs apparaissent uniquement en fonction de ce que l'utilisateur a saisi sur un champ antérieur donné.

Ex: l'utilisateur entre le numéro du projet, le titre, puis il vérifie une ingénierie "oui/non". comme il l'a coché, cela signifie que l'ingénierie est impactée et qu'une douzaine de champs que l'utilisateur devra renseigner apparaissent.

Est-ce possible:

1) sans VBA

2) avec VBA

4
user2385809

Probablement pas possible sans VBA.

Avec VBA par exemple:

  1. Assurez-vous que votre formulaire est en mode Création
  2. Faites un clic droit sur votre zone de liste déroulante, votre événement, votre générateur de code

Cela ouvre le code derrière votre formulaire. Il vous place dans le code par défaut de l'événement BeforeUpdate. Nous voulons plutôt l’événement Change. En haut à droite, changez le menu déroulant de BeforeUpdate à Change. Cela vous donnera un peu de code comme ceci:

Private Sub Field1_Change()

End Sub

À l'intérieur, vous voulez vérifier la valeur de la liste déroulante et masquer les champs au besoin:

En supposant que le nom de votre liste déroulante soit Field1 (le vôtre sera bien sûr différent), vous ajoutez du code pour qu'il ressemble à ceci pour masquer Field2:

Private Sub Field1_Change()
  If Field1.Value = "Yes" Then
      Me.Field2.Visible = False
  End If
End Sub

Notez que vous devez connaître le nom de tous vos champs - cela se trouve dans l'onglet Autre, champ Nom dans la boîte de propriétés (F4). Vous devez donner à tous vos champs des noms judicieux afin de pouvoir comprendre ce qui se passe dans le code.

Pour une case à cocher, suivez exactement la même procédure, mais vous devrez probablement utiliser l'événement Click. Juste expérimenter.

Exemple de code de case à cocher:

Private Sub Check5_Click()
  ' Note: vbTrue = -1
  If Me.Check5 = vbTrue Then
    MsgBox ("Ticked")
  Else
MsgBox ("Not Ticked")
  End If
End Sub
3
Nick.McDermaid

J'ai un formulaire qui affichera certains champs après la sélection d'une valeur de zone de liste. J'utilise la fonction AfterUpdate. Cela a fonctionné jusqu'à présent. Mon code est ci-dessous. ProjectName et ProjectNumber sont des champs à afficher uniquement si Engineering est sélectionné. OtherName et OtherNumber sont des champs que vous ne voulez afficher que s'il s'agit d'un projet "NotEngineering".

Insérez ce code en cliquant sur le champ qui sélectionne le type de projet, accédez à l'onglet Evénement de la feuille de propriétés, puis cliquez sur "Après la mise à jour", puis choisissez le générateur de code et le coller dans VBA.

Private Sub ProjectType_AfterUpdate()
If ProjectType.Value = "Engineering" Then
      Me.ProjectName.Visible = True
      Me.ProjectNumber.Visible = True
 Else
      Me.ProjectName.Visible = False
      Me.ProjectNumber.Visible = False
 End If

If ProjectType.Value = "NotEngineering" Then
      Me.OtherName.Visible = True
      Me.OtherNumber.Visible = True
 Else
      Me.OtherName.Visible = False
      Me.OtherNumber.Visible = False
 End If

End Sub
1
Melisa L.

Il y a moyen de ne pas tout à fait le faire sans VBA. Cependant, je recommanderais certainement VBA, car vous pouvez en faire beaucoup plus.

Au lieu de vous cacher, essayez de désactiver les champs inutiles avec la mise en forme conditionnelle par expression.

faites un clic droit sur le contrôle que vous voulez désactiver. descendez et cliquez sur 'Mise en forme conditionnelle' Ajouter une nouvelle règle Sélectionnez 'Expression is'

exemple: [fld1] = "yes"

appuyez sur la case désactivée cliquez sur OK, cliquez sur OK

maintenant, le contrôle que vous avez sélectionné sera désactivé si le champ 1 a "oui" sélectionné.

1
ShadeBlack

J'ai le même problème et j'ai fait ce qui suit:

Private Sub Field1_Click()
If Field1 = "Yes" Then
Me.Field2.Visible = True
Else: Me.Field2.Visible = False
End If
End Sub

mais maintenant j'ai un autre problème, quand je change d'enregistrement, le champ que j'ai choisi d'être visible dans le dernier enregistrement est maintenant visible dans l'enregistrement actuel, bien que je n'ai choisi aucune option.

Je vous remercie,

0
CandleJack