Page 1 sur 1

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

MessagePublié: 24 Mai 2018 08: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   AgrandirRéduire
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

MessagePublié: 24 Mai 2018 11:14
par DLE
Bonjour,

Une proposition de solution à valider.
Code : Tout sélectionner   AgrandirRéduire
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

MessagePublié: 24 Mai 2018 11: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

MessagePublié: 24 Mai 2018 12: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

MessagePublié: 24 Mai 2018 12:48
par boulauventre
Re,

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

Re: [Calc] Recherche avec Occurrences multiples

MessagePublié: 24 Mai 2018 14:24
par Piaf
Bonjour
A tester
Code : Tout sélectionner   AgrandirRéduire
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

MessagePublié: 24 Mai 2018 16: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

MessagePublié: 24 Mai 2018 17: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   AgrandirRéduire
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

MessagePublié: 24 Mai 2018 19:41
par boulauventre
Super c'est clair maintenant merci Piaf :super:

Bonne soirée

Boulauventre