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. > -- Francois Gatto --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]