[Résolu][Calc] Cell colorée en fonc° de la position actuelle
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- Membre hOOnoraire
- Messages : 181
- Inscription : 25 févr. 2009 09:21
[Résolu][Calc] Cell colorée en fonc° de la position actuelle
Bonjour,
Dans un tableau, j'ai des noms dans la colonne B et des données dans les colonnes suivantes.
Par exemple si je suis en P5 (ou C5, E5, W5, etc), je vois à gauche que je suis sur la ligne 5 (car c'est gris foncé), mais pour une meilleur lecture est-il possible de mettre en évidence (avec un style de cellule) le contenu (ici le nom) de la cellule B5 ?
Donc quel que soit la colonne en cours, ça revient à mettre en évidence la cellule Bx.
Je joins un tableau basique. Ici j'ai mis en jaune la cellule B3 car mon curseur est en K3, si je me déplace en K4, c'est la cellule B4 qui est en jaune et ainsi de suite.
Dans un tableau, j'ai des noms dans la colonne B et des données dans les colonnes suivantes.
Par exemple si je suis en P5 (ou C5, E5, W5, etc), je vois à gauche que je suis sur la ligne 5 (car c'est gris foncé), mais pour une meilleur lecture est-il possible de mettre en évidence (avec un style de cellule) le contenu (ici le nom) de la cellule B5 ?
Donc quel que soit la colonne en cours, ça revient à mettre en évidence la cellule Bx.
Je joins un tableau basique. Ici j'ai mis en jaune la cellule B3 car mon curseur est en K3, si je me déplace en K4, c'est la cellule B4 qui est en jaune et ainsi de suite.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Bosluc le 20 sept. 2015 19:04, modifié 1 fois.
LibreOffice 5.0.1 sur Windows 10 x64 Edition familiale à la maison.
LibreOffice 4.4.5 sur Windows 7 Entreprise.
LibreOffice 4.4.5 sur Windows 7 Entreprise.
-
- ManitOOu
- Messages : 3031
- Inscription : 02 juil. 2014 17:25
Re: [Calc] Cellule colorée en fonction de la position actuel
Bonjour,
Une solution connectée à l’événement de feuille "Sélection modifiée"
et le fichier qui va avec :
A+
Une solution connectée à l’événement de feuille "Sélection modifiée"
Code : Tout sélectionner
Sub Main(oEv as Object)
maFeuille = ThisComponent.Sheets(0) 'Feuille1
maZone = maFeuille.GetCellRangeByName("B2:B50") 'Colonne des noms
maZone.CellStyle = "Par défaut" ' Lorsqu'une cellule est sélectionnée on efface le style jaune de colonne B
maLigne = oEv.CellAddress.Row 'numero de ligne sélectionnée
maCellule = maFeuille.getCellByPosition(1,maLigne) 'sélection de la cellule colonne B correspondant à la ligne sélectionnée
maCellule.CellStyle = "FondJaune" 'application du style jaune
End Sub
et le fichier qui va avec :
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
-
- Membre hOOnoraire
- Messages : 181
- Inscription : 25 févr. 2009 09:21
Re: [Calc] Cellule colorée en fonction de la position actuel
Bonjour zeguedon,
C'est presque ça, car si je fais une sélection de plusieurs cellules pour changer le contenu par exemple, j'ai un message d'erreur.
Merci
C'est presque ça, car si je fais une sélection de plusieurs cellules pour changer le contenu par exemple, j'ai un message d'erreur.
Merci
LibreOffice 5.0.1 sur Windows 10 x64 Edition familiale à la maison.
LibreOffice 4.4.5 sur Windows 7 Entreprise.
LibreOffice 4.4.5 sur Windows 7 Entreprise.
-
- ManitOOu
- Messages : 3031
- Inscription : 02 juil. 2014 17:25
Re: [Calc] Cellule colorée en fonction de la position actuel
Bonjour,
Tu ne précises pas non plus si certains noms de la colonne B possèdent déjà un formatage particulier qui ne doit pas être affecté par la procédure.
Merci de donner dès le départ toutes les infos.
A+
En même temps c'était pas précisé non plus !Bosluc a écrit :C'est presque ça, car si je fais une sélection de plusieurs cellules pour changer le contenu par exemple, j'ai un message d'erreur.
Tu ne précises pas non plus si certains noms de la colonne B possèdent déjà un formatage particulier qui ne doit pas être affecté par la procédure.
Merci de donner dès le départ toutes les infos.
A+
-
- GourOOu
- Messages : 5622
- Inscription : 25 nov. 2011 18:07
- Localisation : Guyane
Re: [Calc] Cellule colorée en fonction de la position actuel
Bonjour
A+
Bosluc a écrit :C'est presque ça, car si je fais une sélection de plusieurs cellules pour changer le contenu par exemple, j'ai un message d'erreur.
Code : Tout sélectionner
Sub Main(oEv as Object)
maFeuille = ThisComponent.Sheets(0) 'Feuille1
maZone = maFeuille.GetCellRangeByName("B2:B50") 'Colonne des noms
maZone.CellStyle = "Par défaut" ' Lorsqu'une cellule est sélectionnée on efface le style jaune de colonne B
If oEv.supportsService("com.sun.star.table.Cell") Then
maLigne = oEv.CellAddress.Row 'numero de ligne sélectionnée
maCellule = maFeuille.getCellByPosition(1,maLigne) 'sélection de la cellule colonne B correspondant à la ligne sélectionnée
maCellule.CellStyle = "FondJaune" 'application du style jaune
End If
End Sub
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
-
- Membre hOOnoraire
- Messages : 181
- Inscription : 25 févr. 2009 09:21
Re: [Calc] Cellule colorée en fonction de la position actuel
Bonjour,zeguedon a écrit :Bonjour,
En même temps c'était pas précisé non plus !Bosluc a écrit :C'est presque ça, car si je fais une sélection de plusieurs cellules pour changer le contenu par exemple, j'ai un message d'erreur.
Tu ne précises pas non plus si certains noms de la colonne B possèdent déjà un formatage particulier qui ne doit pas être affecté par la procédure.
Merci de donner dès le départ toutes les infos.
A+
Oui, je précise que dans la colonne des noms ces derniers peuvent être de couleur différente et avec un style de format, mais ils ne font pas l'objet d'un formatage conditionnel, en revanche il y a des formatages conditionnels (par macro) dans les autres colonnes.
Après avoir testé la macro de Piaf (merci) il n'y a plus d'erreur, en revanche il devrait être possible de garder la couleur repère (jaune) en cas de sélection multiple sur la même ligne, et de pouvoir retrouver le formatage d'origine de la cellule.
En pratique, ça revient à ce que ça se comporte de la même façon que la colonne chiffrée à gauche où par défaut c'est gris clair et ça devient gris foncé (ou bleu selon les versions d'Open/LibreOffice).
LibreOffice 5.0.1 sur Windows 10 x64 Edition familiale à la maison.
LibreOffice 4.4.5 sur Windows 7 Entreprise.
LibreOffice 4.4.5 sur Windows 7 Entreprise.
-
- IdOOle de la suite
- Messages : 25184
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Calc] Cellule colorée en fonction de la position actuel
Salut,
Déjà, évite de citer l'intégralité des messages.
Tu vois bien que cela rend pénible la lecture avec des choses redondantes.
Ne le fais que pour une phrase si cela permet de récapituler un contexte.
Comment penses-tu faire cette opération ?
Déjà, évite de citer l'intégralité des messages.
Tu vois bien que cela rend pénible la lecture avec des choses redondantes.
Ne le fais que pour une phrase si cela permet de récapituler un contexte.
Pour cela, il faudrait pouvoir stocker durablement ces informations de formatageBosluc a écrit :il devrait être possible de garder la couleur repère (jaune) en cas de sélection multiple sur la même ligne, et de pouvoir retrouver le formatage d'origine de la cellule.
Comment penses-tu faire cette opération ?
-
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 00:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc] Cellule colorée en fonction de la position actuel
Bonjour
Il y a une chose que je ne comprends pas, et en même temps c'est pas grave Mais à chaque fois que tu change le style d'une cellule, la feuille s'actualise, et donc les formules aussi. C'est le but du jeu ?
Cordialement
Luke
Il suffit de modifier un peu le code de Piaf. A tester bien surBosluc a écrit :en revanche il devrait être possible de garder la couleur repère (jaune) en cas de sélection multiple sur la même ligne
Code : Tout sélectionner
Sub Main(oEv as Object)
maFeuille = ThisComponent.Sheets(0) 'Feuille1
maZone = maFeuille.GetCellRangeByName("B2:B50") 'Colonne des noms
If oEv.supportsService("com.sun.star.table.Cell") Then
maZone.CellStyle = "Default"
maLigne = oEv.CellAddress.Row 'numero de ligne sélectionnée
maCellule = maFeuille.getCellByPosition(1,maLigne) 'sélection de la cellule colonne B correspondant à la ligne sélectionnée
maCellule.CellStyle = "FondJaune" 'application du style jaune
End If
End Sub
Bosluc a écrit :pouvoir retrouver le formatage d'origine de la cellule
+1Dude a écrit :Pour cela, il faudrait pouvoir stocker durablement ces informations de formatage
Il y a une chose que je ne comprends pas, et en même temps c'est pas grave Mais à chaque fois que tu change le style d'une cellule, la feuille s'actualise, et donc les formules aussi. C'est le but du jeu ?
Cordialement
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
-
- Membre hOOnoraire
- Messages : 181
- Inscription : 25 févr. 2009 09:21
Re: [Calc] Cellule colorée en fonction de la position actuel
Bonjour,
Luky-luke, ça fonctionne bien cette fois sauf pour le style d'origine qu'on ne retrouve pas.
L'idée est venue que dans des logiciels de planning quelque soit l'endroit où on se déplace horizontalement, la cellule où se trouve le nom change de couleur afin de bien visualiser sur quelle personnel on travaille.
Donc là, je me suis dit que ça peut être possible avec un tableur d'avoir un équivalent.
C'est pour ça que j'ai dit précédemment que l'idée est d'avoir le même comportement de ce qui se passe dans la colonne des chiffres où la couleur de la cellule active est gris foncé.
Après je ne sais pas comment est conçu LibreOffice, peut-être qu'il s'agit d'une cellule "calque" ou qu'il y a une mise en mémoire tampon pour retrouver instantanément le style initial, mais peut-être qu'avec vos connaissances en programmation il y a moyen de faire la même chose ?
Luky-luke, ça fonctionne bien cette fois sauf pour le style d'origine qu'on ne retrouve pas.
L'idée est venue que dans des logiciels de planning quelque soit l'endroit où on se déplace horizontalement, la cellule où se trouve le nom change de couleur afin de bien visualiser sur quelle personnel on travaille.
Donc là, je me suis dit que ça peut être possible avec un tableur d'avoir un équivalent.
C'est pour ça que j'ai dit précédemment que l'idée est d'avoir le même comportement de ce qui se passe dans la colonne des chiffres où la couleur de la cellule active est gris foncé.
Après je ne sais pas comment est conçu LibreOffice, peut-être qu'il s'agit d'une cellule "calque" ou qu'il y a une mise en mémoire tampon pour retrouver instantanément le style initial, mais peut-être qu'avec vos connaissances en programmation il y a moyen de faire la même chose ?
LibreOffice 5.0.1 sur Windows 10 x64 Edition familiale à la maison.
LibreOffice 4.4.5 sur Windows 7 Entreprise.
LibreOffice 4.4.5 sur Windows 7 Entreprise.
-
- GourOOu
- Messages : 5622
- Inscription : 25 nov. 2011 18:07
- Localisation : Guyane
Re: [Calc] Cellule colorée en fonction de la position actuel
Bonsoir
Une solution éventuelle à tester.Je pars du principe que la cellule B1 n'a pas de formatage particulier. La sélection de plusieurs zones n'est pas traitée.
Et le fichier qui va avec.
A+
Le code est de zeguedon, je n'ai qu'ajouté la conditionluky-luke a écrit :Il suffit de modifier un peu le code de Piaf.
Une solution éventuelle à tester.
Code : Tout sélectionner
Option Explicit
Global maCellule
Global Style as String
Global Couleur as Long
Sub Ouverture
Style = "Par défaut"
Couleur = -1
End sub
Sub Fermeture
Dim maZone as Object
maZone = thisComponent.CurrentController.ActiveSheet.getCellRangeByName("A1")
thisComponent.CurrentController.select(maZone)
End Sub
Sub Main(oEv as Object)
Dim maFeuille as Object, maLigne as Object
Dim Ligne as Long, lngY as Long
maFeuille = thisComponent.CurrentController.ActiveSheet
CleanPreFormat
If oEv.supportsService("com.sun.star.table.Cell") Then
Ligne = oEv.CellAddress.Row 'numero de ligne sélectionnée
maCellule = maFeuille.getCellByPosition(1,Ligne) 'sélection de la cellule colonne B correspondant à la ligne sélectionnée
Style = maCellule.CellStyle
Couleur = maCellule.CellBackColor
maCellule.CellStyle = "FondJaune" 'application du style jaune
ElseIf oEv.supportsService("com.sun.star.table.CellRange") Then
If oEv.Rows.Count > 1 Then Exit Sub
maLigne = oEv.Rows.getByIndex(0)
lngY = maligne.RangeAddress.StartRow
maCellule = maFeuille.getCellByPosition(1,lngY)
Style = maCellule.CellStyle
Couleur = maCellule.CellBackColor
maCellule.CellStyle = "FondJaune"
End If
End Sub
Sub CleanPreFormat()
On Error Resume Next
maCellule.setPropertyValue("CellStyle",Style)
maCellule.setPropertyValue("CellBackColor", Couleur)
End Sub
Et le fichier qui va avec.
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
-
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 00:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc] Cellule colorée en fonction de la position actuel
Bonjour
Luke
Piaf a écrit :Une solution éventuelle à tester.
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
-
- ManitOOu
- Messages : 3031
- Inscription : 02 juil. 2014 17:25
Re: [Calc] Cellule colorée en fonction de la position actuel
Bonjour,
Une autre solution qui ne génère pas de clignotement.
L'idée était d'écrire dynamiquement au début de la macro, les infos concernant le style et la position que la cellule qui va passer au jaune pour les récupérer au prochain événement mais je n'y arrive pas par manque d'expérience. J'ai donc contourné en utilisant une cellule tampon pour récupérer le style de la cellule qui va passer au jaune, et sa position.
L'avantage et qu'après fermeture du classeur, la dernière ligne modifiée est mémorisée et retrouvera son état d'origine au prochain événement. J'ai aussi neutralisé la colonne des noms pour permettre de leur appliquer un style personnalisé sans fiche le bazar
Bémol, je n'ai pas réussis à gérer la multi-sélection de cellule (pas vraiment le temps de chercher à comprendre)
et le fichier qui va avec :
Une autre solution qui ne génère pas de clignotement.
L'idée était d'écrire dynamiquement au début de la macro, les infos concernant le style et la position que la cellule qui va passer au jaune pour les récupérer au prochain événement mais je n'y arrive pas par manque d'expérience. J'ai donc contourné en utilisant une cellule tampon pour récupérer le style de la cellule qui va passer au jaune, et sa position.
L'avantage et qu'après fermeture du classeur, la dernière ligne modifiée est mémorisée et retrouvera son état d'origine au prochain événement. J'ai aussi neutralisé la colonne des noms pour permettre de leur appliquer un style personnalisé sans fiche le bazar
Bémol, je n'ai pas réussis à gérer la multi-sélection de cellule (pas vraiment le temps de chercher à comprendre)
Code : Tout sélectionner
Sub Main(oEv as Object)
If oEv.supportsService("com.sun.star.table.Cell") Then
If oEv.CellAddress.Column = 1 Then 'si sélection colonne B on sort
Exit Sub
End If
maFeuille = ThisComponent.Sheets(0) 'Feuille1
maLigne = oEv.CellAddress.Row 'ligne sur laquelle on clique
maCelluleRepere = maFeuille.getCellByPosition(1,maLigne) 'Cellule qui contient le nom de la ligne sélectionnée
if maCelluleRepere.CellStyle = "FondJaune" Then 'si on a déjà un fond jaune on sort
Exit Sub
Else
Style1 = maCelluleRepere.CellStyle 'On récupère le style de la cellule qui va passer au jaune
Couleur1 = maCelluleRepere.CellBackColor 'idem pour un éventuel formatage direct
maCelluleRepere.CellStyle = "FondJaune" 'on donne à la cellule le fond jaune
End If
maCelluleArchive = maFeuille.getCellByPosition(0,0)'définition de la cellule archive qui va contenir les infos
precedenteSelection = maFeuille.getCellByPosition(1,maCelluleArchive.Value) 'on récupère la valeur de la cellule archive
Style = maCelluleArchive.CellStyle 'on récupère le style de la cellule archive
Couleur = maCelluleArchive.CellBackColor 'idem pour un éventuel fond
precedenteSelection.CellStyle = Style 'on applique le style à l'ancienne cellule
precedenteSelection.CellBackColor = Couleur 'idem pour l'éventuelle couleur de fond
maCelluleArchive.CellStyle = Style1 'on donne à la cellule archive le style de la cellule qui vient de passer au jaune
maCelluleArchive.CellBackColor = Couleur1 'idem pour l'éventuelle couleur de fond
maCelluleArchive.Value = oEv.CellAddress.Row 'on écrit dans la cellule archive le numéro de la ligne qui vient de passer au jaune
End If
End Sub
Ajout : Finalement, après coup la multi-sélection semble fonctionner sans problème |
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.