XL 2016 AllowEditRanges.Add erreur

JoanneDCB

XLDnaute Nouveau
Bonjour,

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 ;)

Je vous remercie pour votre aide :)
 

JoanneDCB

XLDnaute Nouveau
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 ?
 

danielco

XLDnaute Accro
Regarde si ce code te convient. Maintenant, à toi de voir s'il est compatible avec ton application :

VB:
Dim Ctr As Long
With ActiveSheet.Protection.AllowEditRanges
  Ctr = .Count + 1
  .Add Title:="plage" & Ctr, Range:=Range("AR6", "AY6")
End With

Daniel
 

Paf

XLDnaute Barbatruc
Bonjour à tous

...comment effacer les noms précédents...

pour répondre à cette question, un essai:

VB:
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

A+
 

JoanneDCB

XLDnaute Nouveau
Regarde si ce code te convient. Maintenant, à toi de voir s'il est compatible avec ton application :

VB:
Dim Ctr As Long
With ActiveSheet.Protection.AllowEditRanges
  Ctr = .Count + 1
  .Add Title:="plage" & Ctr, Range:=Range("AR6", "AY6")
End With

Daniel

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ù :)
 

JoanneDCB

XLDnaute Nouveau
Bonjour à tous



pour répondre à cette question, un essai:

VB:
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

A+

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

Bonne journée
 

JoanneDCB

XLDnaute Nouveau
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 :)

Bonne journée !