Avant de joindre un exemple, j'explique ce que je n'arrive pas à faire.
Dans un classeur, j'ai des onglets pour les mois et un onglet pour des codes. Dans cet onglet "Codes", pour chaque colonne correspond une plage de base de données qui sont nommées "vert", "bleu", "jaune", etc.
J'ai défini la plage "vert" de A2 à A20, la plage "bleu" de B2 à B20, la plage "jaune" de C2 à C20, et ainsi de suite
Chaque plage a des codes qui ne sont pas fixes et peuvent dont être simplement ajoutés ou supprimés.
Dans un onglet mensuel, lorsque je rentre un code dans une cellule, la case se colore en fonction du code mais comme il y a plus de 3 conditions, je dois passer par une macro qui donne :
Code : Tout sélectionner
REM ***** BASIC *****
Option Explicit
global oDoc as Object
global oListener as Object
Sub o_ListenersAdd
'Print "C'est parti", spc(1)
oDoc= thisComponent
oListener = CreateUnoListener( "o_", "com.sun.star.util.XModifyListener" )
oDoc.AddModifyListener(oListener)
End Sub
Sub o_ListenersRemove
oDoc.RemoveModifyListener(oListener)
End Sub
Sub o_Modified(oEvent)
'MsgBox "Modif..."
dim oEnCours as object
dim oSheet as Object
dim oDocument as Object
oEnCours = thiscomponent.currentSelection
oDocument = ThisComponent
oSheet = oDocument.getCurrentController().getActiveSheet()
if oSheet.getName<>("Codes") then
if oEnCours.supportsService("com.sun.star.sheet.SheetCell") then 'Ne travaille que si la sélection en cours est une cellule
select case UCase(oEnCours.string) 'Test selon la chaine contenue dans la cellule en cours
case "MO","BS","SBS","BHS"
coloriage("Vert") 'Voir routine ci-dessous
case "X"
coloriage("BleuCroix")
case "CA","CF","CET","RTT","RTC","ARTT","RPS","TC","HS","HP","ASA","GEM","PAT","MIL","PACS"
coloriage("Bleu")
case "I","ART13","ART14","BON","STG","RCS","RLS","RL","RC","MO30","BS30","SBS30","MAT","NAI","PEC","CNV","TTP","SPO","TGI","VME","DON"
coloriage("Jaune")
case "R1","R2","R3","R4","R5"
coloriage("R1R2")
case "DA","POSTE","UTJ","TN","TK","SPORT","TVOFF"
coloriage("Doléance")
case "APP"
coloriage("APP")
case "*","MUT"
coloriage("Nouvmut")
case else 'Les autres couleurs sont à compléter.
if oEnCours.CellStyle <> "Vide" then
oEnCours.CellStyle="Vide" 'Le test "Else" sert pour les autres cas => réapplique le style Vide
end if
end select
end if
end if
end sub
Sub o_Disposing
End Sub
Sub coloriage(couleur as String)
dim oEnCours as object
oEnCours = thiscomponent.currentSelection
If oEnCours.CellStyle <> couleur then
oEnCours.CellStyle=couleur
end if
If oEnCours.string <> UCase(oEnCours.string) Then
oEnCours.SetString(UCase(oEnCours.string))
EndIf
End SubCela reviendrait à faire en sorte qu'au lieu d'avoir
Code : Tout sélectionner
case "MO","BS","SBS","BHS" coloriage ("vert")Code : Tout sélectionner
case plage nommée "vert" coloriage ("vert")Code : Tout sélectionner
case oDocument.NamedRange("vert")Merci de votre aide



