Probleme de nom de "plage"
Bonjour, dans mon fichier ci joint, j'ai créé un certain nombre de noms via le gestionnaires des noms.
Je suis en train de modifier mon fichier aux attentes des utilisateurs et je voudrai changer le nom de certaines plages.
Notamment toutes celles qui comportent un underscore.
Si je prends l'exemple de la plage SM_35 que je veux modifier en SM35, ça me met un message d'erreur
la syntaxe de ce nom est incorrecte.
Vérifier que le nom :
- commence par une lettre...
J'ai pensé à un conflit de nom avec le noms de mes onglets, je les ai renommés mais ça ne fonctionne pas.
Merci d'avance de votre aide.
Bonjour,
C'est plutôt un "conflit" avec les noms de cellules existantes (sous Xl2016, la colonne SM existe ... et la ligne 35 aussi
Merci de ta réponse, y aurait il un moyen de berner excel genre avec un caractère invisible?
Bonjour,
une fonction que je m'étais faite pour créer des noms valides :
Function validerNom(nom As String, InitialeMaj As Boolean, Optional carRemplacement As String = "_") As String
' Caractères valides Le premier caractère d'un nom doit être
' une lettre, un trait de soulignement (_) ou une barre oblique inversée (\).
'
' Remarque Vous ne pouvez pas utiliser les lettres « C », « c », « R » ou « r » comme nom défini car ces lettres sont utilisées comme abréviations pour sélectionner une ligne ou une colonne pour la cellule sélectionnée lorsqu'elles sont entrées dans une zone de texte Nom ou Atteindre.
' "L" "C" en français
' Les références de cellules ne sont pas autorisées Les noms ne peuvent pas être une référence de cellule, telle que Z$100 ou R1C1.
' Les espaces ne sont pas valides Les espaces ne sont pas autorisés. Utilisez le trait de soulignement (_) et le point (.) comme séparateurs de mots, par exemple Taxe_Vente ou Premier.Trimestre.
' Longueur des noms Un nom peut contenir jusqu'à 255 caractères.
Dim car1 As String, s As String, test As Range
validerNom = nom
' initiales en majuscule
If InitialeMaj Then validerNom = Application.Proper(validerNom)
' remplacer ou supprimer espaces
validerNom = Replace(validerNom, " ", carRemplacement)
validerNom = Replace(validerNom, Chr(160), carRemplacement)
' 1er caratère valide
car1 = UCase(Left(validerNom, 1))
If Not (car1 Like "[A-Z]" Or car1 Like "_" Or car1 Like "\") Then validerNom = "_" & validerNom
'***************************************************************
'nom=référence valide ? L1C1, L1C(-4)
' On Error Resume Next
' Set test = Range(validerNom)
If Len(validerNom) = 1 And (car1 = "L" Or car1 = "C" Or car1 = "R") Then validerNom = "_" & validerNom
On Error Resume Next
' supprimer si nom existant
Names(validerNom).Delete
On Error GoTo 0
' test si nom = référence valide
On Error Resume Next
s = ""
s = Range("" & validerNom & "").Address
If Err = 0 Or Len(s) <> 0 Then
' si pas d'erreur, c'est une référence A1 ou R1C1, non valide
validerNom = "_" & validerNom
End If
On Error GoTo 0
' 255 car max
If Len(validerNom) > 255 Then nom = Mid(validerNom, 1, 253) & Format(Rnd() * 100, "00")
End Function
Les espaces sont remplacé par "_" (caractère optionnel).
Un _ est ajouté au début si besoin.
Ex : n = validerNom("SM35", False)
donnera "_SM35"
Tu peux t'en servir de base pour ton besoin exact.
eric
Edit :
y aurait il un moyen de berner excel genre avec un caractère invisible?
je viens de tester avec l'espace insécable (0160), excel le refuse également, même en plein milieu.
Il va falloir que je complète mon code.
Le mieux que tu puisses faire c'est un "." :
n = validerNom("SM 35", False, ".")
=> "SM.35"
Edit2 : code complété
J'ai remplacé les underscore par un .
merci de votre aide.