[Microsoft Acces] Probleme activation bouton

Résolu
Microsoft Acces
J'ai créé une base. Dans cette base, j'ouvre un formulaire "A" qui contient un bouton "B1".
Ce bouton permet l'ouverture d'un formulaire "A1" sur un enregistrement correspondant à un champ de mon formulaire "A".
Dans certain cas, le formulaire "A1" ne contient pas de correspondance.
Comment faire dans le cas ou il n'y a pas d'enregistrement correspondant dans le formulaire "A1" pour que le bouton ne soit pas activé à l'ouverture de l'enregistrement sur le formulaire "A"
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Salut,

    il faut que tu testes s'il y a une correspondance, et dans la négative, tu masques ton bouton avec du code...

    Ca peut être un test sur changement de "record"...
    1. Merci pour ta réponse mais:
      Peux-tu me donner plus de précisions car je ne suis pas expert en VisualBasic. Merci
      Je voudrais que ce test se fasse à l'ouverture de l'enregistrement dans la formulaire A et, en effet si le test est négatif le bouton reste inactif sur cet enregistrement.
      1. Modérateur
        Salut,

        tout d'abord, il faut cacher le bouton à l'ouverture du formulaire et chaque fois qu'on passe d'un enr. à un autre, pour le rendre visible si la condition est vérifiée...

        Au niveau du formulaire, dans l'évènement "sur ouverture" et "sur activation" il faut mettre un code de ce genre-là :
        Bouton.Visible = False
        Table_B.Visible = False
        If Not IsNull(DLookup("NumeroA", "Table_B", "NumeroA=Sai_Num_A")) Then
            Bouton.Visible = True
        End If
        Où "bouton" est le nom du bouton, et "Table_B" est le nom du sous-formulaire qui va s'afficher quand le bouton sera appuyé...
        La fonction DLookup sert à vérifier si dans la table "Table_B", il existe un enr. dont le champ "NumeroA" est égal à la zone d'affichage du formulaire principal, auquel cas, on renvoie le nombre de "NumeroA"...
        Si la fonction DLookup renvoie une valeur Null, alors on garde le bouton masqué...
        Ensuite, il faut mettre un code sur le bouton, pour que son appui affiche le sous-formulaire contenant les données de "Table_B" en liaison avec l'enregistrement courant de la Table_A (possible de manière automatique avec un sous-formulaire)...
        Table_B.Visible = True
        Où "Table_B" est le nom du ss-form intégré...

        Ca t'irait ?
        1. Merci pour ton aide. Je vais esayer de ré-ecrire la procédure et te tiens au courant de l'évolution.
        2. J'ai donc essayé et voici la procédure que j' ai créé avec tes renseignements.

          Private Sub Form_Current()
          Commande21886.Visible = False
          Formulaire descriptif difference sur enregistrement specifique.Visible = False
          If Not IsNull(DLookup("[Timbre correspondant]", "Formulaire descriptif difference sur enregistrement specifique", "[Timbre correspondant]=[Numéro YT]")) Then
          Commande21886.Visible = True
          End If
          End Sub

          J'ai un problème avec la troisième ligne.
          Erreur compilation
          Attendu : Numéro de ligne ou etiquette ou instruction ou fin d'instruction

          Donc vu mon niveau de connaissance, je suis perdu !!!!
          **************
          Je me permet de te donner plus de détail:
          En fait j'ouvre un formulaire qui se nomme "Formulaire saisie timbres" et qui contient un champ "Numéro YT" ainsi que le bouton "Commande 21886".
          A cet ouverture je veux faire un test dans le champ "Timbre correspondant" d'un autre formulaire qui se nomme "Formulaire descriptif difference sur enregistrement specifique".
          Si ce test "Numéro YT"="Timbre correspondant" est positif le bouton "Commande 21886" est actif sinon il est inactif
        3. Modérateur
          Dans ACCESS, quand un nom d'objet contient des espaces, il faut le mettre entre crochets :
          [Formulaire descriptif difference sur enregistrement specifique].Visible = False
          Et partout ailleurs...
        4. J'ai essayé les crochets mais je reste toujours bloqué sur la 3ème ligne en question.
        5. J'ai solutionné mon problème en utilisant des Sous Formulaires au lieu de formulaire.
          Je ne pense pas que ce soit le bonne pratique mais cela fonctionne tres bien.
          Un grand merci à Blux qui m'a bien orienté sur le contenu du processus.
      2. Bonjour
        Je voudrais mettre le focus sur un objet d’un sous formulaire lui-même situé dans un sous formulaire !
        J’ai utilisé le code suivant :
        Me.[NomSousFormulaire]![NomSousSousFormulaire].Form![MaZoneDeText].SetFocus
        Mais il ne fonctionne pas
        Merci
        1. Bonjour
          Je voudrais mettre le focus sur un objet d’un sous formulaire lui-même situé dans un sous formulaire !
          J’ai utilisé le code suivant :
          Me.[NomSousFormulaire]![NomSousSousFormulaire].Form![MaZoneDeText].SetFocus
          Mais il ne fonctionne pas
          Merci
          1. Bonsoir je n’ai toujours pas reçu de propososition de réponse pour ma question !
            Merci de m’aider !
          2. @hydatidoseBonsoir
            j’ai résolu le problème : il faut mettre le focus sur le premier sous formulaire puis sur le sous-sous-formulaire puis sur l’objet en question.
            Forms![Formulaire]![Sous-Formulaire].SetFocus
            Forms![Formulaire]![Sous-Formulaire]![Sous-sous-Formulaire].SetFocus
            Forms![Formulaire]![Sous-Formulaire]![Sous-sous-Formulaire]![Objet].SetFocus
            Je vousdrais acteullement n’imprimer un Etat que si cet objet est rempli !
            Merci