Bonjour,
bon alors déjà pour commencer, quand tu déclares tes variables comme tu le fais :
Dim RangeName, Cat, CatRange As String
seule CatRange est dimensionnée en String les autres sont dimensionnées en Variant !
Pour bien dimensionnée sur une ligne on spécifie le dimensionnement de chaque variable comme ceci :
Dim RangeName As String, Cat As String, CatRange As String
On n'a pas tout ton code mais quand même ce qui suis m'interpelle !
1 2
| ActiveCell=Alarme
Cat = ActiveCell |
cette ligne me surprend aussi :
CatRange = "$A21": "$B21"
les 2 points hors guillemet ne doivent rien donner de bon!
Ce qui suit me parait mieux
Pour répondre à tes questions :
1) la j'ai pas compris !!! les étendues disponibles ne sont pas définies par l'utilisateur mais sont par défaut : le classeur et les feuilles présentes dans le classeur.
Une fois que tu as définit une étendue pour une plage nommée ce n'est plus modifiable.
2) je ne comprend pas le rapport entre :
Le nouveau Nom est ajouté (avec ADD) mais avec la valeur nulle {…} donc ne s’intégre pas dans la liste PatrametersInfoList.
et
Comment faire pour que le code modifie le nom de la catégorie sans modifier sa Référence ?
Pour ce qui est de modifier la référence d'une plage nommée pas de problème par exemple :
1 2 3
|
CatRange = "$A21": "$B50"
ActiveWorkbook.Names(Cat & "InfoList").ReferTo="=ParametersInfoList!" & CatRange" |
3) si l’étendue d'une plage Nommée est définie à "Classeur" cela veut dire que cette plage nommée sera utilisable dans tout le classeur à contrario de l’étendue définit avec le nom d'une feuille qui sera par conséquent limitée à la dite feuille.
4)oui voici ma méthode :
supposons que tu veuille tester l'existance d'une plage nommée "PlageTest"
1 2 3 4 5 6 7
| Dim NomDePlage As String
NomDePlage = "PlageTest"
On Error Resume Next 'ici on gere l'erreur qui pourrait se produire sur la ligne suivante
Debug.Print Range(NomDePlage).Parent.Name 'doit renvoyer le nom de la feuille qui contient cette supposée plage nommée "PlageTest"
If Not Err = 0 Then MsgBox "La plage nommée : '" & NomDePlage & "' n'existe pas !", vbExclamation + vbOKOnly, "Erreur de Nom de plage..."
On Error goto 0 ' annule l'effet du on error goto 0 pour l'eventuel suite de code |
mais pour eviter de copier ce code à chaque test d’existence de plage nommée tu peux te créer une fonction qui renvois vrais ou faux. Exemple
1 2 3 4 5 6 7 8 9 10
| Function VerifierExistancePlageNommee(ByVal NomDePlage As String) As Boolean
VerifierExistancePlageNommee = False 'par defaut on est à False
if NomDePlage="" then exit sub
On Error Resume Next 'ici on gere l'erreur qui pourrait se produire sur la ligne suivante
Debug.Print Range(NomDePlage).Parent.Name 'doit renvoyer le nom de la feuille qui contient cette la supposée plage nommée testée par cette fonction
If Err = 0 Then VerifierExistancePlageNommee = True 'tout vas bien !
'ici pas besoin de On Error goto 0 car la porté du On error resume next sera limitée à cette fonction
End Function |
1 2 3 4 5 6 7 8 9 10
|
Sub Demo()
Dim NomDePlageATester As String
NomDePlageATester = "Cuillère"
'pour la demo si la Cuillère n'existe pas on renvois un message d'erreur
If VerifierExistancePlageNommee(NomDePlageATester) = False Then MsgBox "La plage nommée : '" & NomDePlageATester & "' n'existe pas !", vbExclamation + vbOKOnly, "Erreur de Nom de plage..."
End Sub |
Voila
A+
Partager