IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Verrou sur changement sur feuille deja protegee


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut Verrou sur changement sur feuille deja protegee
    Bonjour,

    J'ai une feuille contenant un tableau avec les cellules qui contiennent des formules qui sont verrouillées par mot de passer (ex : 1234)
    Je voudrais à chaque fois que je saisi une donnée dans une cellule non verrouillée que cette dernière se verrouille automatiquement avec le même mot de passe que les cellules déjà verrouillées
    Mais lorsque je passe en mode Admin (j'ai une macro qui permet de déverrouiller toutes mes feuilles [le mot de passe est ABCD]) il ne faut pas que les cellules que je saisirai se verrouillent.

    Nota : Sur cette feuille j'ai déjà une macro qui se déclenche afin de réaliser un tri spécifique dès que l'utilisateur a saisi une donnée en colonne U.
    Cette macro se trouve dans la feuille "Fiche de progrès"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim rng    As Range
     
        ' La variable KeyCells contient la colonnes qui déclenchera  LE TRI si elle est renseignée.
        Set rng = Range("U:U")
        If Not Application.Intersect(rng, Range(Target.Address)) Is Nothing Then
     
        'Tri par année puis par n° de FP
    Application.Goto Reference:="Tab_FP"
        ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort. _
            SortFields.Clear
        ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort. _
            SortFields.Add Key:=Range("Tab_FP[Annee des F.P pour tri colonne A]"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
        ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort. _
            SortFields.Add Key:=Range("Tab_FP[N° F.P]"), SortOn:=xlSortOnValues, Order _
            :=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
        'Modif format des dates en Français
        Range("H2:I22,M2:M22").Select
        Range("H2:I22,M2:M22,O2:O22,Q2:Q22").Select
        Selection.NumberFormat = "m/d/yyyy"
     
        End If
    End Sub
    Cordialement,
    Graphikris.

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Kris, bonjour le forum,

    Le verrouillage se fait par deux actions bien distinctes.
    1- D'abord la cellule qui dans son Format / Protection doit avoir la case Verrouillée cochée. mais cela n'a aucun effet si...
    2- L'onglet n'est pas lui même protégé (avec ou sans mot de passe).

    Donc, si tu travailles dans un onglet déjà protégé, tu ne peux saisir que dans des cellules déverrouillées sinon tu n'aurais pas eu accès... Il suffit donc de verrouiller la cellule éditée mais pour cela il te faut déprotéger l'onglet avant et le re protéger après. Ça donnerait un code du style (à placer dans l'onglet concerné) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    Me.Unprotect "1234"
    Target.Locked = True
    Me.Protect "1234"
    End Sub
    Après pour le mode Admin je t'avoue que j'ai pas compris...
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Bonjour et merci pour ton code.

    Seul il fonctionne tres bien mais en combinaison avec le mien, j'ai un souci.

    Comme cet onglet contient un tableau protégé en partie comme je l'ai expliqué précédemment, il a fallu trouvé une parade lorsqu'un utilisateur doit ajouter une ligne (Appui sur la touche F9 lorsqu'on est positionné sur la dernière cellule du tableau permet d'ajouter une ligne).

    Ici dans le code ça bloque à la ligne 16 (Application.Goto Reference:="Tab_FP") dès que j'appui sur F9 pour ajouter une nouvelle ligne a mon tableau.
    La ligne s'ajoute mais toutes les cellules de cette nlle ligne sont protégées et idem meme erreur sur cette meme ligne lorsque je saisi une donnée en colonne U : le Tri par année puis par n° de FP ne s'effectue pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Me.Unprotect "1234"
    Target.Locked = True
    Me.Protect "1234"
     
     
     
    Dim rng    As Range
     
        ' La variable KeyCells contient la colonnes qui déclenchera  LE TRI si elle est renseignée.
        Set rng = Range("U:U")
        If Not Application.Intersect(rng, Range(Target.Address)) Is Nothing Then
     
        'Tri par année puis par n° de FP
    Application.Goto Reference:="Tab_FP"
        ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort. _
            SortFields.Clear
        ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort. _
            SortFields.Add Key:=Range("Tab_FP[Annee des F.P pour tri colonne A]"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
        ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort. _
            SortFields.Add Key:=Range("Tab_FP[N° F.P]"), SortOn:=xlSortOnValues, Order _
            :=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
        'Modif format des dates en Français
        Range("H2:I22,M2:M22").Select
        Range("H2:I22,M2:M22,O2:O22,Q2:Q22").Select
        Selection.NumberFormat = "m/d/yyyy"
     
        End If
     
     
     
    End Sub
    'Assignation touche F9 pour ajouter ligne dans tableau protege
    Private Sub Worksheet_Activate()
        Application.OnKey "{F9}", "Ajout_Ligne"
    End Sub
    'Désactive touche F9 pour ajouter ligne dans tableau protege
    Private Sub Worksheet_Deactivate()
        Application.OnKey "{F9}"
    End Sub
    Pour le mode Admin je verrai plus tard dans une autre discussion en attendant de régler ce premier problème

  4. #4
    Membre confirmé Avatar de graphikris
    Homme Profil pro
    Pas tres doué
    Inscrit en
    Décembre 2012
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Pas tres doué
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 214
    Points : 522
    Points
    522
    Par défaut
    Re,
    J'ai modifié le code comme ceci en assignant un dble clic en colonne V afin d'effectuer le tri.

    Le seul truc que je n'arrive pas a faire marcher c'est l'ajout de ligne avec la touche F9.
    La nlle ligne s'ajoute mais la totalité des cellules sont verrouillées (normal puisqu'il y a eu un changement) comment y remédier ?

    L'ideal serait d'avoir que le "Change" et non pas le "double clic"

    Je suis preneur de toutes propositions innovantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim rng        As Range
        Me.Unprotect "1234"
        ' La variable KeyCells contient la colonne (Ici V) qui déclenchera  LE TRI si elle est renseignée.
        Set rng = Range("V:V")
        If Not Application.Intersect(rng, Range(Target.Address)) Is Nothing Then
     
            'Tri par année puis par n° de FP
            Application.Goto Reference:="Tab_FP"
            ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort. _
                    SortFields.Clear
            ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort. _
                    SortFields.Add Key:=Range("Tab_FP[Annee des F.P pour tri colonne A]"), _
                                   SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                                   xlSortTextAsNumbers
            ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort. _
                    SortFields.Add Key:=Range("Tab_FP[N° F.P]"), SortOn:=xlSortOnValues, Order _
                                                                                         :=xlAscending, DataOption:=xlSortNormal
            With ActiveWorkbook.Worksheets("Fiche de Progres").ListObjects("Tab_FP").Sort
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
     
            'Modif format des dates en Français
            Range("H2:I22,M2:M22").Select
            Range("H2:I22,M2:M22,O2:O22,Q2:Q22").Select
            Selection.NumberFormat = "m/d/yyyy"
     
        End If
        Me.Protect "1234"
    End Sub
    Private Sub Worksheet_Change(ByVal Target As Range)
    'Déverrouille la feuille puis reverrouille les cellule vides que l'on va renseigner
        Me.Unprotect "1234"
        Target.Locked = True
        Me.Protect "1234"
    End Sub
    'Assignation touche F9 pour ajouter ligne dans tableau protege
    Private Sub Worksheet_Activate()
        Application.OnKey "{F9}", "Ajout_Ligne"
    End Sub
    'Désactive touche F9 pour ajouter ligne dans tableau protege
    Private Sub Worksheet_Deactivate()
        Application.OnKey "{F9}"
    End Sub

Discussions similaires

  1. [XL-2013] VBA changement de source de données, graphique non mis à jour sur une autre feuille
    Par BlackyThothor dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/05/2017, 12h36
  2. Réponses: 1
    Dernier message: 26/08/2011, 17h42
  3. Réponses: 1
    Dernier message: 15/07/2009, 15h05
  4. problème de changement sur une même feuille
    Par tchimou dans le forum Delphi
    Réponses: 4
    Dernier message: 03/04/2007, 13h39
  5. Requête avec variable incrémentée sur changement de clé.
    Par souellet dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/09/2005, 22h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo