Tri et protection cellule

Bonjour,

Ci-joint un fichier excel 'Test protection"

1/ Les cellules sont déverrouillées exceptées les cellules jaunes qui font l'objet d'une formule (quantité*PV unitaire)

2/ La feuille est protégée par un mot de passe: 1234

Pouvez vous s'il vous plait y insérer une macro afin que je puisse trier et/ou filtrer les colonnes Pays et/ou Produit

L'objectif est que l’utilisateur ne touche pas aux formules.

Je vous remercie

Bonjour,

Cette procédure va empêcher de sélectionner la colonne PV Total du tableau.

Il n'y a plus besoin de protéger la feuille.

Cdlt.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
    Set rng = Me.ListObjects(1).ListColumns(5).DataBodyRange
    If Not Intersect(Target, rng) Is Nothing Then
        Target.Offset(, -1).Select
    End If
    Set rng = Nothing
End Sub

Bonjour Jean-Eric,

Je te remercie.

Peux tu m'éclaircir stp:

1/ En cas de besoin, comment je fais pour modifier la colonne PV et réactiver la macro

2/ Peux tu me dire comment adapter la macro à un autre tableau; ou plutot que dois modifier dans la macro pour l'adapter?

3/ Pourquoi la macro n'apparait pas au niveau du bouton Macro (je vois le code quand j'ouvre l'éditeur); je ne connais nada pour les macros!

Je profite du présent pour te remercier encore de tout ce que tu m'as appris sur les TCD; t'a peut etre remarqué que je ne pose plus de question!!!!

Merciiiii

Rebonjour,

En faisant des recherches sur les macros, je me rend compte que c'est un univers!!!!

Je te pose mon problème autrement stp:

Ci joint un autre fichier version 2; que faut il rajouter dans le code pour protéger la colonne les deux colonnes PV et PVx2

Merciii

Rebonjour Jean Eric,

Voici ce que j'ai fait pour protéger deux colonnes de cellules (5 et 6 à partir de la colonne 1 du tableau) et cela a l'air de fonctionner:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim rng As Range

Set rng = Me.ListObjects(1).ListColumns(5).DataBodyRange

If Not Intersect(Target, rng) Is Nothing Then

Target.Offset(, -1).Select

End If

Set rng = Nothing

Set rng = Me.ListObjects(1).ListColumns(6).DataBodyRange

If Not Intersect(Target, rng) Is Nothing Then

Target.Offset(, -1).Select

End If

Set rng = Nothing

End Sub

Tu peux me confirmer si c'est correct stp? si je peux je faire pour plusieurs colonnes?

Je comprends que l'instruction est lorsqu'on selectionne une cellule de la colonne, il sélection la précédente "Target.Offset(, -1).Select"

Merci de m'éclaircir

Bonjour,

Tu as bien compris.

Pour tes 2 colonnes, tu peux envisager ceci :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lo As ListObject, loCol As Long, loRow As Long, Cell As Range
    Set Cell = ActiveCell
    If Cell.ListObject Is Nothing Then Exit Sub
    Set lo = Me.ListObjects(1)
    loCol = Cell.Column - lo.HeaderRowRange.Cells(1).Column + 1
    loRow = Cell.Row - lo.HeaderRowRange.Row
    If loCol > 4 Then
        lo.ListColumns(1).DataBodyRange.Cells(loRow, 1).Select
    End If
    Set Cell = Nothing: Set lo = Nothing
End Sub

A te relire pour des explications à la tulipe_4.

Cdlt.

Merci,

mais ce que j'ai c'est correct? je peux l'utiliser?

Re,

Je ne pense pas qu'il y ait de souci avec ton code, à part, peut-être, la partie surlignée, que j'ai corrigé :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
    Set rng = Me.ListObjects(1).ListColumns(5).DataBodyRange
    If Not Intersect(Target, rng) Is Nothing Then
        Target.Offset(, -1).Select
    End If
    Set rng = Me.ListObjects(1).ListColumns(6).DataBodyRange
    If Not Intersect(Target, rng) Is Nothing Then
        Target.Offset(, -2).Select    End If
    Set rng = Nothing
End Sub

Ce que j'ai proposé vérifie avant tout que la cellule active est dans le tableau et se place automatique en colonne 1 du tableau si la cellule active est dans les colonnes 5 ou 6 du tableau...

Maintenant tu peux aussi tester ceci :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim n As Long, rng As Range
    n = Me.ListObjects(1).ListRows.Count
    Set rng = Me.ListObjects(1).ListColumns(5).DataBodyRange.Cells(1).Resize(n, 2)
    If Not Intersect(Target, rng) Is Nothing Then
        Target.Offset(, -2).Select
    End If
    Set rng = Nothing
End Sub

Cdlt.

Merci Jean Eric,

Tu es vraiment patient; je pense que je vais garger le premier code; j'ai du lire pendant 2 heure de temps les codes pour essayer d'en avois un aperçu.

Pour Target.Offset(, -2).Select, je comprends qu'il l'a renvoie à deux colonnes avant au lieu d'une et une.

En plus de cela, je décoche "verrouiller les cellules" et coche "masquer" ensuite je protège la feuille. De ce fait on peut trier, les formules sont protégées par ta macro et les formats sont protégées par la fonction de protection; j'utilise dans mes tableaux les MFC. Et la, la boucle est complète par rapport à mon objectif!!! tu vois!

J'ai posté un fichier que j'ai créé avec ta macro recopiée; la macro ne s'active pas; tu peux voir le poste stp?

https://forum.excel-pratique.com/excel/activation-macro-t94048.html

Merci encore

Bonjour Jean Eric,

Ci-joint un fichier avec ta macro pour protéger une colonne de cellule.

Est-il possible:

1/ d'écrire un code pour désactiver la fonction "couper" ?

2/ Cumuler les deux macros sur la même feuille ?

Merciiiii

Bonjour,

Essaie ainsi :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range

    With Application
        .CutCopyMode = False
        .CellDragAndDrop = False
    End With

    Set rng = Me.ListObjects(1).ListColumns(5).DataBodyRange
    If Not Intersect(Target, rng) Is Nothing Then
        Target.Offset(, -1).Select
    End If

    Set rng = Nothing
End Sub

Bonjour Jean Eric et merciiiii,

J'ai commencé a faire le cours de VBA juste pour avoir des notions.

Je comprends la différence entre Workbook, et module.

Quand tu m'envoies un code, je cherche a le comprendre pour l'adapter en cas de besoin.

Un truc que je n'arrive pas à faire stp:

Si tu m'envoie un code worksheet et je le place dans Workbook en changeant juste la ligne 1 :

Private Sub Worksheet_SelectionChange(ByVal Target As Range) par Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Le code fonctionne t il sur toutes les feuilles ou il y a une erreur dans ma logique?

Merci.

Autre point stp,

le code interdit :

couper coller,

copier coller;

glisser

Peut on juste juste interdire:

couper coller,

glisser

Et permettre :,

copier coller;

merci


Et permettre :

copier coller en valeur uniquement

Merci

Rechercher des sujets similaires à "tri protection"