[Résolu][Base]Selection en cascade depuis plusieurs tables
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
[Résolu][Base]Selection en cascade depuis plusieurs tables
Bonjour,
Suite au conseils de Bidouille, j'ouvre un nouveau fil sur le sujet débuté ici :
viewtopic.php?t=68754
Pour reprendre ma problématique, je suis en train de créer une base de gestion de parc automobile.
Afin de limiter les erreurs de saisies et de faire gagner du temps à l'utilisateur, je souhaite organiser mes formulaires de façon a ce que le choix de la marque d'un véhicule dans une comboliste conditionne les résultats pouvant être sélectionnés dans la comboliste suivante, à savoir les modèles de véhicules.
Je veux faire la même chose avec des combolistes de type Pays/Régions/Départements/Villes.
Comme la première me paraît plus facile à comprendre, j'ai débuté par le formulaire F_Saisie_Dossiers.
J'ai trouvé un fil qui correspond à ce que je veux faire généré par Totomath (résolu) et que j'ai suivi. Cependant, lorsque j'adapte le script de la macro plusieurs choses se produisent.
Pour commencer, après quelques erreurs de saisies corrigées j'ai le message d'erreur suivant :
Ensuite, à chaque fois que ré-ouvre la base de données, la première fois que je clique sur Ajouter Modèle j'ai le message suivant qui s'ouvre :
Par la suite, une fois que j'ai cliqué sur plus tard, cela ne se produit plus.
Pour faire plus simple, je pose une copie de la base en question.
Voilà, si vous voyez ou cela cloche et que vous avez des suggestions, je suis preneur, merci.
Suite au conseils de Bidouille, j'ouvre un nouveau fil sur le sujet débuté ici :
viewtopic.php?t=68754
Pour reprendre ma problématique, je suis en train de créer une base de gestion de parc automobile.
Afin de limiter les erreurs de saisies et de faire gagner du temps à l'utilisateur, je souhaite organiser mes formulaires de façon a ce que le choix de la marque d'un véhicule dans une comboliste conditionne les résultats pouvant être sélectionnés dans la comboliste suivante, à savoir les modèles de véhicules.
Je veux faire la même chose avec des combolistes de type Pays/Régions/Départements/Villes.
Comme la première me paraît plus facile à comprendre, j'ai débuté par le formulaire F_Saisie_Dossiers.
J'ai trouvé un fil qui correspond à ce que je veux faire généré par Totomath (résolu) et que j'ai suivi. Cependant, lorsque j'adapte le script de la macro plusieurs choses se produisent.
Pour commencer, après quelques erreurs de saisies corrigées j'ai le message d'erreur suivant :
Ensuite, à chaque fois que ré-ouvre la base de données, la première fois que je clique sur Ajouter Modèle j'ai le message suivant qui s'ouvre :
Par la suite, une fois que j'ai cliqué sur plus tard, cela ne se produit plus.
Pour faire plus simple, je pose une copie de la base en question.
Voilà, si vous voyez ou cela cloche et que vous avez des suggestions, je suis preneur, merci.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par JimMat le 03 août 2024 14:36, modifié 2 fois.
OpenOffice 4.1.15 sous Windows 10 Famille
-
Dude
- IdOOle de la suite

- Messages : 26177
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: Selection en cascade depuis plusieurs tables
Salut,
L'erreur que tu montres vient du fait que tu accèdes au mauvais nom pour ton formulaire.
Lire ce tutoriel pour comprendre : https://beaussier.com/sections/viewtopic.php?f=8&t=158
Tu aurais pu le voir par toi-même en décomposant une ligne unique qui complexifie le débogage :
Je t'invite également à simplifier l'ODB que tu fournis en le limitant à la seule problématique que tu exposes.
A savoir un seul formulaire avec les données qu'il faut pour reproduire.
PS : ton titre est mal balisé (cf. bandeau rouge en haut de la page).
Pourquoi utilises-tu des boîtes combinées alors que le tutoriel indique d'utiliser des zones de liste.
L'erreur que tu montres vient du fait que tu accèdes au mauvais nom pour ton formulaire.
Lire ce tutoriel pour comprendre : https://beaussier.com/sections/viewtopic.php?f=8&t=158
Tu aurais pu le voir par toi-même en décomposant une ligne unique qui complexifie le débogage :
Code : Tout sélectionner
oDoc = ThisComponent 'le document
oPage = oDoc.DrawPage 'la page des contrôles
oForms = oPage.Forms 'les formulaires
oForm = oForms.getByName("MainForm") 'le formulaire, etc...
CboxRid_Marque = oForm.GetByName("CboxRid_Marque")
CboxRid_Modele = oForm.GetByName("CboxRid_Modele")A savoir un seul formulaire avec les données qu'il faut pour reproduire.
PS : ton titre est mal balisé (cf. bandeau rouge en haut de la page).
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: Selection en cascade depuis plusieurs tables
Ok, merci pour ces retours.
A la question pourquoi est-ce que j'utilise des boites combinées au lieu de zones de liste c'est parce que justement comme j'essaie de comprendre la mécanique du truc je ne fais pas de copier/coller et que j'essaie d'apprendre avec les documentations que j'ai trouvé un peu partout et que dans l'une d'elles, il était conseillé d'utiliser la boite au lieu de la liste. Mais je vais modifier cela de suite.
Ensuite, je n'ai pas compris
Quoiqu'il en soit, je vais essayer de comprendre avec tous les liens que tu m'as donné et je vais travailler sur une base plus réduite afin d'une part de pouvoir comprendre plus facilement et de la mettre en ligne pour en faciliter la compréhension si nécessaire.
Merci encore pour ton aide.
A la question pourquoi est-ce que j'utilise des boites combinées au lieu de zones de liste c'est parce que justement comme j'essaie de comprendre la mécanique du truc je ne fais pas de copier/coller et que j'essaie d'apprendre avec les documentations que j'ai trouvé un peu partout et que dans l'une d'elles, il était conseillé d'utiliser la boite au lieu de la liste. Mais je vais modifier cela de suite.
Ensuite, je n'ai pas compris
Car justement, je galère tellement que j'essaie de simplifier au maximum. Je me doute que cela doit paraître évident lorsque l'on capte tout mais à mon stade, tout me pose question.Dude a écrit :Tu aurais pu le voir par toi-même en décomposant une ligne unique qui complexifie le débogage :
Quoiqu'il en soit, je vais essayer de comprendre avec tous les liens que tu m'as donné et je vais travailler sur une base plus réduite afin d'une part de pouvoir comprendre plus facilement et de la mettre en ligne pour en faciliter la compréhension si nécessaire.
Merci encore pour ton aide.
OpenOffice 4.1.15 sous Windows 10 Famille
-
Dude
- IdOOle de la suite

