Bouton VBA qui contourne la protection de la feuille
Bonjour,
j'ai actuellement un bouton sur la feuille "Recherche" associée à un code qui me déplace des colonnes spécifiques de ma feuille "Outillage" de chaque ligne qui possèdent "Lancer étalonnage" dans la colonne L.
Mais comme je veux pour mettre en place mon Excel protégée ma feuille "Outillage", le bouton ne marche plus erreur de déblogage 1004 au niveau de la ligne ".Range("Z1").Value = .Range("L1").Value 'mise en place du titre pour le filtre élaboré"
Voici le code en entier :
[code][/Sub Lancerétalonnage()
Dim ShOutil As Worksheet, ShExtract As Worksheet 'déclaration des variables
Dim Plg As Range
Dim DerLig As Long
Set ShOutil = Sheets("Outillage"): Set ShExtract = Sheets("Feuille3") 'définition des onglets
With ShOutil 'avec l'onglet "Outillage"
DerLig = .Cells(Rows.Count, 1).End(xlUp).Row 'calcul de la dernière ligne
Set Plg = .Range("A1:AA" & DerLig) 'définition de la plage utile
ShExtract.Range("A1").Value = .Range("A1").Value 'copie des titres dans l'onglet "Feuille3"
ShExtract.Range("B1").Value = .Range("B1").Value
ShExtract.Range("C1").Value = .Range("D1").Value
ShExtract.Range("D1").Value = .Range("I1").Value
ShExtract.Range("E1").Value = .Range("T1").Value
ShExtract.Range("F1").Value = .Range("U1").Value
ShExtract.Range("G1").Value = .Range("V1").Value
ShExtract.Range("H1").Value = .Range("W1").Value
.Range("Z1").Value = .Range("L1").Value 'mise en place du titre pour le filtre élaboré
.Range("Z2").Value = "Lancer l'étalonnage" 'mise en place du critère
Plg.AdvancedFilter action:=xlFilterCopy, CriteriaRange:=.Range("Z1:Z2"), _
CopyToRange:=ShExtract.Range("A1:H1") 'extraction via un filtre élaboré vers la Feuille3
.Range("Z1:Z2").Clear 'nettoyage des critères
End With
End Subcode]
Je ne préfère pas associé le fichier excel car il appartient à l'entreprise dans lequel je suis en stage.
Merci d'avance !
Bonjour Snakiss,
En début de code, exécuter une macro Déprotéger, et à la fin, une macro Protéger.
Ces deux macros peuvent être réalisées avec l'enregistreur en quelques secondes, et resservir autant de fois que nécessaire...
A+ Daniel
Bonjour Dan,
Merci de votre réponse rapide.
J'ai enregistré la macro comme vous m'avez indiqué et j'ai donc modifier le code précédent mais la même erreur persiste.
Je penses pourtant que l'emplacement des nouvelles lignes sont correct, et je sélectionne bien la feuille avec la protection à chaque fois.
Sub Lancerétalonnage()
Dim ShOutil As Worksheet, ShExtract As Worksheet 'déclaration des variables
Dim Plg As Range
Dim DerLig As Long
Set ShOutil = Sheets("Outillage"): Set ShExtract = Sheets("Feuille3") 'définition des onglets
Sheets("Outillage").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True
With ShOutil 'avec l'onglet "Outillage"
DerLig = .Cells(Rows.Count, 1).End(xlUp).Row 'calcul de la dernière ligne
Set Plg = .Range("A1:AA" & DerLig) 'définition de la plage utile
ShExtract.Range("A1").Value = .Range("A1").Value 'copie des titres dans l'onglet "Feuille3"
ShExtract.Range("B1").Value = .Range("B1").Value
ShExtract.Range("C1").Value = .Range("D1").Value
ShExtract.Range("D1").Value = .Range("I1").Value
ShExtract.Range("E1").Value = .Range("T1").Value
ShExtract.Range("F1").Value = .Range("U1").Value
ShExtract.Range("G1").Value = .Range("V1").Value
ShExtract.Range("H1").Value = .Range("W1").Value
.Range("Z1").Value = .Range("L1").Value 'mise en place du titre pour le filtre élaboré
.Range("Z2").Value = "Lancer l'étalonnage" 'mise en place du critère
Plg.AdvancedFilter action:=xlFilterCopy, CriteriaRange:=.Range("Z1:Z2"), _
CopyToRange:=ShExtract.Range("A1:H1") 'extraction via un filtre élaboré vers la Feuille3
.Range("Z1:Z2").Clear 'nettoyage des critères
End With
Sheets("Outillage").Select
ActiveSheet.Unprotect
End Sub
Ne faudrait-il pas faire l'inverse, déprotéger le temps que la macro s'exécute, et re-protéger une fois que la macro s'est exécutée ?
Ah oui je suis ***