[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 !
calcul
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 04 déc. 2018 11:06

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

Message par calcul »

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 .
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par calcul le 31 mai 2019 16:18, modifié 1 fois.
LibreOffice 5.4.4.2 et Windows 7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

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

Message par Piaf »

Bonjour
Tu peux tester

Code : Tout sélectionner

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
calcul
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 04 déc. 2018 11:06

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

Message par calcul »

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 .
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 5.4.4.2 et Windows 7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

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

Message par Piaf »

Bonjour
Tu peux tester

Code : Tout sélectionner

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
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
calcul
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 04 déc. 2018 11:06

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

Message par calcul »

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