8 messages in org.openoffice.fr.progRe: [prog] fonction Min et la recherc...
FromSent OnAttachments
jamila hafydJun 24, 2006 3:05 am 
christianwtdJun 24, 2006 5:32 am 
jamila hafydJun 26, 2006 3:35 am 
Mathias MichelJun 26, 2006 4:20 am 
jamila hafydJun 26, 2006 4:59 am 
Francois GattoJun 26, 2006 3:21 pm 
Francois GattoJun 27, 2006 1:08 pm 
Francois GattoJun 27, 2006 2:22 pm 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [prog] fonction Min et la recherche sous calcActions...
From:Francois Gatto (oo@volcar.org)
Date:Jun 27, 2006 2:22:22 pm
List:org.openoffice.fr.prog

Bonsoir,

Francois Gatto wrote:

Bonsoir Jamila,

Le message que j'ai envoyé hier semble ne pas être passé. Aussi je le retransmet.

Je te propose cette idée :

Sub ChercherMinEtColorer() REM Recherche la valeur minimale d'un range REM et met les occurences trouvées en couleur REM ========== Francois Gatto - 2006 ======== REM ======== sous *OpenOffice.org 2.0.2* ======

Dim oDoc As Object, oSheet As Object Dim maZone As Object Dim aValidCols(), aValidLigs() Dim firstCol, lastCol, firstLig, lastLig, jecherche, trouve, result Dim aSplit() As Variant Dim iColX As String, iColY As String 'The i Prefix is for index Dim iLigX As Integer, iLigY As Integer Dim x As Long

oDoc = ThisComponent oSheet = oDoc.Sheets.getByName("Feuille1") Rem ********** determiner la zone de recherche With oSheet 'recupere intervalle des colonnes aValidCols() = .getColumnDescriptions() aValidLigs() = .getRowDescriptions() End With

Rem ### Point 1 du message ###

'litteral de la première colonne de la zone disponible firstCol = aValidCols( LBound( aValidCols() ) 'on explose le litteral pour n'en prendre que la terminaison aSplit() = Split( firstCol, " " ) iColX = aSplit(1) 'litteral de la dernière colonne de la zone disponible lastCol = aValidCols( UBound( aValidCols() ) aSplit() = Split( lastCol, " " ) iColY = aSplit(1) 'litteral de la première ligne de la zone disponible firstLig = aValidLigs( LBound( aValidLigs() ) aSplit() = Split( firstLig, " " ) iLigX = aSplit(1) 'litteral de la dernière ligne de la zone disponible lastLig = aValidLigs( UBound( aValidLigs() ) aSplit() = Split( lastLig, " " ) iLigY = aSplit(1) 'sMsg = "De la " & firstCol & " à la " & lastCol 'sMsg = sMsg & Chr( 10 ) & "De la " & firstLig & " à la " & lastLig 'MsgBox( sMsg, 64, "Range à traiter" )

Rem *********** définition du Range maZone = oSheet.getCellRangeByName( iColX & iLigX & ":" & iColY & iLigY) 'Set the range backcolor yellow maZone.CellBackColor = RGB( 255, 255, 0 )

Rem ********** définition de la recherche jecherche = maZone.CreateSearchDescriptor()

Rem ### Point 3 du message ### 'Si SearchWords = true , seules les occurences complètes 'seront recherchées 'Voir document API sur 'http://api.openoffice.org/docs/common/ref/com/sun/star/util/SearchDescriptor.html#SearchWords jecherche.SearchWords = True

Il faudrait ajouter les lignes suivantes :

'Si SearchType = 0 (par défaut) la recherche s'effectue sur la formule 'Si SearchType = 1 la recherche s'effectue sur la valeur jecherche.SearchType = 1

Rem *********** définition de la function Min result = maZone.computeFunction(com.sun.star.sheet.GeneralFunction.MIN) jecherche.SearchString = result trouve = mazone.findAll( jecherche ) For x = 0 To trouve.count-1 'La couleur de fond de la cellule trouvée est mise en rose ;) trouve( x ).CellBackColor = RGB( 255, 200, 255 ) Next End Sub

jamila hafyd wrote:

Bonjour liste

j'essaie de programmer un macro sous calc qui fait la comparaison entre des prix et il me color la valeur minimale dans chaque ligne Le code que j'ai écrit est le suivant Sub chercherminetcolorer()

oDoc = ThisComponent oSheet=oDoc.Sheets.getByName("Feuille1") Rem ********** determiner la zone de rechreche For y = 1 to 100 mazone = oSheet.getCellRangeByName("A" & y & ":D" & y) xzone = "A" & y & ":D" & y if oSheet.getCellRangeByName("A" & y).String = "" then Exit For mazone.CellBackColor = RGB(255,255,255) jecherche = mazone.CreateSearchDescriptor jecherche.SearchString=(MonMin("Feuille1",xx)) trouve = mazone.findAll(jecherche) for x=0 to trouve.count-1 trouve(x).CellBackColor = RGB(255,200,255) next Next End sub Function MonMin(UneFeuille As Variant, xzone As Variant ) as double Dim LaFonc As Object ,LesFeuilles As Object,LaFeuille As Object , LeRange As Object, Result As String LaFonc=createunoservice("com.sun.star.sheet.FunctionAccess") 'Les donnees sources LesFeuilles=ThisComponent.sheets() LaFeuille=LesFeuilles.getbyname("Feuille1") LeRange=LaFeuille.getcellrangebyName(xzone) 'Arguments de la fonction dim Arguments(0) arguments(0)=LeRange result=lafonc.callfunction("MIN",arguments()) MonMin=result End function

Généralement j'ai arrivé au resultat que je veux mais j'ai teois probèlme : 1 _ Comment faire pour faire la recherche dans une zone indetérminé ( seulement dans les lignes remplis) 2 _ Mon macro ne prend pas on considération les chiffres aprés la virgule ( par exemple mon marco ne fait pas la différence entre les deux nombre 120.31 et 120.56 )

Je n'ai, semble-t'il, pas constaté ce problème.

3 _ Si ma valeur minimale est 10 il va me colorer tout les nombre qui contient le chiffre 10) J'éspere que j'etais claire Merci d'avance HAFYD Jamila

J'espère que cela t'apportera un éclairage sur ton problème. J'ai repris ta macro initiale (en tentant tout de même d'en rester le plus proche) pour être ... un peu plus libre ;)

Amitiés à nos amis du Maroc.