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 :

[VBA-Excel] - protection plage de cellule sur i feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de Chewi
    Étudiant
    Inscrit en
    septembre 2006
    Messages
    180
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2006
    Messages : 180
    Points : 138
    Points
    138
    Par défaut [VBA-Excel] - protection plage de cellule sur i feuilles
    Bonjour au forum et Re à Ouskel'nord,

    Voilà, VBA m'a une fois de plus mis à bout:
    Je n'arrive pas à comprendre pourquoi si j'ai plusieurs feuilles (très souvent), la sélection ne s'affiche que dans la dernière et pas dans les autres (la cellule n'est pas entourée pour dire qu'elle est sélectionnée mais si l'on fait un double-clic, on peut la modifier) ?

    Ce n'est pas super important mais il est préférable de voir la cellule sélectionnée.

    Pouvez-vous me dire ce qui ne vas pas dans ce code ?
    (Si quelque chose ne va pas car si pas c'est dans mes classeurs que cela se trouve.)

    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
    Private Sub CommandButton1_Click()
    If ComboBox1.Value = "" Then
        MsgBox "Vous devez entrer un code !"
        Exit Sub
    Else
        Dim i As Integer
        Dim r As Range, plage As Range
        Set plage = Range("D14:AD14,D21:AD21,D3,D5,S5,Y5,X3")
     
        For i = 1 To ActiveWorkbook.Sheets.Count
            With ActiveWorkbook.Sheets(i)
                .Unprotect
                .[D5] = Uf2.ComboBox1.Value
                .Cells.Locked = True
                .ChartObjects.Locked = True
                plage.Locked = False
                For Each r In plage
                    If r.Value <> "" Then
                        r.Locked = True
                    End If
                Next
                .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                .EnableSelection = xlUnlockedCells
            End With
        Next
    End If
    Unload Uf2
    End Sub
    Ce code s'exécute avec un bouton valider d'un Uf et est destiné à protéger toutes les cellules sauf celles de la "plage" qui sont encore vides.

    En vous remerciant bien bas.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 12 464
    Points : 15 274
    Points
    15 274
    Par défaut
    Quel est le message d'erreur ?
    Une erreur se produit quand la feuille n'est pas déprotégée... pourtant, te les déprotèges... j'ai bien vu
    Une feuille contiendrait-elle un mot de passe
    J'ai testé ça :
    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
    Private Sub CommandButton1_Click()
    If ComboBox1.Value = "" Then
        MsgBox "Vous devez entrer un code !"
        Exit Sub
    Else
        Dim i As Integer
        Dim r As Range, plage As Range
        Set plage = Range("D14:AD14,D21:AD21,D3,D5,S5,Y5,X3")
        For Each LaFeuille In ActiveWorkbook.Sheets
            With LaFeuille
                .Unprotect
                '.[D5] = Uf2.ComboBox1.Value
                .Cells.Locked = True
                '.ChartObjects.Locked = True
                .Range(plage.Address).Locked = False
                For Each r In plage
                    If r.Value <> "" Then
                        r.Locked = True
                    End If
                Next
                .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                .EnableSelection = xlUnlockedCells
            End With
        Next
    End If
    Unload Uf2
    End Sub
    J'ai mis en remarque ce que je n'avais pas
    J'ai lancé plusieurs fois la macro sans pb
    Tu dis

  3. #3
    Membre habitué Avatar de Chewi
    Étudiant
    Inscrit en
    septembre 2006
    Messages
    180
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2006
    Messages : 180
    Points : 138
    Points
    138
    Par défaut
    Re Ouskel'nord

    1) j'ai modifié ceci entre-temps et je n'ai plus de message d'erreur:
    J'ai insérer la plage dans la boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With ActiveWorkbook.Sheets(i)
    Set plage = Sheets(i).Range("D14:AD14,D21:AD21,D3,D5,S5,Y5,X3")
    2) Aucune feuille ne contient de mot de passe

    3) Il me reste le petit problème de sélection:
    Je n'arrive pas à comprendre pourquoi si j'ai plusieurs feuilles (très souvent), la sélection ne s'affiche que dans la dernière et pas dans les autres (la cellule n'est pas entourée pour dire qu'elle est sélectionnée mais si l'on fait un double-clic, on peut la modifier) ?
    Tu n'a probablement pas vu ma modification du message, je dois l'avoir réalisée entre-temps

    4) Les 2 messages initiaux que j'avais portaient sur ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                .ChartObjects.Locked = True
                plage.Locked = False
    5) Je viens d'essayer en remplacant par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(plage.Address).Locked = False
    Mais cela ne change rien (logique je crois).

    6) Qu'est-ce que 'LaFeuille" ? c'est "Sheets(i) ?

    7) Voilà, j'ai essayé d'être le plus court possible

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 12 464
    Points : 15 274
    Points
    15 274
    Par défaut
    Tu as essayé bêêêêtement mon code ? (en enlevant ce que j'ai mis en remarque, bien sûr...)
    A+

    LaFeuille ? remplace effectivement sheets(i) mais evite des count

  5. #5
    Membre habitué Avatar de Chewi
    Étudiant
    Inscrit en
    septembre 2006
    Messages
    180
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2006
    Messages : 180
    Points : 138
    Points
    138
    Par défaut
    Re,

    1) J'essaie
    bêêêêtement
    ton code:
    ->La sélection est correcte pour les 2 feuilles.

    2) je remet .[D5] dans le code

    3) je remet chartobjects

    Pour 2 et 3, ma sélection s'effectue correctement (comme énoncé dans mon problème) seulement maintenant, je peux sélectionner des valeurs dans ma "plage" même si elles sont remplies et donc <> ""

    Je vois vraiment pas la différence dans le code qui fait que je n'ai plus un problème mais que j'en ai un autre ???

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 12 464
    Points : 15 274
    Points
    15 274
    Par défaut
    Autant pour moi, j'ai oublié de modifier cette boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                For Each r In .Range(plage.Address)
                    If r.Value <> "" Then
                        r.Locked = True
                    End If
                Next
    Tu corriges, j'ai testé et c'est ok
    A+

  7. #7
    Membre habitué Avatar de Chewi
    Étudiant
    Inscrit en
    septembre 2006
    Messages
    180
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2006
    Messages : 180
    Points : 138
    Points
    138
    Par défaut
    C'est encore moi

    Ben toujours pas!

    Voici mon code "final":
    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
    Private Sub CommandButton1_Click()
    If ComboBox1.Value = "" Then
        MsgBox "Vous devez entrer un code !"
        Exit Sub
    Else
        Dim i As Integer
        Dim r As Range, plage As Range
     
        For Each LaFeuille In ActiveWorkbook.Sheets
     
            With LaFeuille
                Set plage = LaFeuille.Range("D14:AD14,D21:AD21,D3,D5,S5,Y5,X3")
                .Unprotect
                .[D5] = Uf2.ComboBox1.Value
                .Cells.Locked = True
                .ChartObjects.Locked = True
                .Range(plage.Address).Locked = False
                For Each r In .Range(plage.Address)
                    If r.Value <> "" Then
                        r.Locked = True
                    End If
                Next
                .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                .EnableSelection = xlUnlockedCells
            End With
        Next
    End If
    Unload Uf2
    End Sub
    Et toujours le même "problème" Excel n'affiche la sélection avec un clic que sur 1 des x feuilles.

    Ne faut-il pas mettre la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .EnableSelection = xlUnlockedCells
    dans une boucle?

    Voici le bon résultat sur 1 feuille(affichage de la sélection): "sélectionnée"

    Voici l'autre (sur les autres feuilles): "nonsélectionnée"

    La sélection ne s'affiche pas mais on voit néanmoins la référence de ma cellule (en l'occurrence F14) dans la name box en haut à gauche.
    Images attachées Images attachées   

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 12 464
    Points : 15 274
    Points
    15 274
    Par défaut
    Désolé de répondre si tard, j'étais avec melodyy
    Citation Envoyé par Tu
    La sélection ne s'affiche pas mais on voit néanmoins la référence de ma cellule (en l'occurrence F14) dans la name box en haut à gauche.
    J'avoue que je ne comprends pas. Peux-tu écrire dedans malgré tout ?
    Je jète un oeil mais il me faut un moment, je n'ai pas gardé mon test.
    A+

    Non, je confirme, chez moi c'est ok pour toutes les feuilles.
    Pour vérifier, c'est facile : Tu te places dans la première cellule déverrouillée que tu trouves et tu te déplaces à l'aide de la flèche droite, les cellules déverrouillées s'activent l'une après l'autre jusqu'à la fin avant de reprendre sur la première.
    J'ai fait la même chose sur toutes mes feuilles et c'est ok.
    Je me répète : Comprends pas ton pb
    A+

    PS - Tu n'as pas un objet peint en blanc sur ta cellule ?

  9. #9
    Membre habitué Avatar de Chewi
    Étudiant
    Inscrit en
    septembre 2006
    Messages
    180
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2006
    Messages : 180
    Points : 138
    Points
    138
    Par défaut
    Oui je peux écrire dedans en double-cliquant sur la cellule.
    C'est juste le fait de la simple sélection qui n'apparaît pas autour de ma cellule.

    Mais si je fais un simple clic, je vois dans la name box la référence de ma cellule mais je ne peux pas écrire dedans.

    PS - Tu n'as pas un objet peint en blanc sur ta cellule ?
    Ce problème se pose à toutes les cellules vides de ma plage sur les x-1 feuilles.

    Bon je continue à tester en attendant mais déjà un grand merci de consacrer autant de temps à ce problème.

    PS1: J'avais essayé le truc des flèches directionnelles et selon cette méthode, je ne sais sélectionner aucune cellule (même les vides de ma "plage").

    PS2: Si tu veux, je peux envoyer mon fichier par MP mais pas sur le forum si possible.

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 12 464
    Points : 15 274
    Points
    15 274
    Par défaut
    On ne peut pas lier un fichier à un mp
    désolé

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 12 464
    Points : 15 274
    Points
    15 274
    Par défaut
    A tout hasard, essaie d'inverser ces deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                .EnableSelection = xlUnlockedCells
    Pour ma part, j'ai le même résultat.
    A+

  12. #12
    Membre habitué Avatar de Chewi
    Étudiant
    Inscrit en
    septembre 2006
    Messages
    180
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2006
    Messages : 180
    Points : 138
    Points
    138
    Par défaut
    Et bien oui, ça fonctionne! Ouskel'nord!

    Ceci dit, à part une incompréhension de mon côté, que provoque cette inversion dans le code?

    Bon je mets en espérant que demain, cela ira comme aujourd'hui


    Merci !!!!

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 12 464
    Points : 15 274
    Points
    15 274
    Par défaut
    Ceci dit, à part une incompréhension de mon côté, que provoque cette inversion dans le code?
    Comme toi, je suis dans la plus complète expectative

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. faire une copie d'une plage de cellules sur x feuilles
    Par La Zélie dans le forum Excel
    Réponses: 4
    Dernier message: 11/06/2008, 09h55
  2. [VBA-EXCEL] Copier plage de cellules aléatoire
    Par Alecine dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/05/2008, 16h50
  3. [VBA-E]acceder A Une Cellule Sur Une Feuille
    Par CIBOOX dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 17/01/2007, 09h28
  4. [VBA - Excel] Problème de deux cellules sur l'evenement OnChange
    Par champmart dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/01/2007, 18h06
  5. [Vba-Excel] Exécuter une requete SQL sur une feuille de donnée
    Par Spacy_green dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/11/2006, 10h27

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