Bonsoir Jamila,

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

 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]

Répondre à