[Résolu] [Calc] Rechercher dans autre fichier avec filtres

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] Rechercher dans autre fichier avec filtres

Messagepar calcul » 30 Mai 2019 16:33

Salutations ,

J'ai le fichier 2 qui a un filtre automatique dans la colonne A . ce fichier 2 est enregistré dans le chemin suivant :
C:\Users\Catilene\Documents\Teste\Teste1\Teste2

J'ai le fichier 1 avec les valeurs dans la colonne A pour rechercher le fichier 2 .

Si vous trouvez la valeur dans la colonne A du fichier 2, vous devez annoncer la valeur correspondante qui est situé dans la colonne B du fichier 2 .

Si vous ne pouvez pas trouver la valeur dans la colonne A du fichier 2, vous pouvez alors entrer un message qui n'a pas trouvé la valeur .

observation:

Besoin de ne regarder que les cellules visibles dans la colonne A du fichier 2 .

Cette recherche peut être soit une Macro, soit une fonction, les deux options ils vont m'aider .

suit le fichier 1 et le fichier 2 .
Pièces jointes
fichier_1.ods
(9.06 Kio) Téléchargé 10 fois
fichier_2.ods
(12.85 Kio) Téléchargé 12 fois
Dernière édition par calcul le 31 Mai 2019 17:18, édité 1 fois.
LibreOffice 5.4.4.2 et Windows 7
calcul
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 86
Inscrit le : 04 Déc 2018 12:06

Re: [Calc] Rechercher dans un autre fichier avec des filtres

Messagepar Piaf » 30 Mai 2019 20:35

Bonjour
Tu peux tester
Code : Tout sélectionner   AgrandirRéduire
Option Explicit
Sub Main(oEv as Object)
Dim oDoc as Object, oDoc1 as Object, maFeuille as Object, oCurseur as Object, maZone as Object, jeCherche As Object
Dim Cherche as Variant, Adresse as String, y as Long, trouv As Variant
Dim Arg(0) As New com.sun.star.beans.PropertyValue
   If oEv.supportsService("com.sun.star.table.Cell") And oEv.cellAddress.Column = 0 Then
      Cherche = oEv.Value
   Else
      Exit Sub   
   End If
   Arg(0).Name = "Hidden"
   Arg(0).Value = True
   oDoc = thisComponent
   adresse = convertToURL("C:\Users\Catilene\Documents\Teste\Teste1\Teste2)
   oDoc1 = StarDesktop.LoadComponentFromURL(Adresse, "_default", 0, Arg())
   maFeuille = oDoc1.Sheets.getByName("Planilha1")
   oCurseur = maFeuille.createCursor
   oCurseur.gotoEndOfUsedArea(False)
   y = oCurseur.RangeAddress.EndRow
   maZone = maFeuille.getCellRangeByPosition(0,1,0,y)
   jeCherche = maZone.createSearchDescriptor
   With jeCherche
      .SearchString = Cherche
      .SearchWords = True
   end with
   trouv = maZone.findFirst(jeCherche)
   If not isNull(trouv) Then
      oDoc.CurrentController.ActiveSheet.getCellByPosition(1,oEv.cellAddress.Row).String = maFeuille.getCellByPosition(1,trouv.cellAddress.Row).String
   Else
      oDoc.CurrentController.ActiveSheet.getCellByPosition(1,oEv.cellAddress.Row).String = "?????"   
   End If
   oDoc1.Close(True)   
End Sub
La macro est déclenchée par l'événement Contenu modifié de la feuille Planilha1 du fichier_1.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5622
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Calc] Rechercher dans un autre fichier avec des filtres

Messagepar calcul » 30 Mai 2019 22:52

salutations sr. Piaf ,

votre idée était très bonne lors de la construction de cette macro . :super:

mais je dois modifier certaines choses dans la macro pour que cela fonctionne parfaitement .


premier problème:

mon fichier 2 est déjà ouvert. Ainsi, lorsque je modifie la valeur de la colonne A du fichier 1, la macro positionne le curseur dans le fichier 2, c'est-à-dire que le curseur passe au fichier 2 .

J'aimerais rester dans le fichier 1, c'est-à-dire que le curseur est positionné dans le fichier 1 .


deuxième problème:

