Dans une macro je souhaite déverrouiller une plage précise de ma feuille, j'utilise :
ActiveSheet.Protection.AllowEditRanges.Add Title:="plage1", Range:=Range("AR6", "AY6")
J'ai plusieurs macros sur un même fichier et cette fonction apparaît dans presque chacune d'elles.
Mon problème est que, parfois les macros buggent sur cette ligne mais je n'arrive pas à définir quand ni pourquoi. Si je change le nom de la plage le problème est résolu ...
J'en ai déduis qu'il y avait conflit avec le nom qui existe surement déjà dans le fichier : comment effacer les noms précédents pour être sûre de ne plus rencontrer ce problème ? y a t il une fonction "plage = Nothing" ou quelque chose comme ça, mais qui n'effacerait pas l'autorisation de modification bien sûr
C'est un idée ... mais cela m'obligerai à noter ce chiffre dans mon tableau Excel, non ? Ces fichiers (car il y en a un certain nombre utilisant le même code.xlam) sont utilisés par plusieurs personnes chaque jours ... je ne vois pas comment incrémenter mon nom de plage directement dans le code, cela est possible ? Est ce que ça ne va pas créer des conflits entre tous les utilisateurs et tous les fichiers ?
If ActiveSheet.Protection.AllowEditRanges.Count > 0 Then
ActiveSheet.Unprotect
For i = 1 To ActiveSheet.Protection.AllowEditRanges.Count
'MsgBox ActiveSheet.Protection.AllowEditRanges(i).Title
ActiveSheet.Protection.AllowEditRanges(i).Delete
Next
ActiveSheet.Protect
End If
Merci pour cette option : mais je ne suis pas sûre que cela fonctionne pour mon application précise ...
Je vais quand même tester et je me le garde sous le coudeau cas où
If ActiveSheet.Protection.AllowEditRanges.Count > 0 Then
ActiveSheet.Unprotect
For i = 1 To ActiveSheet.Protection.AllowEditRanges.Count
'MsgBox ActiveSheet.Protection.AllowEditRanges(i).Title
ActiveSheet.Protection.AllowEditRanges(i).Delete
Next
ActiveSheet.Protect
End If
J'ai déjà une ligne avec ActiveSheet.Protection.AllowEditRanges(1).Delete ... effectivement c'est une autre plage qui bloque : je n'avais pas pensé à mettre une variable dans la suppression ! Je teste de suite cette solution qui me parait être bien adaptée
Merci encore, je vous tiens au courant en cas de pb
Bon ... aucune des deux solutions n'a fonctionné
Finalement je m'en suis sortie en contournant le problème :
On Error Resume Next
ActiveSheet.Protection.AllowEditRanges.Add Title:="plage1", Range:=Range("AR6", "AY6")
ActiveSheet.Protection.AllowEditRanges.Add Title:="plage2", Range:=Range("AR6", "AY6")
On Error GoTo 0
Ce qui revient à lui dire "nomme la plage "1", si tu n'y arrives pas : nomme la "2"". Pas très propre mais ça à l'air de fonctionner comme solution provisoire. J'espère trouver quelque chose de plus stable comme solution et surtout arriver à comprendre pourquoi parfois cela fonctionne et d'autres fois non !
Merci pour votre aide,
Je suis preneuse de toute autre suggestion