- Messages : 26177
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: Selection en cascade depuis plusieurs tables
Où ça ? Comme toujours, il faut citer la source de ces "conseils".
Si tu encapsules les propriétés et les méthodes, tu pourrais penser que l'erreur porte sur "CboxRid_Marque".
Or, c'est sur le nom du formulaire que cela bloque.
D'où ma proposition de bien éclater les lignes de code pour savoir où se situe l'erreur.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: [Base]Selection en cascade depuis plusieurs tables
Ok, merci je regarde tout cela.
Pour la source, j'ai ouvert tellement d'onglets que je ne me souviens plus précisément mais si je le retrouve je le posterai. Cela m'aidera a comprendre pourquoi j'ai pu penser à tort que cela rentrait dans me recherche de solutions.
Je débute tellement dans les bases de données et encore plus dans les macros que je ne vois pas ce que tu veux dire par encapsuler. De ce fait, je vais effectivement lire tout ce que je peux trouver pour débuter les macros (j'ai trouvé de la doc sur Libreoffice), je pense que cela peut coller et m'aider à comprendre les bases.
Je reviendrais ensuite avec mes modifications pour faire le point.
Merci encore pour toute l'aide fournie.
Pour la source, j'ai ouvert tellement d'onglets que je ne me souviens plus précisément mais si je le retrouve je le posterai. Cela m'aidera a comprendre pourquoi j'ai pu penser à tort que cela rentrait dans me recherche de solutions.
Je débute tellement dans les bases de données et encore plus dans les macros que je ne vois pas ce que tu veux dire par encapsuler. De ce fait, je vais effectivement lire tout ce que je peux trouver pour débuter les macros (j'ai trouvé de la doc sur Libreoffice), je pense que cela peut coller et m'aider à comprendre les bases.
Je reviendrais ensuite avec mes modifications pour faire le point.
Merci encore pour toute l'aide fournie.
OpenOffice 4.1.15 sous Windows 10 Famille
-
Dude
- IdOOle de la suite

- Messages : 26177
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Base]Selection en cascade depuis plusieurs tables
Est-ce que tu comprends les différences entre ta ligne de code et celui que j'ai publié ?
Avant de se lancer dans la programmation, il faut comprendre déjà les mécanismes internes de Base.
On peut tout à fait réaliser un ODB sans macro. Il aura juste moins d'automatisme.
Ce tutoriel en est le point de départ : viewtopic.php?f=29&t=6460
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: [Base]Selection en cascade depuis plusieurs tables
Oui, enfin je crois.Dude a écrit :Est-ce que tu comprends les différences entre ta ligne de code et celui que j'ai publié ?
Dans la mienne tous les éléments sont collés les uns aux autres alors que dans la tienne ils sont tous à la ligne.
Ce qui fait que je ne peux pas savoir ou sont les erreurs. En plus, je n'ai pas encore compris comment et quelles sont les instructions qui doivent définir quels éléments. J'ai l'impression d'être teubé et de passer à côté d'un truc évident.
C'est ce que j'essaie de faire avec les tutos mais d'emblée il y a un truc qui m'echappe dans la relation entre les macros et les formulaires.Dude a écrit :Avant de se lancer dans la programmation, il faut comprendre déjà les mécanismes internes de Base.
Je vien de trouver ça :
https://preview.epagine.fr/bookeen/?epub=ws%2FgetBooks%2F9782212167108%2F&
qui m'a l'air de partir de la base en B.A.BA et j'espère que je vais enfin comprendre ce qui me bloque dans le principe.
Merci encore pour ton aide.
OpenOffice 4.1.15 sous Windows 10 Famille
-
Rafkus_pl
- Membre lOOyal

- Messages : 35
- Inscription : 23 févr. 2022 11:45
Re: [Base]Selection en cascade depuis plusieurs tables
Essayez cette macro :
J'ai attribué la macro ci-dessus à deux événements : Modifié (valeur du champ) et Quand l'enregistrement a été modifié.
J'ai également modifié les champs Combi du formulaire en champs Liste. Peut-être que quelqu'un trouvera cela utile....
Code : Tout sélectionner
Sub Liaison_Listes
DIM sFiltre As string
DIM oForms As Object
DIM CboxRid_Marque As Object
DIM CboxRid_Modele As Object
DIM Var_Id_Modele As Integer
sFiltre = ""
oForms = ThisComponent.DrawPage.Forms.GetByName("MainForm")
CboxRid_Marque = oForms.getByName("CboxRid_Marque")
if CboxRid_Marque.SelectedItems(0) > 0 then
var_Id_Modele = CboxRid_Marque.valueItemList(CboxRid_Marque.SelectedItems(0))
sFiltre = " WHERE ""Rid_Marque"" = " & Var_Id_Modele
end if
CboxRid_Modele = oForms.getByName("fmtRid_Modele")
CboxRid_Modele.ListSource() = array("SELECT ""Modele"", ""Id_Modele"" FROM ""T_Modeles"" " & sFiltre)
CboxRid_Modele.Refresh
End SubJ'ai également modifié les champs Combi du formulaire en champs Liste. Peut-être que quelqu'un trouvera cela utile....
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.6, LibreOffice 7.1.6 - Widows 10
J'écris avec Google Translator, désolé pour l'orthographe...
J'écris avec Google Translator, désolé pour l'orthographe...
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: [Base]Selection en cascade depuis plusieurs tables
Merci Rafkus_pl , c'est exactement ce que j'ai besoin de faire. C'est génial et je vais tâcher de comprendre la mécanique.
Je vais devoir la comprendre car je dois faire la même chose pour le formulaire Pays/Régions/Départements/Villes.
Dès que cela sera fait, je viendrais poser la base finie afin qu'elle puisse servir d'exemple si nécessaire et je pourrais cloturer ce sujet.
Merci encore mille fois.
Je vais devoir la comprendre car je dois faire la même chose pour le formulaire Pays/Régions/Départements/Villes.
Dès que cela sera fait, je viendrais poser la base finie afin qu'elle puisse servir d'exemple si nécessaire et je pourrais cloturer ce sujet.
Merci encore mille fois.
OpenOffice 4.1.15 sous Windows 10 Famille
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: [Base]Selection en cascade depuis plusieurs tables
Je reviens sur mon sujet car il y a quelque chose que je n'ai toujours pas résolu et que je n'arrive pas à mettre en place.
La selection se fait correctement pour le choix des marques et des modèles.
Cependant, lorsque j'ajoute un nouveau modèle depuis mon formulaire Dossiers, la mise à jour de ce nouvel élément de se fait pas.
Il faut que je ferme le formulaire saisie_dossiers puis que je le réouvre pour le nouveau modèle soit intégré.
J'ai prensé à faire un système de bouton "ouvrir/Fermer" qui ouvrirait le formulaire Ajouter modèle en fermant le formulaire saisie dossiers, mais cela n'est pas très pratique.
Il doit exister une autre solution malheureusement, je ne vois pas encore laquelle.
Auriez-vous des idées ?
Merci
La selection se fait correctement pour le choix des marques et des modèles.
Cependant, lorsque j'ajoute un nouveau modèle depuis mon formulaire Dossiers, la mise à jour de ce nouvel élément de se fait pas.
Il faut que je ferme le formulaire saisie_dossiers puis que je le réouvre pour le nouveau modèle soit intégré.
J'ai prensé à faire un système de bouton "ouvrir/Fermer" qui ouvrirait le formulaire Ajouter modèle en fermant le formulaire saisie dossiers, mais cela n'est pas très pratique.
Il doit exister une autre solution malheureusement, je ne vois pas encore laquelle.
Auriez-vous des idées ?
Merci
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.15 sous Windows 10 Famille
-
Dude
- IdOOle de la suite

- Messages : 26177
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Base]Selection en cascade depuis plusieurs tables
Pour moi, c'est un tout autre problème de mise à jour de liste alors qu'un enregistrement est ajouté depuis un autre formulaire.
Il n'y a aucun formulaire de ce nom dans l'ODB fourni.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: [Base]Selection en cascade depuis plusieurs tables
Au temps pour moi.
Effectivement afin d'essayer de comprendre un peu plus facilement les macros j'ai simplifié les noms des formulaires.
Ils s'agit du formulaire F_Dossiers.
D'ailleurs, est-ce que cela pourrait être lié a une autre "bizarerie" que j'ai constaté dans ce formulaire ?
Dans F_Dossiers, j'ai un bouton Ajouter Modèle qui ouvre en ouvre un second afin d'ajouter, comme son nom l'indique, un modèle.
Hors lorsque j'ouvre ce dernier indépendement, tous les modèles sont classés par ordre alphabétique. La "bizarerie" c'est que cela ne se répercute pas lorsque celui-ci est ouvert dans le F_Dossiers alors que j'ai bien la commande ORDER BY dans les propriétés de la liste de choix "Modele".
Dans le cas ou cela n'aurait aucun lien, j'irais créer un au fil de discussion à l'endroit adéquat.
Effectivement afin d'essayer de comprendre un peu plus facilement les macros j'ai simplifié les noms des formulaires.
Ils s'agit du formulaire F_Dossiers.
D'ailleurs, est-ce que cela pourrait être lié a une autre "bizarerie" que j'ai constaté dans ce formulaire ?
Dans F_Dossiers, j'ai un bouton Ajouter Modèle qui ouvre en ouvre un second afin d'ajouter, comme son nom l'indique, un modèle.
Hors lorsque j'ouvre ce dernier indépendement, tous les modèles sont classés par ordre alphabétique. La "bizarerie" c'est que cela ne se répercute pas lorsque celui-ci est ouvert dans le F_Dossiers alors que j'ai bien la commande ORDER BY dans les propriétés de la liste de choix "Modele".
Dans le cas ou cela n'aurait aucun lien, j'irais créer un au fil de discussion à l'endroit adéquat.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.15 sous Windows 10 Famille
-
Rafkus_pl
- Membre lOOyal

