[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 !

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

Messagepar momidic » 03 Oct 2017 19:19


La modération 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
momidic
Fraîchement OOthentifié
 
Message(s) : 2
Inscrit le : 03 Oct 2017 18:48

Re: [Calc] Afficher un enregistrement particulier

Messagepar Piaf » 04 Oct 2017 13:08

Bonjour et bienvenue sur le Forum
Un petit exemple à adapter
Feuille2.png
Feuille Sans formulaire
Code : Tout sélectionner   AgrandirRéduire
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
Feuille du formulaire
A+
Libre Office Version: Version: 5.3.7 et Apache OpenOffice 4.1.4 Sur Xubuntu 16.04
Piaf
GourOOu
GourOOu
 
Message(s) : 5043
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Calc] Afficher un enregistrement particulier

Messagepar momidic » 06 Oct 2017 16:43

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   AgrandirRéduire
    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
momidic
Fraîchement OOthentifié
 
Message(s) : 2
Inscrit le : 03 Oct 2017 18:48

Re: [Calc] Afficher un enregistrement particulier

Messagepar toucan » 06 Oct 2017 22:58

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.
toucan
MOOdérateur
MOOdérateur
 
Message(s) : 134
Inscrit le : 23 Fév 2016 00:49


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 10 invité(s)