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
A voir également:
- Ouvrir un formulaire Access dans deux onglets
- Whatsapp formulaire opposition - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment ouvrir un fichier bin ? - Guide
- Formulaire de réclamation facebook compte désactivé - Guide
- Ouvrir un fichier .dat - Guide
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...
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
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.
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 :
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 :
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...
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...
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
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_search
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_search
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
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 devenu
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 genre
cela fonctione en remplaçant Me. par Forms!f_principal.
Donc mon code est devenu
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
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 genre
select * 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 édition
Extrait du code de f_principal pour permettre l'utilisation du même sous-formulaire f_records en mode ajout
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 édition
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.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 ajout
Private 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