Grâce au livre, j'ai réussi à pondre une macro qui fonctionne. Les
performances pour le formatage d'une zône de 1000 cellules sont
correctes. Je pense que la méthode est bonne.
Le document peut être chargé ici :
http://ooo.bobiciel.com/tests_documents/Formatage_conditionel_a_ma_facon.ods
Par contre, j'ai plein de questions en suspend (voir les commentaires
dans la macro). Je galère vraiement dans la compréhension de la logique
de UNO. Si un expert pouvait jeter un oeil, ce serait sympa. En
particulier pour la fonction qui se comporte différemment, selon qu'elle
est appelée dans une cellule, ou dans une sub !
a+
Bob
Bob a écrit :
j'ajoute une ébauche de code
Bob a écrit :
Bonjour Jacques,
Au lieu d'imbriquer des boucles et des switch, amha, tu dois pouvoir
t'en sortir beaucoup plus efficacement avec des noms de styles bien
choisis.
Tu nommes 35 styles de la façon suivante :
- Planning_toto
- Planning_titi
- Planning_tutu
- ...
où toto, titi, tutu et les 32 suivants représentent les différentes
valeurs que tu peux trouver dans tes 969 cellules de planning.
ta macro sera donc réduite à :
si le syle ("Planning" & ContenuCellule ) existe alors
StyleCellule = "Planning" & ContenuCellule
Ce qui donne en OOoBasic en adaptant l'exemple Code12-01 page 353 du
livre de Bernard et Laurent :
<------------ DEBUT_CODE ------------>
function Formatage_conditionel_a_ma_facon(Nom_de_la_zone as string) as
string
Dim controleur As Object, maFeuille As Object
Dim sel As Object, listeCell As Object, selectionCell As Object
Dim uneCellule As Object, enumCellules As Object
controleur = ThisComponent.CurrentController
maFeuille = controleur.ActiveSheet
sel = maFeuille.getCellRangeByName(Nom_de_la_zone)
selectionCell =
sel.queryContentCells(com.sun.star.sheet.CellFlags.STRING +
com.sun.star.sheet.CellFlags.VALUE)
enumCellules = selectionCell.getCells
listeCell = enumCellules.CreateEnumeration
Do While listeCell.hasMoreElements
uneCellule = listeCell.nextElement
' print uneCellule.CellStyle & " --> " & "Style_pour_valeur_" &
uneCellule.String
uneCellule.CellStyle = "Style_pour_valeur_" & uneCellule.String
' uneCellule.CellStyle = "StyleTest"
Loop
Formatage_conditionel_a_ma_facon = ""
end function
<------------ FIN_CODE ------------>
L'idée ensuite, c'est de remplacer le passage de paramètre sous forme
string par un passage de la zône sous forme d'objet. mais ça, je n'ai
pas trouvé comment faire.
Il suffirait ensuite de saisir dans une cellule de ton classeur la
formule suivante pour que le formatage de tes cellules soit automatique :
= Formatage_conditionel_a_ma_facon(Zone_a_formater)
Une modification du contenu d'une cellule de la Zone_a_formater
devrait normalement lancer automatiquement le formatage.
a+
Bob
Tu appeleras ensuite cette macro de façon séquentielle pour chaque
cellule de ton champ Planning, ou mieux encore : de façon
évènementiel à chaque changement de contenu d'une cellule de ce champ.
rmq : pour l'appel évènementiel, je n'ai jamais fait, mais il me
semble avoir compris que c'était possible.
Donc en résumé, ça revient à faire un formatage conditionnel avec le
nom du style calculé par une formule. Dommage que cette
fonctionnalité ne soit pas intègrée à OOo, ce serait un plus par
rapport à la concurence ;-)
En espèrant t'avoir aidé
Bob
jacques23270 a écrit :
Bonjour,
Suite à un transfert de fichiers d’Excel vers Calc, j’ai un problème
de conversion de macro.
La macro sous Excel permet de mettre en couleur les cellules d’un
planning de 969 cases en fonction du contenu de la case et des infos
d’une autre feuille contenant les codes couleurs et les différents
textes servant à la comparaison (35 infos différentes).
Cela donne sous excel, le code suivant :
Option Explicit
Sub mise_en_couleur()
Dim Compt_colonne, Compt_ligne, Spinner, Strings, i, texte1, li,
col, colo, ColorIndex As Integer
Dim msg, Style, Title, Réponse, MaChaine
msg = "Cette procédure dure de 30 à 60 secondes, Voulez-vous la
lancer ?" ' Définit le message.
Style = vbYesNo ' Définit les boutons.
Title = "Mise en couleur du planning année" ' Définit les titres.
' Affiche le message.
Réponse = MsgBox(msg, Style, Title)
If Réponse = vbYes Then ' L'utilisateur a choisi le bouton Oui.
MaChaine = "Oui" ' Accomplit une action.
'mise en couleur
Sheets("4-plan-année").Select
ActiveSheet.Unprotect
Range("F7").Select
li = 6
col = 5
For i = 1 To 35
Sheets("3-Récapitulatif année").Select
Cells(li, col).Activate
Strings = ActiveCell.Value
Sheets("3-Récapitulatif année").Select
Cells(li, (col - 4)).Activate
texte1 = ActiveCell.Value
Sheets("4-plan-année").Select
For Compt_colonne = 6 To 25
For Compt_ligne = 7 To 58
If Cells(Compt_ligne, Compt_colonne) = Strings Then
Cells(Compt_ligne,
Compt_colonne).Interior.ColorIndex = texte1
End If
Next
Next
li = li + 1
Next
End If
Range("F7").Select
End Sub
Mon problème est de passer cette macro sous Calc.
Quelqu’un peut-il m’aider ? d’avance merci
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]