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 :

Insérer une ligne sur feuille protégée [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 330
    Par défaut Insérer une ligne sur feuille protégée
    Bonsoir,

    A l'aide de l'enregistreur j'ai créé une macro, le problème est que ma feuille est protégée avec un mot de passe "tintin" et avec autorisation pour l'utilisateur d'insérer des lignes d'en supprimer, d'utiliser le filtre et également le filtre automatique.

    Comment modifier cette macro pour qu'elle déprotège le temps de réaliser l'action puis reprotèger de nouveau une fois cette action terminée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Insert()
        Rows("5:5").Select
        Selection.Copy
        Rows("5:5").Select
        Selection.Insert Shift:=xlDown
        Range("A5").Select
        Application.CutCopyMode = False
     
       End Sub

    Merci pour votre aide
    Philippe

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 055
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avant tout, il faut éviter d'utiliser les Select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Insert()
     With Rows(5)    ' ou  With Rows("5:5")
     .Copy
     .Insert Shift:=xlDown
     End With
     Application.CutCopyMode = False
    End Sub
    Avec le Protect/Unprotect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Insert()
     Worksheets("db").Unprotect "toto"
     With Rows(5)
     .Copy
     .Insert Shift:=xlDown
     End With
     Application.CutCopyMode = False
     Worksheets("db").Protect "toto"
    End Sub
    Une autre solution est de protéger la feuille avec l'argument UserInterfaceOnly à True
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Worksheets("db").Protect Password:="toto", UserInterfaceOnly:=True
    A ce moment là, la feuille est protégée pour l'utilisateur mais pas pour le code VBA.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 330
    Par défaut
    Merci Corona, ça fonctionne sauf que je ne peux pas utiliser les filtres de listes.

    J'ai mis cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("db").Protect Password:="toto", UserInterfaceOnly:=True
    Mais ça ne va pas.

    Bonne journée.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 330
    Par défaut
    J'ai peut être trouvé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("db").Protect Password:="tintin", AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True
    Pour les filtres ça fonctionne par contre impossible de supprimer des lignes avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     AllowDeletingRows:=True
    Il n'y a pas comme dans Access une solution pour écrire un code du genre avant suppression ?

    Encore merci.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 055
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    A placer dans une des procédure événementielles
    Workbook_Open(), Worksheet_Activate(), ou Workbook_SheetActivate(ByVal Sh As Object)
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Activate()
     With Worksheets("db")
     .EnableAutoFilter = True
     .Protect Contents:=True, UserInterfaceOnly:=True
     End With
    End Sub
    Ensuite tu peux activer le filtre par exemple par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Filtre()
       ActiveSheet.Range("$A$1:$J$106").AutoFilter Field:=6, Criteria1:="F"
       ActiveSheet.Range("$A$1:$J$106").AutoFilter Field:=8, Criteria1:="3"
    End Sub
    Tu peux bien entendu remplacer ActiveSheet par le nom de la feuille

    [EDIT]
    Citation Envoyé par Philippe608 Voir le message
    Pour les filtres ça fonctionne par contre impossible de supprimer des lignes avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     AllowDeletingRows:=True
    Je viens d'ajouter une ligne de suppression et cela fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Filtre()
     Rows(4).Delete
     ActiveSheet.Range("$A$1:$J$106").AutoFilter Field:=6, Criteria1:="F"
     ActiveSheet.Range("$A$1:$J$106").AutoFilter Field:=8, Criteria1:="3"
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 330
    Par défaut
    Corona, j'ai bien suivi la procédure mais lorsque je sélectionne une ou plusieurs lignes impossible de les supprimer, tu veux bien m'envoyer un classeur comme exemple ?

    Merci.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 055
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Voilà un fichier exemple contenant trois boutons sur la feuille [db] qui est protégée dès l'ouverture du classeur ou éventuellement à l'activation de la dite feuille.
    Trois boutons
    1) Permet de filtrer selon deux critères la table de données contenue dans cette feuille qui est donc protégée.
    2) Enlève le filtre et ensuite supprime une ligne sur deux.
    3) Permet de restaurer les données d'origine
    J'ai testé mais comme c'est rapidement développé il est possible qu'il reste un bug.
    Fichiers attachés Fichiers attachés
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 330
    Par défaut
    Merci beaucoup,

    Bonne soirée

    @+

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

Discussions similaires

  1. [XL-2007] Insertion ligne dans un tableau (ListObject) sur feuille protégée
    Par Damran dans le forum Conception
    Réponses: 4
    Dernier message: 22/08/2012, 17h32
  2. [XL-2007] insérer une ligne au meme endroit dans plusieurs feuilles
    Par tchock_nenette dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 03/05/2012, 10h35
  3. [XL-2003] copie d'une ligne sur autre feuille
    Par sofynet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/07/2011, 15h25
  4. Supprimer une ligne sur deux feuilles du même classeur
    Par apdf1 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/03/2011, 13h28
  5. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 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