- Messages : 35
- Inscription : 23 févr. 2022 11:45
Re: [Base]Selection en cascade depuis plusieurs tables
Je vois que vous profitez de mes suggestions, donc cette « bizarrerie » est de mon fait.
Je pensais que quelqu'un choisirait la marque de la voiture. Ensuite, il voudra sélectionner un modèle, mais il voit que le modèle donné n'est pas dans la liste, il ouvre donc le formulaire pour les marques. Et maintenant, j'ai compris pourquoi il devrait examiner toutes les marques de véhicules, il serait préférable qu'il filtre ce formulaire.
Si vous ne souhaitez pas cet effet, changez simplement la macro sur le bouton "Ajouter Modèle" au lieu d'une macro "OpenFormsFiltr" utiliser "OpenForms".
PS.
Je pensais que quelqu'un choisirait la marque de la voiture. Ensuite, il voudra sélectionner un modèle, mais il voit que le modèle donné n'est pas dans la liste, il ouvre donc le formulaire pour les marques. Et maintenant, j'ai compris pourquoi il devrait examiner toutes les marques de véhicules, il serait préférable qu'il filtre ce formulaire.
Si vous ne souhaitez pas cet effet, changez simplement la macro sur le bouton "Ajouter Modèle" au lieu d'une macro "OpenFormsFiltr" utiliser "OpenForms".
PS.
Cela peut aussi être fait...
OpenOffice 4.1.6, LibreOffice 7.1.6 - Widows 10
J'écris avec Google Translator, désolé pour l'orthographe...
J'écris avec Google Translator, désolé pour l'orthographe...
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: [Base]Selection en cascade depuis plusieurs tables
Merci et aucun souci avec les "bizarreries" en essayant de les comprendre je peux peut-être progresser dans la construction de bases.
Pour vous répondre et essayer d'éclaircir le principe. La personne doit arriver sur un nouvel enregistrement à chaque ouverture du formulaire.
Apèrs avoir saisi l'immatriculation il doit choisir la marque, soit elle existe (ce qui devrait arriver souvent), soit elle n'est pas présente dans la liste de choix. Si elle existe, une fois selectionnée la marque voulue, la liste modèle qui selectionne les modèles disponibles pour cette marque (grace à votre aide) doit afficher les modèles disponibles et rebelotte, soit celui désiré existe, soit pas. Si il n'existe pas, il faut que la personne puisse le créer et si possible, qu'il soit disponible dans la liste sans refermer le formulaire actif pour la saisie du dossier. De plus, il faut que je parvienne à faire en sorte que, comme les marques, les modèles soient classés alphabetiquement, quelque soit le moment de leur ajout.
Cependant, je viens de me rendre compte d'une chose qui m'avait échappé :
Si la marque du véhicule n'existe pas, alors il ne peut pas exister de modèle de cette marque de voiture inexistante dans la base.
Ce qui veut dire que soit, je trouve un système qui mette à jour automatiquement, en cascade, la marque comme le modèle, soit il faut que j'intègre la saisie du nouveau modèle en plus dans la saisie de la nouvelle marque.
Je ne suis pas sur d'être bien clair, mais cela me paraît en tous cas plus ou moins logique dans mon pauvre cerveau.
Je vais creuser cette piste et je suis encore et toujours preneur de conseils.
Merci encore Rafkus_pl pour votre aide et vos conseils.
Pour vous répondre et essayer d'éclaircir le principe. La personne doit arriver sur un nouvel enregistrement à chaque ouverture du formulaire.
Apèrs avoir saisi l'immatriculation il doit choisir la marque, soit elle existe (ce qui devrait arriver souvent), soit elle n'est pas présente dans la liste de choix. Si elle existe, une fois selectionnée la marque voulue, la liste modèle qui selectionne les modèles disponibles pour cette marque (grace à votre aide) doit afficher les modèles disponibles et rebelotte, soit celui désiré existe, soit pas. Si il n'existe pas, il faut que la personne puisse le créer et si possible, qu'il soit disponible dans la liste sans refermer le formulaire actif pour la saisie du dossier. De plus, il faut que je parvienne à faire en sorte que, comme les marques, les modèles soient classés alphabetiquement, quelque soit le moment de leur ajout.
Cependant, je viens de me rendre compte d'une chose qui m'avait échappé :
Si la marque du véhicule n'existe pas, alors il ne peut pas exister de modèle de cette marque de voiture inexistante dans la base.
Ce qui veut dire que soit, je trouve un système qui mette à jour automatiquement, en cascade, la marque comme le modèle, soit il faut que j'intègre la saisie du nouveau modèle en plus dans la saisie de la nouvelle marque.
Je ne suis pas sur d'être bien clair, mais cela me paraît en tous cas plus ou moins logique dans mon pauvre cerveau.
Je vais creuser cette piste et je suis encore et toujours preneur de conseils.
Merci encore Rafkus_pl pour votre aide et vos conseils.
OpenOffice 4.1.15 sous Windows 10 Famille
-
Bidouille
- RespOOnsable forum

