XL 2019 Bouton Macro et protection

  • Initiateur de la discussion Initiateur de la discussion Nddsav
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Nddsav

XLDnaute Nouveau
Bonjour à tous.

Voilà, j'ai une bonne connaissance d'Excel mais je ne connais absolument rien du code VBA.

Mon problème est le suivant : comme je n'ai aucune connaissance du VBA, j'ai créé un bouton en me servant de l'onglet Développeur, puis ensuite j'ai affecté une macro que j'ai créée en me rendant sur la commande "Enregistrer une macro" pour ajouter une nouvelle ligne à mon tableau à chaque fois que j'appuie sur ce bouton.

Tout fonctionne parfaitement. Sauf que, quand je protège ma feuille, et que je clique sur le bouton pour qu'une nouvelle ligne soit créée, un message d'erreur apparaît sur lequel il est écrit : "Erreur d'exécution 1004" Les fonctionnalités du tableau ne sont pas disponibles, car la feuille est protégée.

Comment puis-je faire en sorte que l'ajout de ligne automatique par mon bouton puisse se faire tout en ayant la feuille protégée ?

Je vous remercie tous par avance pour l'aide que vous pourrez m'apporter.
 
Solution
Bonjour Nddsav,

C'est très simple : fais Alt F11 pour aller sur l'éditeur VBA.

Côté gauche, fais un double-clic sur Module1 (qui s'ouvre à droite).

Tu dois pouvoir lire :
VB:
Sub Macro1()
  'ici, il y a du texte
End Sub
Ajoute 2 lignes, comme ceci :
VB:
Sub Macro1()
  ActiveSheet.Unprotect
  'ici, il y a du texte
  ActiveSheet.Protect
End Sub
Si ta feuille est protégée avec par exemple le mot de passe « loup » :
VB:
Sub Macro1()
  ActiveSheet.Unprotect "loup"
  'ici, il y a du texte
  ActiveSheet.Protect "loup"
End Sub
Fais Alt F11 pour retourner sur Excel, et essaye ton bouton.

-------------------------------------------

Attention, ce que j'ai écrit est valable pour un Tableau Excel « classique »,
pas pour un Tableau...
Bonjour Nddsav,

C'est très simple : fais Alt F11 pour aller sur l'éditeur VBA.

Côté gauche, fais un double-clic sur Module1 (qui s'ouvre à droite).

Tu dois pouvoir lire :
VB:
Sub Macro1()
  'ici, il y a du texte
End Sub
Ajoute 2 lignes, comme ceci :
VB:
Sub Macro1()
  ActiveSheet.Unprotect
  'ici, il y a du texte
  ActiveSheet.Protect
End Sub
Si ta feuille est protégée avec par exemple le mot de passe « loup » :
VB:
Sub Macro1()
  ActiveSheet.Unprotect "loup"
  'ici, il y a du texte
  ActiveSheet.Protect "loup"
End Sub
Fais Alt F11 pour retourner sur Excel, et essaye ton bouton.

-------------------------------------------

Attention, ce que j'ai écrit est valable pour un Tableau Excel « classique »,
pas pour un Tableau structuré ! pour ces Tableaux structurés, la feuille
doit être non protégée pour que les fonctionnalités d'insertion de lignes
puissent fonctionner (ainsi que les extensions de formules, les suppressions de lignes,
et tout ce qui concerne ces tableaux spéciaux)
.

soan
 
Dernière édition:
Bonjour Nddsav, soan,
puis ensuite j'ai affecté une macro que j'ai créée en me rendant sur la commande "Enregistrer une macro" pour ajouter une nouvelle ligne à mon tableau à chaque fois que j'appuie sur ce bouton.
C'est un très bon début mais les macros qu'on obtient ainsi doivent ensuite être retravaillées.

Voyez le fichier joint et les macros des 2 boutons :
VB:
Sub Ajouter_ligne()
Application.ScreenUpdating = False
With Feuil1 'CodeName de la feuille
    .Protect "toto", UserInterfaceOnly:=True 'mot de passe à adapter
    With .[A1].CurrentRegion
        .Rows(2).Copy .Rows(.Rows.Count + 1)
        On Error Resume Next 'si aucune SpecialCell
        .Rows(.Rows.Count + 1).SpecialCells(xlCellTypeConstants) = "" 'efface les constantes
    End With
End With
End Sub

Sub Supprimer_ligne()
With Feuil1 'CodeName de la feuille
    If ActiveSheet.Name <> .Name Then Exit Sub
    .Protect "toto", UserInterfaceOnly:=True 'mot de passe à adapter
    With .[A1].CurrentRegion
        If .Rows.Count < 3 Then MsgBox "Le tableau doit avoir au moins 2 lignes jaunes", vbInformation, "Supprimer ligne": Exit Sub
        If Intersect(ActiveCell, .Cells) Is Nothing Or Not Intersect(ActiveCell, .Rows(1)) Is Nothing Then _
            MsgBox "Sélectionnez une cellule jaune", vbInformation, "Supprimer ligne": Exit Sub
        Intersect(ActiveCell.EntireRow, .Cells).Delete xlUp
    End With
End With
End Sub
Notez l'utilisation du paramètre UserInterfaceOnly lors de la protection de la feuille.

A+
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 bouton supprimer
Réponses
4
Affichages
102
Réponses
3
Affichages
188
Réponses
1
Affichages
115
  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
361
Retour