Macro WorkSheet

Fermé
augustinhio Messages postés 3 Date d'inscription lundi 9 décembre 2013 Statut Membre Dernière intervention 12 décembre 2013 - 9 déc. 2013 à 23:21
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 13 déc. 2013 à 08:58
Bonjour,

j'ai un tableau bien fourni et j'aimerai mettre en surbrillance toute une ligne et toute une colonne dès que je clique dans une cellule. pour ce faire je saisi la macro suivante:

"' Highlight the entire row and column for the ActiveCell.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlColorIndexNone
ActiveCell.EntireRow.Interior.ColorIndex = 22
ActiveCell.EntireColumn.Interior.ColorIndex = 36
End Sub
"

mais mon problème est que çà efface toute les mise en forme que j'ai faite avant et après la saisie de la macro; et cela m'empêche de verrouiller la feuille pour empêcher ceux qui vont utiliser le classeur de changer les formules par inadvertance.

je viens humblement solliciter votre aide pour résoudre ce casse-tête chinois!
merci
A voir également:

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 10/12/2013 à 08:16
Bonjour

les coordonnées de la sélection précédente sont inscrites dans 2 cellules AA1 et AA2 avec la colonne AA masquée (AA ou autre suivant ta configuration)

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Lig As Long, Col As Integer

ActiveSheet.Unprotect

'détruit la mise en évidence précédente
Lig = Range("AA1")
Col = Range("AA2")
'lig=0 et Col=0 1° utilisation
If Lig > 0 Then Rows(Lig).Interior.ColorIndex = xlColorIndexNone
If Col > 0 Then Columns(Col).Interior.ColorIndex = xlColorIndexNone

'mémorise la ligne et colonne de la cellule active
Lig = Target.Row
Col = Target.Column
' et les range dans 2 cellules (masquer la colonne AA1)
Range("AA1") = Lig
Range("AA2") = Col
'met en évidence la sélection
Rows(Lig).Interior.ColorIndex = 22
Columns(Col).Interior.ColorIndex = 36

ActiveSheet.Protect
End Sub

Nota(edit à 8:16): on peut aussi mémoriser la ligne et la colonne dans la base de registre (plus discret) si les utilisateurs disposent chacun du classeur sur leur ordi...
Michel
0
augustinhio Messages postés 3 Date d'inscription lundi 9 décembre 2013 Statut Membre Dernière intervention 12 décembre 2013
12 déc. 2013 à 12:47
bonjour,
par rapport à mon problème, je constate que dès que je ferme mon classeur et que je l'ouvre de nouveau, ma macro ne marche n'est plus prise en compte!
je rappelle ma procédure:

"mettre la plage concernée en surbrillance exemple A1 à O50
Mise en forme conditionnelle
Format/Mise en forme conditionnelle
la formule est

=LIGNE()=CELLULE("ligne")


format et choisir une couleur

clic droit sur l'onglet de ta feuille et coller ce code

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
End Sub
"

je suis en attente de vos suggestions!
merci!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 13/12/2013 à 09:10
bonjour,

"Je rappelle ma procédure: "
Tu crois? relis ton 1° message compare avec ce dernier et évite ce ton autoritaire qui semble dire "vous avez rien compris": un bénévole n'est pas ton domestique


autrement , je ne t'ai jamais parlé de:

- d'écriture de formule dans le code: A EVITER AU MAXIMUM EN VBA
-de "calculate"- inutile puisqu'on écrit pas de formule

mettre la plage concernée en surbrillance exemple A1 à O50 --
c'est nouveau ?... voir 1° message de plus,mettre en surbrillance est inutile

pour limiter l'action à A1:O50
Private Sub Worksheet_selectionChange(ByVal Target As Range)
Dim Lig As Long, Col As Integer
If not intersect(target, range("A1:O50") is nothing then
ActiveSheet.Unprotect
......la procèdure
End if
End sub
Au cas où:
La procédure doit être située dans le module feuille de la page concernée



Michel
0