- Messages : 12812
- Inscription : 08 nov. 2005 16:23
- Localisation : Brest, France
Re: [Base]Selection en cascade depuis plusieurs tables
Bonjour,
Si votre problème évolue ou s'il est complexe, vous devez créer un nouveau fil avec un titre en rapport.
Vous devez penser à ceux qui font des recherches et qui ne s'arrêteront pas ici.
Merci de :
Je ne vois plus le rapport avec la question initiale qui porte sur [Base]Selection en cascade depuis plusieurs tablesJimMat a écrit : ↑17 juin 2024 19:38Si il n'existe pas, il faut que la personne puisse le créer et si possible, qu'il soit disponible dans la liste sans refermer le formulaire actif pour la saisie du dossier. De plus, il faut que je parvienne à faire en sorte que, comme les marques, les modèles soient classés alphabetiquement, quelque soit le moment de leur ajout.
Si votre problème évolue ou s'il est complexe, vous devez créer un nouveau fil avec un titre en rapport.
Vous devez penser à ceux qui font des recherches et qui ne s'arrêteront pas ici.
Merci de :
- clôturer le présent fil
- ouvrir un nouveau sujet avec un titre explicite
- mettre un lien entre chaque afin que chacun puisse suivre
-
Rafkus_pl
- Membre lOOyal