les valeurs de la colonne A du fichier 1 seront collées manuellement par moi. Ainsi, lorsque j'ai essayé de coller plusieurs valeurs, c'est-à-dire que j'ai essayé de coller trois valeurs en même temps, la macro ne fonctionnait donc pas .

est-il possible de faire fonctionner la macro pour plus d'une valeur à la fois, par exemple, si je colle dans la colonne A du fichier 1 trois valeurs ou même plus de trois valeurs à la fois, il est également possible que la macro fonctionne pour plusieurs valeurs en même temps ?


suit le fichier 1 avec sa macro déjà insérée .
Pièces jointes
fichier_1.ods
(11.31 Kio) Téléchargé 13 fois
LibreOffice 5.4.4.2 et Windows 7
calcul
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 86
Inscrit le : 04 Déc 2018 12:06

Re: [Calc] Rechercher dans un autre fichier avec des filtres

Messagepar Piaf » 31 Mai 2019 13:53

Bonjour
Tu peux tester
Code : Tout sélectionner   AgrandirRéduire
Option Explicit

Dim oDoc1 as Object

Sub FichierOuvert
On Error Resume Next
Dim vComponents As Object, vDocs As Object, vDoc As Object
Dim Adresse As String
   vComponents = StarDesktop.getComponents()
   vDocs = vComponents.createEnumeration()
   Do While vDocs.hasMoreElements()
      vDoc = vDocs.nextElement()
      If vDoc.Title = "fichier_2.ods" Then
         oDoc1 = vDoc
         Exit Do
      Else
         adresse = convertToURL("C:\Users\Catilene\Documents\Teste\Teste1\Teste2")
         oDoc1 = StarDesktop.LoadComponentFromURL(Adresse, "_default", 0, Array())
      End If
   Loop
End Sub

Sub Main(oEv as Object)
Dim oDoc as Object, Feuille as Object,fenetre as Object
Dim i as Integer, Cherche as Variant
   oDoc = thisComponent
   Feuille = oDoc.CurrentController.ActiveSheet
   If oEv.SupportsService("com.sun.star.table.CellRange") Then
      If oEv.RangeAddress.EndColumn = 0 Then
            If isNull(oDoc1) Then FichierOuvert
         For i = oEv.RangeAddress.StartRow To oEv.RangeAddress.EndRow
            Cherche = Feuille.getCellByPosition(0,i).Value
            Feuille.getCellByPosition(1,i).String = Recherche(cherche)
         Next i   
      End If
   ElseIf oEv.supportsService("com.sun.star.table.Cell") Then
      If   oEv.cellAddress.Column = 0 Then
         If isNull(oDoc1) Then FichierOuvert
         Cherche = oEv.Value
         Feuille.getCellByPosition(1,oEv.cellAddress.Row).String = Recherche(Cherche)
      End If
   Else
      Exit Sub   
   End If
   fenetre = oDoc.CurrentController.Frame.ContainerWindow
   fenetre.toFront
End Sub

Function Recherche(Valeur as Variant) as String
Dim maFeuille as Object, oCurseur as Object, maZone as Object, jeCherche As Object
Dim y as Long, trouv As Variant
   maFeuille = oDoc1.Sheets.getByName("Planilha1")
   oCurseur = maFeuille.createCursor
   oCurseur.gotoEndOfUsedArea(False)
   y = oCurseur.RangeAddress.EndRow
   maZone = maFeuille.getCellRangeByPosition(0,1,0,y)
   jeCherche = maZone.createSearchDescriptor
   With jeCherche
      .SearchString = Valeur
      .SearchWords = True
   end with
   trouv = maZone.findFirst(jeCherche)
   If not isNull(trouv) Then
      Recherche = maFeuille.getCellByPosition(1,trouv.cellAddress.Row).String
   Else
      Recherche = "?????"
   End If      
End Function
cherche.gif
Cliquer pour l'animation
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5622
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

[Résolu] [Calc] Rechercher dans autre fichier avec des filtr

Messagepar calcul » 31 Mai 2019 17:15

merci beaucoup sr. Piaf ,

c'est exactement ce que je cherchais, fonctionne parfaitement . :bravo: :bravo:

Merci pour votre aide précieuse . :super:


un gros câlin . :super:
LibreOffice 5.4.4.2 et Windows 7
calcul
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 86
Inscrit le : 04 Déc 2018 12:06


Retour vers Macros et API

Qui est en ligne ?

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