Macro WorkSheet

augustinhio Messages postés 10 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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

3 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  2. augustinhio Messages postés 10 Statut Membre
     
    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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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