Page 1 sur 1

[Résolu][Calc] Recherche avec Occurrences multiples

Publié : 24 mai 2018 07:37
par boulauventre
Bonjour à tous :wink:


Je me tourne vers vous après multiples recherches sans résultat.

Je souhaite faire une recherche selon un critère et que le resultat me sorte toutes les occurences de ce critère. Je pensais utiliser la fonction macro recherche avec une boucle mais le resultat n'est pas au rendez vous. Auriez vous une piste à me donner ?

Merci d'avance !!

Voici le code

Code : Tout sélectionner

Sub NumVide
Dim oFuncAcces As Object
Dim Matrice As variant, Valeur As String
Dim Recherche As variant
Dim Args1 as variant
Dim i as Variant

		monDocument = ThisComponent
    	lesFeuilles = monDocument.Sheets
    	maFeuille = lesFeuilles.getByName("StockA")
    	maCellule = maFeuille.getCellRangeByName("A20")
    	i = maCellule.Value	
    	
    For x = 1 to i

	oFuncAcces = CreateUnoService("com.sun.star.sheet.FunctionAccess")
		Valeur = ThisComponent.sheets.getByName("StockA").GetCellRangeByName( "G1" ).String
		Matrice = ThisComponent.sheets.getByName("StockA").GetCellRangeByName("A" & x & ":B10")
		Args1 = array(Valeur,Matrice,2,0)
		Recherche = oFuncAcces.callFunction("VLOOKUP",Args1 )
	
		ThisComponent.sheets.getByName("StockA").GetCellRangeByName("E" & x).Value = Recherche & x
		
		Print "Les numéros vides sont " & Recherche & x
		
	Next x
End Sub
Et le fichier test en PJ :super:

Re: [Calc] Recherche avec Occurrences multiples

Publié : 24 mai 2018 10:14
par DLE
Bonjour,

Une proposition de solution à valider.

Code : Tout sélectionner

Sub Main
Dim oDoc As Object
Dim oFeuilles As Object
Dim oStockA As Object

	oDoc = ThisComponent
	oFeuilles = oDoc.sheets
	oStockA = oFeuilles.getByName("StockA")
	
	oPlage = oStockA.getCellRangeByName("A1:B10")
	oCherche = oPlage.createSearchDescriptor
	with oCherche
		.SearchString = oStockA.getCellRangeByName("G1").string
		.SearchWords = False
	end with
	resultat = oPlage.findFirst(oCherche)
	x = 0
	do until isNull(resultat)
		oStockA.getCellByPosition(4, x).value = resultat(x).RangeAddress.startRow + 1 ' pour  N° ligne
		oStockA.getCellByPosition(5, x).value = oStockA.getCellByPosition(1,resultat(x).RangeAddress.startRow).value 'pour valeur colonne "B"		
		resultat = oPlage.findNext(resultat, oCherche)
		x = x + 1
	loop

End Sub

Re: [Calc] Recherche avec Occurrences multiples

Publié : 24 mai 2018 10:56
par boulauventre
Salut DLE et Merci pour ton aide.

Ta solution est presque parfaite :mrgreen:

Je souhaiterais juste pouvoir afficher par une PrintBox les resultats.

Du genre :

Les numéros vides sont :

1 7

3 8

5

.

Je pourrais faire une selection pour chaque case mais si il y a 150 numéros VIDE, ce serait imbuvable.

Re: [Calc] Recherche avec Occurrences multiples

Publié : 24 mai 2018 11:20
par DLE
Re,

Dans le msgBox tu veux le N° de ligne ou la valeur de la colonne "B" ou les deux?

Re: [Calc] Recherche avec Occurrences multiples

Publié : 24 mai 2018 11:48
par boulauventre
Re,

Plutôt la Valeur de la colonne B :bravo: :bravo:

Re: [Calc] Recherche avec Occurrences multiples

Publié : 24 mai 2018 13:24
par Piaf
Bonjour
A tester

Code : Tout sélectionner

Sub Main
Dim oDoc As Object
Dim oFeuilles As Object
Dim oStockA As Object

   oDoc = ThisComponent
   oFeuilles = oDoc.sheets
   oStockA = oFeuilles.getByName("StockA")
   
   oPlage = oStockA.getCellRangeByName("A1:B10")
   oCherche = oPlage.createSearchDescriptor
   with oCherche
      .SearchString = oStockA.getCellRangeByName("G1").string
      .SearchWords = False
   end with
   resultat = oPlage.findFirst(oCherche)
   x = 0
   do until isNull(resultat)
      oStockA.getCellByPosition(4, x).value = resultat(x).RangeAddress.startRow + 1 ' pour  N° ligne
      txt = txt & oStockA.getCellByPosition(1,resultat(x).RangeAddress.startRow).value & Chr(13) 'pour valeur colonne "B"      
      resultat = oPlage.findNext(resultat, oCherche)
      x = x + 1
   loop
MsgBox("Valeur Colonne B Correspondant à VIDE dans la Colonne A" & Chr(13) & txt)
End Sub
A+

Re: [Calc] Recherche avec Occurrences multiples

Publié : 24 mai 2018 15:54
par boulauventre
Salut Piaf,

Merci pour ton aide, c'est exactement ce que je cherchais !! :bravo: :super:

Pour ma compréhension, je ne comprends pas comment la variable Txt s'incrémente dans la boite de dialogue. Car la variable Txt ne peux valoir qu'un nombre à la fois non ?

( Je ne sais pas si je suis clair :tesfou: :tesfou: )

Merci à vous deux en tout cas ;)


Bonne soirée

Re: [Résolu][Calc] Recherche avec Occurrences multiples

Publié : 24 mai 2018 16:16
par Piaf
Re
boulauventre a écrit :je ne comprends pas comment la variable Txt s'incrémente dans la boite de dialogue.

Code : Tout sélectionner

txt = txt & ..... & Crh(13
On reprend le texte existant et l'on ajoute les nouvelles valeurs au fur et à mesure de l'itération de la boucle.
A+

Re: [Résolu][Calc] Recherche avec Occurrences multiples

Publié : 24 mai 2018 18:41
par boulauventre
Super c'est clair maintenant merci Piaf :super:

Bonne soirée

Boulauventre