Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.
Modérateur :Vilains modOOs
Règles du forum 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 !
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 ?
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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par boulauventre le 24 mai 2018 15:55, modifié 1 fois.
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
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+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Merci pour ton aide, c'est exactement ce que je cherchais !!
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 ?