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 :

Code : Tout sélectionner

Dim BAREME as string
...
BAREME = CtrBareme.CurrentValue
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

Code : Tout sélectionner

on error goto Err_ApresMajBareme
qui devient

Code : Tout sélectionner

'on error goto Err_ApresMajBareme
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 :

Code : Tout sélectionner

Dim BAREME as string
...
BAREME = CtrBareme.CurrentValue
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 :

Code : Tout sélectionner

Dim BAREME as Variant
???

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. :fou:
Trop précipités.
Merci à tous pour votre aide. :super:

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