XL 2019 Bouton Macro et protection

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...

soan

XLDnaute Barbatruc
Inactif
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:

job75

XLDnaute Barbatruc
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

  • Ajouter(1).xlsm
    21.9 KB · Affichages: 16
Dernière édition:

Discussions similaires

Réponses
21
Affichages
291

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel