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.

41programmation.xlsm (777.65 Ko)

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.

Rechercher des sujets similaires à "probleme nom plage"