- Messages : 35
- Inscription : 23 févr. 2022 11:45
Re: [Base]Selection en cascade depuis plusieurs tables
Pour actualiser une liste donnée après avoir saisi des données dans un autre formulaire, vous devez vous souvenir du formulaire initial, vous devez vous en souvenir même si aucune macro n'est en cours d'exécution. Vous y parvenez en déclarant une variable globale au début du script :
Il faut maintenant attribuer une valeur à la variable ainsi définie. Dans la macro "Liaison_Listes", ajoutez cette ligne de code:
Vous pouvez utiliser cette macro pour fermer n'importe quel formulaire actif:
Désormais, juste après avoir fermé un autre formulaire, vous souhaitez actualiser la zone de liste du formulaire source. La commande "some LISTBOX.Refresh" est utilisée à cet effet. Il peut arriver qu'un formulaire par exemple "F_Modeles" soit ouvert sans ouvrir "F_Dossiers" et que la variable oFormePrincipale soit vide. Par conséquent, vous devez vérifier si cette variable a reçu une valeur comme suit:
Bien entendu, il peut arriver que le formulaire "F_Dossiers" soit fermé à un moment donné. Par conséquent, vous devez prendre soin d'effacer la variable globale oFormePrincipale avec la macro suivante :
Et maintenant il faut affecter cette macro à l'événement (sur le formulaire "F_Dossiers") "Le document sera clôturé"
Code : Tout sélectionner
global oFormePrincipale As Object 'formulaire sourceCode : Tout sélectionner
oFormePrincipale = oFormsCode : Tout sélectionner
'Macro fermant un formulaire ouvert (fenêtre active)
Sub FermerFormulaireF()
dim oForm as Object
dim oDok as Object
oDok = ThisComponent.DrawPage.Forms(0) 'Sauvegarder les modifications
if oDok.isnew then oDok.insertrow() else oDok.updaterow()
oForm = ThisComponent.getCurrentController().getFrame()
oForm.close(true)
End SubCode : Tout sélectionner
if not(oFormePrincipale is nothing) then
oFormePrincipale.getByName("CboxRid_Marque").Refresh
oFormePrincipale.getByName("fmtRid_Modele").Refresh
end ifCode : Tout sélectionner
Sub Supprimer_une_variable
oFormePrincipale = nothing
End Sub| Ajout : Je joins un fichier de travail Une meilleure solution, créée par @Dude, peut être trouvée ici |
Dernière modification par Rafkus_pl le 28 juin 2024 08:07, modifié 1 fois.
OpenOffice 4.1.6, LibreOffice 7.1.6 - Widows 10
J'écris avec Google Translator, désolé pour l'orthographe...
J'écris avec Google Translator, désolé pour l'orthographe...
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: [Base]Selection en cascade depuis plusieurs tables
Bonjour à tous,
Je reviens avec mes histoires de sélection et mise à jour en cascades.
J'ai un peu avancé en tatonnant dans mon formulaire. Il s'avère que j'ai eu la bonne ou mauvaise idée de tenter de rajouter des calculs dans mon formulaire et que je souhaite que ces calculs se mettent à jour en cascade en fonction des tarifs des prestataires. J'ai choisi cette méthode car je n'arrivais pas à lier mon F_Dossiers à une requête. Dans les resultats obtenus, soit j'ai des retours de calculs farfelus soit j'ai une erreur de variable non définie que je n'arrive pas à rectifier.
Je ne suis certainement pas le couteau le plus affuté du tirroir et il se pourrait même qu'il n'y ai pas de solution à mon problème. L'idée de ne pas stocké de calculs dans les tables me paraît logique. Pour autant, il me semble (mais je me fourre peut-être le doigt dans l'oeil) qu'il devrait être possible de réaliser des calculs qui s'adaptent en fonction du tarif de chaque prestataire ?
Je reviens avec mes histoires de sélection et mise à jour en cascades.
J'ai un peu avancé en tatonnant dans mon formulaire. Il s'avère que j'ai eu la bonne ou mauvaise idée de tenter de rajouter des calculs dans mon formulaire et que je souhaite que ces calculs se mettent à jour en cascade en fonction des tarifs des prestataires. J'ai choisi cette méthode car je n'arrivais pas à lier mon F_Dossiers à une requête. Dans les resultats obtenus, soit j'ai des retours de calculs farfelus soit j'ai une erreur de variable non définie que je n'arrive pas à rectifier.
Je ne suis certainement pas le couteau le plus affuté du tirroir et il se pourrait même qu'il n'y ai pas de solution à mon problème. L'idée de ne pas stocké de calculs dans les tables me paraît logique. Pour autant, il me semble (mais je me fourre peut-être le doigt dans l'oeil) qu'il devrait être possible de réaliser des calculs qui s'adaptent en fonction du tarif de chaque prestataire ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.15 sous Windows 10 Famille
-
Rafkus_pl
- Membre lOOyal

