[Base] Gestion des inscriptions et compagnie

Discussions sur les projets et applications développés en liaison avec une suite bureautique libre.

Modérateur : Vilains modOOs

Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Base] Gestion des inscriptions et compagnie

Message par Piaf »

Bonjour
Un petit exemple à tester
Clément054 a écrit : mon problème consiste à actualiser les informations afficher après avoir sélectionné un élève dans un liste déroulante.

Code : Tout sélectionner

Sub Afficher(oEv as Object)
Dim oForm as Object, Valeur as Variant
	oForm = oEv.Source.Model.Parent
	Valeur = oEv.Source.Model.CurrentValue
	With oForm
		.Filter="""NomComplet"" ='" & Valeur & "'"        
		.Applyfilter = True
		If  .isloaded = False Then
			.load
		Else
			.reload
		End If
	End With
	thisComponent.CurrentController.getControl(oForm.getByName("txtNom")).setFocus
	oEv.Source.Model.SelectedItems = Array()	
End Sub
Pour les formulaires Consultation - informations eleves et Modification - Informations Eleves.
Un peu plus compliqué pour le formulaire Modification - Inscriptions et locations.

Code : Tout sélectionner

Sub Filtre (oEv as Object)
Dim oForm as Object
Dim strEleve as String, intEleve as Integer, strAnnee as String, intAnnee as Integer
	oForm = oEv.Source.Model.Parent
	Select Case oEv.Source.Model.Name
		Case "supFiltre"
			With oForm
				.getByName("lstEleves").SelectedItems = Array()
				.getByName("lstAnnees").SelectedItems = Array()
				.Applyfilter = False
			End With	
		Case Else
		strEleve = oForm.getByName("lstEleves").CurrentValue
		strAnnee = oForm.getByName("lstAnnees").CurrentValue
		If strEleve = "" Or strAnnee = "" Then
			MsgBox "Les deux contrôles de filtrage doivent être renseignés"
			Exit Sub	
		End If
		intEleve = RecupererIdentifiant("rEleves","ID_Eleves","NomComplet",strEleve)
		intAnnee = RecupererIdentifiant("Années","ID_Annee","Année",strAnnee)
		oForm.Filter = """ID_Eleves"" =" & intEleve & " AND ""ID_Annee"" = " & intAnnee
		oForm.Applyfilter = True
	End Select
	oForm.Reload
End Sub
A+
Pièces jointes
Inscriptions Ecole de Musique - Copie.odb
(91.24 Kio) Téléchargé 205 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Clément054
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 24 nov. 2016 14:03

Re: [Base] Gestion des inscriptions et compagnie

Message par Clément054 »

Bonjour,

Merci beaucoup, c'est tout à fait ce que je voulais et ça marche bien.

Cependant, est-ce que tu pourrais m'expliquer rapidement ton code stp ?
J'aimerais créer d'autres formulaires avec des filtres du même genre sans avoir besoin de vous redemander la même chose plusieurs fois. Par exemple un formulaire qui affiche la liste des élèves dans une classe donnée par année, avec une liste pour sélectionner la classe, une seconde pour sélectionner l'année.

J'imagine que le code restera globalement le même, il faudra juste changer quelques variables ? Mais lesquelles...

Encore merci,
Clément
Windows 7 ; OpenOffice 4.1.3
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Base] Gestion des inscriptions et compagnie

Message par Piaf »

Bonsoir
Les deux cas sont différents.
Une petite précision, dans AOO, les listes déroulantes non affectées à un champ de la table ne permettent pas d'afficher un valeur et d'en récupérer une autre.
  • Pour la première procédure :
    la liste déroulante (elle n'est affectée à aucun champ de la table) affiche le nom complet des élèves.
    La même donnée existe dans la requête sur laquelle le formulaire est basé.
    Il suffit donc de filtrer le jeux d'enregistrement du formulaire avec la valeur sélectionnée dans la liste.
    Le code commenté :

    Code : Tout sélectionner

    Sub Afficher(oEv as Object)
    Dim oForm as Object, Valeur as Variant
    'oEv est l'événement qui déclenche la macro
    'oEv.Source.Model est le modèle du contrôle qui déclenche l'événement
    'Le parent du modèle, donc le formulaire
    	oForm = oEv.Source.Model.Parent
    	'La valeur sélectionnée dans la liste
    	Valeur = oEv.Source.Model.CurrentValue
    	'Application du filtre
    	With oForm
    		.Filter="""NomComplet"" ='" & Valeur & "'"        
    		.Applyfilter = True
    		'Recharchement du formulaire filtré
    		If  .isloaded = False Then
    			.load
    		Else
    			.reload
    		End If
    	End With
    	'Mise du focus sur le champ Nom
    	thisComponent.CurrentController.getControl(oForm.getByName("txtNom")).setFocus
    	'Suppression de la sélection dans la liste
    	oEv.Source.Model.SelectedItems = Array()	
    End Sub
  • Pour la seconde procédure :
    Dans ce cas, les listes (toujours pas affectées à des champs de la table) affichent le nom complet des élèves et la saison.
    Ces valeurs n'existent pas dans la table sous-jacente au formulaire, la table ne stocke que les identifiants.
    Le but de la fonction RecupererIdentifiant est de récupérer ces identifiant en lui donnant les paramètres qui vont bien.
    Une fois les identifiants récupérés, le principe est le même, il suffit de filtrer le jeux d'enregistrement avec les valeurs récupérées.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Répondre