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]

Répondre à