Page 1 sur 1
[Résolu][Base] Rafraîchir une zone de liste cascadée
Publié : 20 juin 2014 07:55
par Michael6505
Bonjour,
Je souhaite rafraîchir une zone de liste partir d'une autre zone de liste.
En choisissant un code dans la première (
Barême) , je rafraîchis la seconde (
Brut_Annuel) qui me donne les différents salaires bruts annuel non indexés.
A partir du choix que je ferai dans la seconde liste (
Brut_Annuel), je mettrai à jour les champs
Brut_Annuel_indexé et
Brut_Mensuel_Indexé.
Enfin, dés que j'aurai choisi le nombre de périodes que l'agent a travaillé (Nombre_Période), il doit faire apparaître le Brut_Imposable_Intérim (salaire brut que touche l'agent).
Pour essayé de trouver la solution, j'ai créé une Table avec les index et les différents salaire, et un Formulaire Index.
Voici le formulaire :
FormulaireIndex.jpg
Voici la macro que j'utilise pour rafraîchir la zone de liste Brut_Annuel à partir de la zone de liste Barême, et je ne vois pas la raison pour laquelle cella ne fonctionne pas :
Code : Tout sélectionner
Sub ApresMajBareme
Dim CtrBareme as Object , CtrBrutAnnuel AS Object
Dim BAREME as string
on error goto Err_ApresMajBareme
CtrBareme = ThisComponent.drawpage.Forms("FormulaireDesIndex").getByName("fmtBarême")
CtrBrutAnnuel = ThisComponent.drawpage.Forms("FormulaireDesIndex").getByName("fmtBrut_Annuel")
BAREME = CtrBareme.CurrentValue
CtrBrutAnnuel.ListSource() = array("SELECT Brut_Annuel FROM TableDesIndex WHERE Barême ='" & BAREME & "'")
CtrBrutAnnuel.refresh
Exit_ApresMajBareme:
Exit sub
Err_ApresMajBareme:
msgbox error
Resume Exit_ApresMajBareme
End sub
Voici la Base :
Nouvelle base de données Index.odb
Merci pour votre aide.
Re: [BASE] Macro pour Rafraîchir zone de liste
Publié : 20 juin 2014 08:34
par Bidouille
Pour la bonne tenue de ce forum, veillez à :
- ne pas inventer et respecter la syntaxe des balises : http://forum.openoffice.org/fr/forum/ftopic1369.html
Le balisage doit bien sûr être correctement orthographié (première lettre en majuscule puis le reste en minuscules)
- ne pas employer le terme "macro" dans un titre puisque vous êtes dans la section... Macros.
Re: [Base] Rafraîchir une zone de liste cascadée
Publié : 20 juin 2014 08:37
par Michael6505
Bonjour,
Désolé j'ai mieux compris le balisage...
Bonne journée.
Re: [Base] Rafraîchir une zone de liste cascadée
Publié : 20 juin 2014 09:08
par Dude
Salut,
Déjà, pour inspecter du code, on évite d'empêcher l'affichage d'erreur.
Ensuite, je lis rapidement ceci :
Rien ne te choque ?
Re: [Base] Rafraîchir une zone de liste cascadée
Publié : 20 juin 2014 09:52
par Michael6505
Bonjour,
Désolé, j'utilise OpenOffice depuis peu de temps, et donc, je ne sais pas comment activé l'affichage d'erreur.
Ensuite, je pense comprendre que j'aurais mal déclaré ma variable.
Cette macro je suis allé la chercher en faisant une recherche sur le Forum d'OpenOffice et j'ai essayé de l'adapter.
La raison pour laquelle je demande de l'aide.
Merci
Re: [Base] Rafraîchir une zone de liste cascadée
Publié : 20 juin 2014 10:24
par SPPP
Pour pour voir les erreurs, il faut commenter la ligne
qui devient
Si il y a une erreur, elle va s'afficher, car comme sont nom l'inquide, la fonction "on error goto" implique qu'en cas d'erreur, le programme execute une autre macro.
COOrdialement,
SPPP.
Re: [Base] Rafraîchir une zone de liste cascadée
Publié : 20 juin 2014 12:19
par Michael6505
Bonjour,
Merci pour cet info que je connaissais mais pour laquelle je n'ai pas fait attention.
Par contre mon erreur s'arrête sur la ligne suivante :
Code : Tout sélectionner
CtrBareme = ThisComponent.drawpage.Forms("FormulaireDesIndex").getByName("fmtBarême")
Je ne vois pas l'erreur.
Ensuite, Dude me dit que quelque chose doit choquer dans ceci :
Si c'est la manière dont je déclare ma variable, sinon je ne vois pas.
J'ai essayé en la déclarant comme ceci :
???
Merci
Re: [Base] Rafraîchir une zone de liste cascadée
Publié : 20 juin 2014 13:02
par DLE
Bonjour,
La colonne "Barême" est définie en tant que numérique, "BAREME" dans la macro sera défini en tant qu'Integer.
Le code SQL dans "AprèsMajBareme" n'est pas correctement écrit, le nom de la colonne et de la table doit être entre double guillemets. Distinct permet de ne récupérer qu'une seule valeur en cas de double.
Code : Tout sélectionner
CtrBrutAnnuel.ListSource() = array("SELECT DISTINCT ""Brut_Annuel"" FROM ""TableDesIndex"" WHERE ""Barême"" ='" & BAREME & "'")
A+
Re: [Base] Rafraîchir une zone de liste cascadée
Publié : 20 juin 2014 13:02
par Piaf
Bonjour
Pas bien compris ton principe, ton formulaire et ses contrôles sont basés sur la table
TableDesIndex.
Je pense que cette table est une table de référence à ne pas modifier mais qui est utilisée pour fournir des valeurs.
Ton formulaire devrait donc être basé sur une autre table et récupérer les données dans la table de référence.
Un petit exemple en fonction de ce que j'ai compris.
Je te laisse le plaisir de finir pour le champ BrutImposable
Code : Tout sélectionner
Sub ApresMajBareme(oEv as Object)
Dim CtrBareme as Object , CtrBrutAnnuel AS Object
Dim BAREME as Double
CtrBrutAnnuel = ThisComponent.drawpage.Forms("FormulaireDesIndex").getByName("fmtBrut_Annuel")
BAREME = oEv.Source.SelectedItem
CtrBrutAnnuel.ListSource() = array("SELECT DISTINCT ""Brut_Annuel"" FROM ""TableDesIndex"" WHERE ""Barême"" =" & BAREME )
CtrBrutAnnuel.refresh
End sub
Sub ApresMajBrutAnnuel(oEv as Object)
Dim oForm as Object,CtrBAI as Object,CtrBMI as Object,Bareme as Double, BA as Double
Dim maRequete As Object, resultat As Object, maConnexion As Object
Dim strSQL As String
oForm = oEv.Source.Model.Parent
CtrBAI = oForm.getByName("fmtBrut_Annuel_Indexé")
CtrBMI = oForm.getByName("fmtBrut_Mensuel_Indexé")
Bareme = oForm.getByName("fmtBarême").CurrentValue
BA = oEv.Source.SelectedItem
maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
strSQL = "SELECT DISTINCT ""Brut_Annuel_Indexé"" , ""Brut_Mensuel"" FROM ""TableDesIndex"" WHERE ""Barême"" = " & Bareme & " AND ""Brut_Annuel"" = " & BA
maRequete = maConnexion.createStatement()
resultat = maRequete.executeQuery(strSQL)
With resultat
.Next
CtrBAI.EffectiveValue = .Columns(0).Double
CtrBMI.EffectiveValue = .Columns(1).Double
End With
CtrBAI.Commit
CtrBMI.Commit
maRequete.Dispose
End Sub
Re: [Base] Rafraîchir une zone de liste cascadée
Publié : 20 juin 2014 13:45
par Michael6505
Bonjour,
Merci effectivement c'est cela le code renvoie les bonnes données.
Je vais regarder pour finaliser le salaire brut mensuel et reviens en bien ou en mal.
Bonne journée
Re : [Base] Rafraîchir une zone de liste cascadée
Publié : 04 juil. 2014 08:23
par mimi6505
Bonjour,
Désolé pour cette réponse tardive et encore merci pour le code.
Très bon résultat avec des données numériques.
J'ai essayé ce code avec de valeurs alphabétiques, mais il renvoie une zone de liste vide.
Il semble que ce soit la méthode drawpage qui cause problème.
J'ai cherché dans les différents fils, mais je ne vois pas pourquoi.
La méthode pour rafraîchir des données numériques ou alphabétique est elle différentes ?
Voici l'exemple de code :
Code : Tout sélectionner
Sub ApresMajSignature(oEv as Object)
Dim CtrBareme as Object , CtrAttribution AS Object
Dim Echevins as Double
CtrAttribution = ThisComponent.drawpage.Forms("FormulaireEchevins").getByName("ListeAttributions")
Echevins = oEv.Source.SelectedItem
CtrAttribution.ListSource() = array("SELECT DISTINCT ""Attributions"" FROM ""TableEchevins"" WHERE ""Signature_Echevin"" =" & Echevins )
CtrAttribution.refresh
End sub
J'ai créé une petite base pour montrer l'exemple suite au code que Bidouille m'a transmis et je l'en remercie à nouveau.
La voici :
TestRafraichirZoneListe.odb
Un grand merci.
Re: [Base] Rafraîchir une zone de liste cascadée
Publié : 04 juil. 2014 09:12
par Oukcha
Bonjour,
Comme en atteste les adresses IP, Michael6505 et mimi6505 étant visiblement les mêmes personnes, merci de poster sur un pseudo unique, afin de ne pas avoir un fil sans queue ni tête (1 posteur = 1 sujet,
règle n° 7).
mimi6505 a écrit :J'ai créé une petite base pour montrer l'exemple suite au code que Bidouille m'a transmis
Visiblement, la gestion des pseudonymes est délicate, car Bidouille n’a transmis aucune pièce jointe...
Cordialement
Re: [Base] Rafraîchir une zone de liste cascadée
Publié : 04 juil. 2014 09:43
par DLE
Bonjour,
La colonne "Echevins" est de format alphabétique, sa définition dans la macro doit être de type "String" et non "Double".
L'ordre SQL est modifié en conséquence.
A+
[Résolu] Rafraîchir une zone de liste cascadée
Publié : 04 juil. 2014 10:03
par mimi6505
Bonjour,
Un grand merci.
J'ai oublié de vérifier mes variables.
Trop précipités.
Merci à tous pour votre aide.
Bonne journée.
[Résolu] Rafraîchir une zone de liste cascadée
Publié : 04 juil. 2014 10:04
par mimi6505
Michael6505 a écrit :Bonjour,
Je souhaite rafraîchir une zone de liste partir d'une autre zone de liste.
En choisissant un code dans la première (
Barême) , je rafraîchis la seconde (
Brut_Annuel) qui me donne les différents salaires bruts annuel non indexés.
A partir du choix que je ferai dans la seconde liste (
Brut_Annuel), je mettrai à jour les champs
Brut_Annuel_indexé et
Brut_Mensuel_Indexé.
Enfin, dés que j'aurai choisi le nombre de périodes que l'agent a travaillé (Nombre_Période), il doit faire apparaître le Brut_Imposable_Intérim (salaire brut que touche l'agent).
Pour essayé de trouver la solution, j'ai créé une Table avec les index et les différents salaire, et un Formulaire Index.
Voici le formulaire :
FormulaireIndex.jpg
Voici la macro que j'utilise pour rafraîchir la zone de liste Brut_Annuel à partir de la zone de liste Barême, et je ne vois pas la raison pour laquelle cella ne fonctionne pas :
Code : Tout sélectionner
Sub ApresMajBareme
Dim CtrBareme as Object , CtrBrutAnnuel AS Object
Dim BAREME as string
on error goto Err_ApresMajBareme
CtrBareme = ThisComponent.drawpage.Forms("FormulaireDesIndex").getByName("fmtBarême")
CtrBrutAnnuel = ThisComponent.drawpage.Forms("FormulaireDesIndex").getByName("fmtBrut_Annuel")
BAREME = CtrBareme.CurrentValue
CtrBrutAnnuel.ListSource() = array("SELECT Brut_Annuel FROM TableDesIndex WHERE Barême ='" & BAREME & "'")
CtrBrutAnnuel.refresh
Exit_ApresMajBareme:
Exit sub
Err_ApresMajBareme:
msgbox error
Resume Exit_ApresMajBareme
End sub
Voici la Base :
Nouvelle base de données Index.odb
Merci pour votre aide.
Re: [Base] Rafraîchir une zone de liste cascadée
Publié : 04 juil. 2014 12:45
par Bidouille
Vous citez les messages n'importe comment et ne tenez aucun compte de ce que vous dit la modération.
Oukcha a écrit :Comme en atteste les adresses IP, Michael6505 et mimi6505 étant visiblement les mêmes personnes, merci de poster sur un pseudo unique
Je ferme le sujet ainsi que le compte le plus récent :
Michael6505