Ouvrir un formulaire Access dans deux onglets
thiefer
-
thiefer -
thiefer -
Bonjour à tous,
j'ai un formulaire de menu [f_principal] composé d'un contrôle "CtlTab0" avec 5 onglets numérotés de 0 à 4.
Je souhaite ouvrir un second formulaire [f_gl] soit en mode ajout dans l'onglet 2, soit en mode modification / Suppression dans l'onglet 3
Je fais un traitement de recherche en onglet 0 et récupère mes résultats dans une zone de liste.
Au double click sur une ligne de la zone de liste, je récupère l'identifiant de mon enregistrement et programme :
docmd.openform "f_gl", acnormal,,strcriteria
cela fonctionne mais m'ouvre [f_gl] comme une fenêtre indépendante et je n'arrive absolument pas à le faire ouvrir en onglet 3.
Comment m'y prendre svp tout en sachant que lorsque je clique sur mon onglet 2, je souhaite ouvrir [f_gl] en mode ajout ?
La cerise sur le gâteau serait de pouvoir ne pas afficher les barres de navigation entre enregistrements ssi je suis dans ce mode ajout !!! Mais là, ce sera pour plus tard, c'est pas le plus important...
En tous les cas, si vous pouviez m'aider à résoudre mon problème parce que je planche dessus depuis plusieurs semaines sans trouver d'issue.
Donc même s'il fallait une solution alternative, je suis preneur de tout ce qui peut me sortir de là !!!
@ très bientôt et mille mercis par avance
TF
j'ai un formulaire de menu [f_principal] composé d'un contrôle "CtlTab0" avec 5 onglets numérotés de 0 à 4.
Je souhaite ouvrir un second formulaire [f_gl] soit en mode ajout dans l'onglet 2, soit en mode modification / Suppression dans l'onglet 3
Je fais un traitement de recherche en onglet 0 et récupère mes résultats dans une zone de liste.
Au double click sur une ligne de la zone de liste, je récupère l'identifiant de mon enregistrement et programme :
docmd.openform "f_gl", acnormal,,strcriteria
cela fonctionne mais m'ouvre [f_gl] comme une fenêtre indépendante et je n'arrive absolument pas à le faire ouvrir en onglet 3.
Comment m'y prendre svp tout en sachant que lorsque je clique sur mon onglet 2, je souhaite ouvrir [f_gl] en mode ajout ?
La cerise sur le gâteau serait de pouvoir ne pas afficher les barres de navigation entre enregistrements ssi je suis dans ce mode ajout !!! Mais là, ce sera pour plus tard, c'est pas le plus important...
En tous les cas, si vous pouviez m'aider à résoudre mon problème parce que je planche dessus depuis plusieurs semaines sans trouver d'issue.
Donc même s'il fallait une solution alternative, je suis preneur de tout ce qui peut me sortir de là !!!
@ très bientôt et mille mercis par avance
TF
Configuration: Windows XP Firefox 3.0.1
11 réponses
-
Bon, j'ai une bonne nouvelle: En mode Entrée de données, tu es seulement en mode ajout, sans boutons de déplacement. Donc le point qui t'intéressait le moins est résolu...
Pour le reste, je ne comprends pas trop. Qu'appelles-tu "fenêtre indépendante"? Comment voudrais tu que F_gl apparaisse? Parce que pour activer l'onglet 3, il suffit de d'atteindre un des contrôles qui s'y trouvent... -
Salut Lately Geek et merci pour ton retour,
alors je vais essayer de faire simple,
sur f_principal, j'ai un onglet n°2 qui s'appelle Ajouter.
en cliquant sur l'onglet, j'accède à f_gl, en mode ajout seulement (et sans les boutons de déplacement ;-) )
en double cliquant sur une ligne de ma zone de liste lst_resultat en onglet n°0, recherche, je souhaite accéder à mon même formulaire f_gl mais sur l'onglet n°3 simplement en mode modif, suppr (allowadd = False ??). Je souhaite accéder donc à l'enregistrement que j'ai double cliqué don passage de la clef en paramètre strCriteria.
C'est en fait cette utilisation une fois en mode add, une fois en mode edit, une fois en ouverture simple en cliquant sur mon onglet, une fois par Docmd.OpenForm que je n'arrive pas à résoudre.
Comment dois-je m'y prendre stp ?
Merci par avance
TF -
Après ta ligne DoCmd.OpenForm, tu ajoutes:
Me.AllowAdditions = False pour empêcher les ajouts
Me.AllowDeletions = False pour empêcher les suppressions ou
Me.DataEntry = True pour mettre le formulaire en mode Entrée de Données.
-
Salut LatelyGeek,
désolé pour le silence, j'ai eu maille à partir avec mon fournisseur d'accès, free pour ne pas le nommer...
Me voici à nouveau connecté donc et je te reviens car j'ai remis un peu d'ordre dans mes formulaires et codes depuis ton assistance.
Je commence à voir bcp plus clair mais il reste encore quelques points que je ne parviens pas à résoudre.
Peut-être en te mentionnant quelques unes de mes lignes de codes pourras-tu me permettre de boucler la question.
Voici donc le code du formulaire menu, f_principal qui me permet de naviguer d'onglet en onglet :Private Sub CtlTab0_Change() ' On récupère l'indice de l'onglet actif Select Case Me.CtlTab0 Case 0 ' Rechercher Me.lbl_No_Onglet.Caption = Me.CtlTab0 Me.ong_edit.Visible = False Me.ong_add_record.Visible = True Case 1 ' Statistiques Me.lbl_No_Onglet.Caption = Me.CtlTab0 Me.ong_edit.Visible = False Me.ong_add_record.Visible = True Case 2 ' Ajouter un enregistrement Me.lbl_No_Onglet.Caption = Me.CtlTab0 Me.AllowEdits = False Me.AllowDeletions = False Me.AllowAdditions = True Me.Dataentry = True Case 3 ' Modifier, Supprimer Me.lbl_No_Onglet.Caption = Me.CtlTab0 Case 4 ' Quitter ' Maintien en affichage de l'onglet appelant = comportement Bouton If (Me.lbl_No_Onglet.Caption = "NoOnglet") Then Me.CtlTab0 = 0 Else Me.CtlTab0 = Me.lbl_No_Onglet.Caption End If ' Demande de validation cloture ou maintien de l'application ouverte If MsgBox("Souhaitez-vous quitter l'application en cours ?", vbApplicationModal + vbMsgBoxSetForeground + vbExclamation + vbYesNo + vbDefaultButton1, "Fermeture de l'application ") = vbYes Then DoCmd.Close End If End Select End Sub
le contrôle onglet ong_edit contient mon formulaire de traitement des données en mode édition avec les propriétés nom = f_editrecords et source = f_records
le contrôle onglet ong_add contient mon formulaire de traitement des données en mode ajout avec les propriétés nom = f_addrecords et source = f_records
Lorsque l'un de ces deux contrôles est actif, l'autre devient invisible et vice versa. Ce point fonctionne nickel.
Le propriété par défaut de f_records sont :
AllowEdits = False
AllowDeletions = False
AllowAdditions = True
Dataentry = True
Du code de mon formulaire de recherche (case 0) f_search :Private Sub lst_resultat_DblClick(Cancel As Integer) Dim rst As Recordset Dim strCriteria As String Set rst = CurrentDb.OpenRecordset("tbl_TempLstFrm", dbOpenSnapshot) ' recherche les informations de la table rst.FindFirst ("Table='" & Me.cbo_table & "'") If rst.NoMatch Then ' non trouvé MsgBox "Cette table ne possède pas de formulaire. Veuillez renseigner la table des paramètres.", _ vbCritical + vbOKOnly, "formulaire de Recherche" Exit Sub Else ' trouvé If lf_GetTypeField(Me.cbo_table, rst.Fields("Champ")) = dbText Then 'la clef est Texte strCriteria = "'" & Me.lst_resultat & "'" Else 'la clef est numérique strCriteria = Me.lst_resultat End If Forms!f_principal!ong_edit.Visible = True Forms!f_principal!ong_add_record.Visible = False Forms!f_principal!CtlTab0.Value = 3 Forms!f_principal!f_editrecord!No_enreg.Value = strCriteria Forms!f_principal.f_editrecord.Form.AllowEdits = True Forms!f_principal.f_editrecord.Form.AllowDeletions = True Forms!f_principal.f_editrecord.Form.AllowAdditions = False Forms!f_principal.f_editrecord.Form.Dataentry = False End If End Sub
Lorsque je doucle click sur une ligne de ma zone de liste résultat de recherche, je récupère le numéro de l'enregistrement en strCriteria, j'active l'onglet d'édition et rend invisible celui d'ajout puis je cherche à affecter de nouvelles valeurs aux propriétés allow....
Ce qui ne fonctionne pas :
Il semble que, comme mon formulaire de traitement des données se trouve inclu dans un contrôle (l'onglet) du formulaire principal, je n'ai jamais aucun événement au niveau du formulaire d'édition.
Je ne parviens donc pas à activer sur un quelconque événement une action de test dans mon formulaire pour savoir si j'accède en mode add ou edit.
Donc, je ne sais pas non plus affecter ma variable strCriteria pour une éventuelle clause Select de positionnement sur l'enregistrement appelé.
Suis-je bien clair... -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Oh là, je viens ENFIN de comprendre que tu ouvres les formulaires dans les onglets. Je ne suis certaine que ça soit le plus simple.
As tu essayé par exemple de mettre tous les formulaires dans le formulaire principal, sans onglets, avec les propriétés Add, Edit etc qui t'intéressent, par défaut invisibles et de les rendre visibles quand tu en as besoin?
Ca ne correspond peut-être pas à ce que tu recherches, mais vu que je ne sais même pas de quoi traite ta base, je suis un peu à tâtons... -
Salut LatelyGeek,
Ma base reprend les données de mes entraînements et compétitions sportives pour les activités que je pratique.
Au début, j'avais une structure classique avec un formulaire menu qui à l'aide de boutons appelaient successivement les formulaires dont j'avais besoin par des Docmd.OpenForm en mode add ou edit, selon le besoin.
Cela fonctionnait bien mais j'ai voulu rendre l'appli un peu plus sexy ;-)
Du coup je me frotte pour la première fois au contrôle onglet et je ne maîtrise pas franchement...
J'ai positionné des msgbox pour comprendre les événements activés.
Il se trouve donc que mon formulaire de traitement des données, f_recors est bien ouvert et activé par deux fois donc par l'onglet ong_add et par l'onglet ong_edit.
Comme dans chacun des deux cas il a un nom différent, cela fonctionne.
Maintenant, ce que je ne parviens pas à faire, c'est d'en modifier les propriété car je ne sais pas, ni où, ni quand, ni comment le faire.
De plus, si je suis par exemple en mode ajout, j'aimerai en sélectionnant mon parcours qu'il me propose un distance moyenne calculée des anciennes course sur ce trajet, chose à ne pas reproduite en mode edit où il doit afficher l'enregistrement appelé tel qu'il figure en bdd.
Juste cet exemple pour dire que mon point est de parvenir à détecter soit le mode appelant soit le type de fonctionnement pour déclencher ou non un traitement ou un appel via select...
Suis-je tjs clair ??? !!! .....
Même moi je finis par me demander, c'est dire...
TF -
Noralement, si tu fais Me!f_editrecord.Form.DataEntry = False, ça devrait fonctionner. Chez moi, ça fonctionne en tout cas.
-
C'était aussi une des hypothèse que j'avais testé.
Malheureusement, il me popup erreur d'exécution 2465
"Impossible de trouver le champ 'f_editrecord' auquel il est fait référence dans votre expression
Sighhh !!
Je vais pas m'en sortir de ce bousin !!!
Code du module form_f_searchForms!f_principal!ong_edit.Visible = True Forms!f_principal!ong_add_record.Visible = False Forms!f_principal!CtlTab0.Value = 3 'Forms!f_principal!f_editrecord!No_enreg.Value = strCriteria Me!f_editrecord.Form.AllowEdits = True Me!f_editrecord.Form.AllowDeletions = True Me!f_editrecord.Form.AllowAdditions = False Me!f_editrecord.Form.Dataentry = False -
rectificatif,
cela fonctione en remplaçant Me. par Forms!f_principal.
Donc mon code est devenuForms!f_principal!ong_edit.Visible = True Forms!f_principal!ong_add_record.Visible = False Forms!f_principal!CtlTab0.Value = 3 'Forms!f_principal!f_editrecord!No_enreg.Value = strCriteria Forms!f_principal!f_editrecord.Form.AllowEdits = True Forms!f_principal!f_editrecord.Form.AllowDeletions = True Forms!f_principal!f_editrecord.Form.AllowAdditions = False Forms!f_principal!f_editrecord.Form.Dataentry = False
Mille mercis !!
un dernier bon geste m'sieurs dames ;-)
Comme tu le vois, j'ai laissé en commentaire le passage de critère.
En effet, lorsque je l'active il me mentionne erreur 3164, le champ ne peut pas être mis à jour.
Ben je sais !!! C'est pas c'que j'te demande !!!
J'veux juste que tu te positionnes sur l'enregistrement.
En fait je lui passe en commentaire la clef de l'enregistrement que je souhaite atteindre.
Est-ce que tu saurais d quelle façon je dois m'y prendre.
J'avais l'habitude de critère du Docmd.OpenForm pour cela mais je n'ai plus l'option.
En fait, il faudrait que je puisse lui dire quelques chose dans le genreselect * from tbl_donnees where no_enreg = strCriteria
-
Est ce que tu as essayé de baser f_editrecord sur une requête prenant le N°enregistrement comme critère, et faire un DoCmd.ShowAllRecords Après MAJ de ta liste?
-
Salut à tous et un grand merci à toi, LatelyGeek,
Tout fonctionne parfaitement à présent,
la solution consistait à utiliser la propriété de formulaire filter.
La structure est donc la suivante :
un formulaire f_principal contenant des sous-formulaire indépendants dans chacun de ses onglets.
Le sous formulaire f_search contient une zone de liste.
en double cliquant sur l'un de ces enregistrements, on affiche le sous-formulaire f_records en mode éditionForms!f_principal!ong_edit.Visible = True Forms!f_principal!ong_add_record.Visible = False Forms!f_principal!CtlTab0.Value = 3 Forms!f_principal!f_editrecord.Form.AllowEdits = True Forms!f_principal!f_editrecord.Form.AllowDeletions = True Forms!f_principal!f_editrecord.Form.AllowAdditions = False Forms!f_principal!f_editrecord.Form.Dataentry = False Forms!f_principal!f_editrecord.Form.Filter = strCriteria Forms!f_principal!f_editrecord.Form.FilterOn = True
Extrait du code de f_principal pour permettre l'utilisation du même sous-formulaire f_records en mode ajoutPrivate Sub CtlTab0_Change() Select Case Me.CtlTab0 Case 0 ' Rechercher Me.lbl_No_Onglet.Caption = Me.CtlTab0 Me.ong_edit.Visible = False Me.ong_add_record.Visible = True Forms!f_principal!f_editrecord.Form.FilterOn = False Case 2 ' Ajouter un enregistrement Me.lbl_No_Onglet.Caption = Me.CtlTab0 Forms!f_principal!f_addrecord.Form.AllowEdits = False Forms!f_principal!f_addrecord.Form.AllowDeletions = False Forms!f_principal!f_addrecord.Form.AllowAdditions = True Forms!f_principal!f_addrecord.Form.Dataentry = True End Select End Sub