- Messages : 35
- Inscription : 23 févr. 2022 11:45
Re: [Base]Selection en cascade depuis plusieurs tables
Je pense que si vous suiviez les recommandations du modérateur :
Le champ date renvoie un objet uniquement dans LibreOffice, tandis que dans OpenOffice, il renvoie du texte. Donc votre fonction "CDateFromUnoDate" ne fonctionnera pas en AOO
J'obtiens la date du champ en utilisant la fonction suivante:
Et il y fait référence ainsi:
Dans votre procédure, j'ai remarqué un autre problème, dans cette ligne :
.COUNT compte ici combien d'éléments sont dans la liste ? Je pense qu'il devrait y avoir :
c'est-à-dire vérifier si un élément de la liste est sélectionné
vous obtiendriez de l'aide beaucoup plus tôt.Bidouille a écrit : ↑18 juin 2024 06:52 Si votre problème évolue ou s'il est complexe, vous devez créer un nouveau fil avec un titre en rapport.
Vous devez penser à ceux qui font des recherches et qui ne s'arrêteront pas ici.
Merci de :
clôturer le présent fil
ouvrir un nouveau sujet avec un titre explicite
mettre un lien entre chaque afin que chacun puisse suivre
Le champ date renvoie un objet uniquement dans LibreOffice, tandis que dans OpenOffice, il renvoie du texte. Donc votre fonction "CDateFromUnoDate" ne fonctionnera pas en AOO
| Ajout : (je ne sais pas pourquoi mais elle a aussi un problème en LIBRE).Dans LO, cette fonction est inutile car elle y existe déjà. |
Code : Tout sélectionner
Function LireDateDuControle(oDateField As Object) As Variant
dim vDate as variant
If oDateField.supportsService("com.sun.star.form.component.DateField") Then
vDate = oDateField.CurrentValue
if IsObject(vDate) then 'LibreOffice
LireDateDuControle = DateSerial(vDate.Year, vDate.Month, vDate.Day)
elseif vDate = empty then
LireDateDuControle = empty 'le champ est vide
MsgBox "Le contrôle """ & oDateField.name & """ n'est pas un champ de date."
else 'OpenOffice
LireDateDuControle = DateSerial(Left(vDate, 4), Mid(vDate, 5, 2), Right(vDate, 2))
endif
Else
MsgBox "Le champ nommé """ & oDateField.name & """ n'est pas un champ de date."
LireDateDuControle = null
End If
End Function Code : Tout sélectionner
Sub CalculerCoutTotal 'ceci est un extrait de votre code
Dim oForm As Object
Dim oDateEntree As Object
Dim dateEntree As Date
' Accéder au formulaire actif
oForm = ThisComponent.DrawPage.Forms.getByName("MainForm")
' Accéder aux champs du formulaire
oDateEntree = oForm.getByName("Date_Entree")
' Vérifier si les contrôles existent et obtenir leurs valeurs
dim var as variant 'variable auxiliaire, doit être de type variante
var = LireDateDuControle(oDateEntree)
if (var = null) or (var = empty) then
exit sub
else
dateEntree = var
MsgBox "Date d'entrée convertie : " & dateEntree
end if
End SubCode : Tout sélectionner
If oTarifJour.SelectedItems.Count > 0 Then Code : Tout sélectionner
If oTarifJour.SelectedItems(0)> 0 Then OpenOffice 4.1.6, LibreOffice 7.1.6 - Widows 10
J'écris avec Google Translator, désolé pour l'orthographe...
J'écris avec Google Translator, désolé pour l'orthographe...
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: [Base]Selection en cascade depuis plusieurs tables
Bonjour,
Je reviens toujours avec mon foutu problème de...je ne sais même plus trop comment appeller ça. Disons, ListesLiées puisque c'est le fil que j'ai trouvé qui correspond le mieux à ce que je chercher a faire. Pour moi, l'important ce n'est pas tant la solution que comprendre son fonctionnement et surtout les erreurs qui empêche le bon fonctionnement de ma base.
Effectivement, j'ai mélangé deux sujets entre celui des ListesLiées et celui des calculs. Je suis allé trop vite et j'ai utilisé des macros et des principes que je ne comprennais pas et cela ne me convient par. Merci beaucoup à Rafkus_pl et aux autres pour leur aide.
Pour revenir au coeur de mon problème, j'ai refait une base simpliée et j'ai suivi les fils suivants :
viewtopic.php?t=14662
et
viewtopic.php?t=4022
Pour autant, ma liste déroulante N_Modele ne se met toujours pas à jour.
Pourtant, il me semble avoir suivi et surtout compris le fonctionnement de la macro. Cependant, elle semble s'executer normalement sans me renvoyer de message d'erreur mais elle ne fonctionne pas. Donc, il y a toujours un truc qui m'echappe et je ne vois pas ou !
Je continu d'essayer de trouver la boulette mais si cela vous saute aux yeux n'hésitez pas.
Merci.
Je reviens toujours avec mon foutu problème de...je ne sais même plus trop comment appeller ça. Disons, ListesLiées puisque c'est le fil que j'ai trouvé qui correspond le mieux à ce que je chercher a faire. Pour moi, l'important ce n'est pas tant la solution que comprendre son fonctionnement et surtout les erreurs qui empêche le bon fonctionnement de ma base.
Effectivement, j'ai mélangé deux sujets entre celui des ListesLiées et celui des calculs. Je suis allé trop vite et j'ai utilisé des macros et des principes que je ne comprennais pas et cela ne me convient par. Merci beaucoup à Rafkus_pl et aux autres pour leur aide.
Pour revenir au coeur de mon problème, j'ai refait une base simpliée et j'ai suivi les fils suivants :
viewtopic.php?t=14662
et
viewtopic.php?t=4022
Pour autant, ma liste déroulante N_Modele ne se met toujours pas à jour.
Pourtant, il me semble avoir suivi et surtout compris le fonctionnement de la macro. Cependant, elle semble s'executer normalement sans me renvoyer de message d'erreur mais elle ne fonctionne pas. Donc, il y a toujours un truc qui m'echappe et je ne vois pas ou !
Je continu d'essayer de trouver la boulette mais si cela vous saute aux yeux n'hésitez pas.
Merci.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.15 sous Windows 10 Famille
-
Rafkus_pl
- Membre lOOyal

- Messages : 35
- Inscription : 23 févr. 2022 11:45
Re: [Base]Selection en cascade depuis plusieurs tables
e vois que vous avez remplacé le fichier de base de données et corrigé les erreurs qu'il contient. Il existe un autre problème avec l'expression SQL décrivant la source des lignes pour un champ de liste donné. Plus précisément, ces deux lignes de code :
L'expression SQL ici est la phrase suivante :
il indique que la source des lignes dans la zone de liste est une table "T_MODELES", la liste est censée afficher les valeurs du champ "Modele", tandis que les valeurs du champ seront saisies dans la table source "Id_Modele". Et la liste doit être limitée par une certaine condition, le champ "Liste_Marque" doit avoir une valeur sélectionnée.Mais la table "T_MODELES" ne contient pas ces champs : "Modele" et "Liste_Marque", remplacez-les par ceux appropriés (ils ont des noms différents).
Code : Tout sélectionner
sFiltre = " WHERE ""Liste_Marque"" = " & Var_Id_Modele
Liste_Modele.ListSource() = array("SELECT ""Modele"", ""Id_Modele"" FROM ""T_MODELES"" " & sFiltre)Code : Tout sélectionner
SELECT ""Modele"", ""Id_Modele"" FROM ""T_MODELES"" WHERE ""Liste_Marque"" = & Var_Id_ModeleOpenOffice 4.1.6, LibreOffice 7.1.6 - Widows 10
J'écris avec Google Translator, désolé pour l'orthographe...
J'écris avec Google Translator, désolé pour l'orthographe...
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: [Base]Selection en cascade depuis plusieurs tables
Merci beaucoup Rafkus_pl pour votre aide qui m'a permis d'avancer et de regler un de mes problèmes.
Cela fonctionne parfaitement pour mon formulaire F_DOSSIERS.
Je touche quasiment au but pour ces soucis de Sélection en cascades ou de listes liées.
Je bute encore sur mon formulaire d'ajout de modèles.
J'ai pris en compte l'exemple suivant :
viewtopic.php?f=29&t=14662
pour filtrer à l'aide d'une macro. Cependant, j'ai supprimé l'option recherche puisqu'elle n'a pas lieu d'être dans ma base (le fait de devoir ajouter un modèle supplémentaire prouve que celui-ci n'existe pas et donc pas besoin de le chercher.
J'ai tant bien que mal (plutôt mal visiblement) la macro "Actualiser" de Pierre-Yves Samyn que je remercie également car même si ce n'est pas encore tout à fait au point, grace à son code, je m'en approche.
Il y a encore quelques bugs dans ma matrice en ce qui concerne le formulaire F_AJ_MODELES.
Tout d'abord, je ne comprends encore pourquoi maintenant j'ai associé la macro, la zone de liste déroulante ne m'affiche plus le nom de la marque sélectionnée mais reste bloqué sur la première marque qui est "AUDI".
Ensuite, j'ai aussi un problème lorsque j'ajoute un modèle dans le sous-formulaire, car (et quelque part c'est relativment logique) il me faut ajouter manuellement l'Id_Marque car celui-ci ne s'intégre pas automatiquement dans mon sous-formulaire.
Pour finir, mais c'est un petit détail comparé au reste, la liste de mes modèles ne se classe pas par ordre alphabétique, mais cela, avec l'aide que m'a apporté Rafkus_pl, je devrais être en mesure de le rectifier ensuite.
J'ai simplifié ma base afin qu'elle soit focalisée sur les Tables et Formulaires nécessaire au départ.
En creusant un peu, je crois que j'ai (j'espère en tout cas) identifié un peu plus le problème.
Soit je créer mon formulaire à partir de la T_MARQUES et dans ce cas, lorsque je veux insérer un contrôle de table, je n'ai à ma disposition que les champs liés à la T_MARQUES
(c'est à dire l'Id_Marque et le N_Marque) or, j'ai besoin dest champs Id_Modele et N_Modele.
Soit je créer mon formulaire à partir de la T_MODELES et dans ce cas mon filtrage sur ma liste de marques ne s'effectue plus.
Soit je créer mon formulaire à partir d'une requête R_Mod_Par_Mark qui me filtre déjà mes modèles en fonction des marques mais dans ce cas, je ne vois pas comment l'opérateur pourrais
ajouter un nouveau modèle dans la liste.
Je continue de creuser !
Cela fonctionne parfaitement pour mon formulaire F_DOSSIERS.
Je touche quasiment au but pour ces soucis de Sélection en cascades ou de listes liées.
Je bute encore sur mon formulaire d'ajout de modèles.
J'ai pris en compte l'exemple suivant :
viewtopic.php?f=29&t=14662
pour filtrer à l'aide d'une macro. Cependant, j'ai supprimé l'option recherche puisqu'elle n'a pas lieu d'être dans ma base (le fait de devoir ajouter un modèle supplémentaire prouve que celui-ci n'existe pas et donc pas besoin de le chercher.
J'ai tant bien que mal (plutôt mal visiblement) la macro "Actualiser" de Pierre-Yves Samyn que je remercie également car même si ce n'est pas encore tout à fait au point, grace à son code, je m'en approche.
Il y a encore quelques bugs dans ma matrice en ce qui concerne le formulaire F_AJ_MODELES.
Tout d'abord, je ne comprends encore pourquoi maintenant j'ai associé la macro, la zone de liste déroulante ne m'affiche plus le nom de la marque sélectionnée mais reste bloqué sur la première marque qui est "AUDI".
Ensuite, j'ai aussi un problème lorsque j'ajoute un modèle dans le sous-formulaire, car (et quelque part c'est relativment logique) il me faut ajouter manuellement l'Id_Marque car celui-ci ne s'intégre pas automatiquement dans mon sous-formulaire.
Pour finir, mais c'est un petit détail comparé au reste, la liste de mes modèles ne se classe pas par ordre alphabétique, mais cela, avec l'aide que m'a apporté Rafkus_pl, je devrais être en mesure de le rectifier ensuite.
J'ai simplifié ma base afin qu'elle soit focalisée sur les Tables et Formulaires nécessaire au départ.
En creusant un peu, je crois que j'ai (j'espère en tout cas) identifié un peu plus le problème.
Soit je créer mon formulaire à partir de la T_MARQUES et dans ce cas, lorsque je veux insérer un contrôle de table, je n'ai à ma disposition que les champs liés à la T_MARQUES
(c'est à dire l'Id_Marque et le N_Marque) or, j'ai besoin dest champs Id_Modele et N_Modele.
Soit je créer mon formulaire à partir de la T_MODELES et dans ce cas mon filtrage sur ma liste de marques ne s'effectue plus.
Soit je créer mon formulaire à partir d'une requête R_Mod_Par_Mark qui me filtre déjà mes modèles en fonction des marques mais dans ce cas, je ne vois pas comment l'opérateur pourrais
ajouter un nouveau modèle dans la liste.
Je continue de creuser !
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.15 sous Windows 10 Famille
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: [Base]Selection en cascade depuis plusieurs tables
Bonjour,
Pour en finir avec mon problème, voici la solution que j'ai fini par adopter et qui fonctionne avec filtrage et boite de dialogues.
Je peux considérer le problème comme résolu.
Cependant,si jamais vous qui êtes bien plus clairvoyant en la matière repérez un souci merci de m'en faire part.
Merci encore pour votre aide.
Pour en finir avec mon problème, voici la solution que j'ai fini par adopter et qui fonctionne avec filtrage et boite de dialogues.
Je peux considérer le problème comme résolu.
Cependant,si jamais vous qui êtes bien plus clairvoyant en la matière repérez un souci merci de m'en faire part.
Merci encore pour votre aide.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.15 sous Windows 10 Famille
-
Rafkus_pl
- Membre lOOyal

- Messages : 35
- Inscription : 23 févr. 2022 11:45
Re: [Résolu][Base]Selection en cascade depuis plusieurs tables
Bonjour.
Au lieu de créer votre propre boîte de dialogue pour saisir une entrée, vous pouvez utiliser la commande InputBox :
https://wiki.openoffice.org/wiki/Docume ... e_Library)
https://wiki.services.openoffice.org/wi ... e_Library)
Au lieu de créer votre propre boîte de dialogue pour saisir une entrée, vous pouvez utiliser la commande InputBox :
Code : Tout sélectionner
InputVal = InputBox ( "Ajouter_Marque", "Ajouter une Marque" )
If InputVal = "" Then
MsgBox "Le nom de la marque ne peut pas être vide."
Exit Sub
End Ifhttps://wiki.services.openoffice.org/wi ... e_Library)
OpenOffice 4.1.6, LibreOffice 7.1.6 - Widows 10
J'écris avec Google Translator, désolé pour l'orthographe...
J'écris avec Google Translator, désolé pour l'orthographe...
-
JimMat
- Membre lOOyal

- Messages : 35
- Inscription : 24 mai 2024 20:28
Re: [Résolu][Base]Selection en cascade depuis plusieurs tables
Génial, merci encore pour l'info.
Je vais me pencher dessus des que possible.
Sinon vous n'avez pas vu de bétises flagrantes autre que cette autre façon de faire les choses ?
Merci mille fois pour votre aide.
Je vais me pencher dessus des que possible.
Sinon vous n'avez pas vu de bétises flagrantes autre que cette autre façon de faire les choses ?
Merci mille fois pour votre aide.
OpenOffice 4.1.15 sous Windows 10 Famille