[Résolu][Calc] Afficher un enregistrement particulier

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: 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 !
momidic
Fraîchement OOthentifié
Messages : 2
Inscription : 03 oct. 2017 17:48

[Résolu][Calc] Afficher un enregistrement particulier

Message par momidic »


La modération vous a écrit: avec une macro est inutile car le terme macro est implicite dans cette section du forum

Bonjour,
J'essaie de faire une manip très simple.
J'ai un fichier Calc dans lequel j'ai créé un formulaire Calc qui est lié à une base de donnée.
J'ai quelques cellules sur une autre page que la page du formulaire.
Depuis la page sans formulaire je voudrais pouvoir avec un bouton aller sur la page formulaire et afficher l'enregistrement qui correspond au nom mis dans la cellule.
Pour aller sur la page formulaire j'ai trouvé la manip en utilisant "monDocument.currentController.activeSheet".
Par contre, je ne vois pas comment faire afficher un enregistrement particulier dans le formulaire avec une macro.
C'est sans doute très très simple. Mais impossible de trouver la manip.

En résumé :
Valeur Cellule => Rechercher enregistrement avec cette valeur (il s'agit de la clé de la table) dans la base et afficher le formulaire de Cacl avec cette enregistrement.

Merci pour votre aide.

mom
OpenOffice 4.1.3 sous Windows 10
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Afficher un enregistrement particulier

Message par Piaf »

Bonjour et bienvenue sur le Forum
Un petit exemple à adapter
Feuille2.png

Code : Tout sélectionner

Sub Main
Dim oDoc as Object,oSelection as Object, maFeuille as Object, feuilleForm as Object, oForm as Object
Dim Identifiant as Integer
	oDoc = thisComponent
	maFeuille = oDoc.CurrentController.ActiveSheet
	feuilleForm = oDoc.Sheets.getByName("Feuille1")
	oSelection = oDoc.CurrentSelection
	If oSelection.supportsService("com.sun.star.table.Cell") Then
		If maFeuille.getCellByPosition(0,oSelection.CellAddress.Row).String <> "" Then
			Identifiant = maFeuille.getCellByPosition(0,oSelection.CellAddress.Row).Value
		Else	
			MsgBox("Pas Trouvé d'identifiant dans la cellule A1 de la sélection courante")
			Exit Sub
		End If	
	Else
		MsgBox("Merci de ne sélectionner qu'une cellule")
		Exit Sub
	End If
	oForm = feuilleForm.DrawPage.Forms.getByName("Formulaire")
	With oForm
		.Filter="""IdAd"" =" & Identifiant       
		.Applyfilter = True
		.reload
	End With
	oDoc.CurrentController.ActiveSheet = feuilleForm
End Sub
FeuilleForm.png
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
momidic
Fraîchement OOthentifié
Messages : 2
Inscription : 03 oct. 2017 17:48

Re: [Calc] Afficher un enregistrement particulier

Message par momidic »

Un grand merci Piaf !
C'est exactement ce que je cherchais.
J'ai modifié de la manière suivante de manière à pouvoir sélectionner directement le nom qui intéresse :

Code : Tout sélectionner

    Sub Main
    Dim oDoc as Object,oSelection as Object, maFeuille as Object, feuilleForm as Object, oForm as Object
    Dim Identifiant as String
       oDoc = thisComponent
       maFeuille = oDoc.CurrentController.ActiveSheet
       feuilleForm = oDoc.Sheets.getByName("Feuille1")
       oSelection = oDoc.CurrentSelection
       If oSelection.supportsService("com.sun.star.table.Cell") Then
          If oSelection.String <> "" Then
             Identifiant = oSelection.String
          Else   
             MsgBox("Pas Trouvé d'identifiant dans la cellule A1 de la sélection courante")
             Exit Sub
          End If   
       Else
          MsgBox("Merci de ne sélectionner qu'une cellule")
          Exit Sub
       End If
       oForm = feuilleForm.DrawPage.Forms.getByName("Formulaire")
       With oForm
          .Filter="""Nom"" =" & " '" & Identifiant & "'"
          .Applyfilter = True
          .reload
       End With
       oDoc.CurrentController.ActiveSheet = feuilleForm
    End Sub

J'ai découvert la méthode .Applyfilter sur les formulaires et du coup aussi .Order qui s'avère très pratique pour trier lorsque nécessaire les réponses s'il y en a plusieurs.

Merci encore pour ta réactivité
OpenOffice 4.1.3 sous Windows 10
toucan
MOOdérateur
MOOdérateur
Messages : 182
Inscription : 22 févr. 2016 23:49

Re: [Calc] Afficher un enregistrement particulier

Message par toucan »

Bonsoir

Il semble que votre question ait trouvé une solution. Il faut alors ajouter dans le titre du premier message la balise [Résolu]. Ceci augmente la lisibilité du forum. Vous vous en êtes sûrement rendu compte en parcourant les différents fils de discussion.

Nous l'avons fait à votre place mais la prochaine fois, nous vous prions de le faire.

Merci de respecter la syntaxe [Résolu] : entre crochets, avec un R majuscule et un é. Cette balise est à placer au début du titre. Il faut également cocher la case de l'icône de sujet (le V vert).

Suivez ce sujet pour savoir comment procéder : https://forum.openoffice.org/fr/forum/ftopic3299.html

Merci de votre collaboration pour nous faciliter le travail de modération de ce forum.

Si nous avons fait une erreur, il vous suffit d'enlever de la même manière la balise. Il vous faudra bien sûr donner suite aux réponses proposées.