Voir aussi
Effacer les noms définis sur une feuille
Comment effacer tous les noms (Names) d'une feuille Excel, mais pas tous ceux du classeur.
A) pour effacer les noms se référant à une plage de la feuille active définis par
NomFeuilleActive!NomPlage

Sub efface1()
Dim N As Name
With ActiveSheet
For Each N In .Names
N.Delete
Next
End With
End Sub

B) pour effacer les noms se référant à une plage de la feuille active définis par
par NomPlage et NomFeuilleActive!NomPlage

Sub Efface2()
Dim nom As String
nom = ActiveSheet.Name
nc = Len(nom)
For Each N In ActiveWorkbook.Names
v = N.RefersTo
If Mid(v, 2, nc + 1) = nom & "!" Then N.Delete
Next N
End Sub

C) si tu désires supprimer seulement les noms contenus dans une plage particulière de la feuille, par exemple Range("C1:C4")

(le Range("c1:C4") doit être totalement comprise dans la plage définie par le "NOM.)

Sub efface3()

With Worksheets("Feuil1")
For Each n In .Parent.Names
If TypeName(Evaluate(n.Name)) = "Range" Then
If Union(.Range("C1:C4"), Range(n.Name)).Address = Range(n.Name).Address Then
n.Delete
End If
End If
Next
End With

End Sub

D) Et si les 2 plages range("C1:C4") et Nom doivent être identiques, tu ajoutes un test comme ceci :

Sub efface4()

With Worksheets("Feuil1")
For Each n In .Parent.Names
If TypeName(Evaluate(n.Name)) = "Range" Then
If Union(.Range("C1:C4"), Range(n.Name)).Address = Range(n.Name).Address And _
Union(.Range("C1:C4"), Range(n.Name)).Address = .Range("c1:C4").Address Then
n.Delete
End If
End If
Next
End With

End Sub
Denis Michon, Serge Garneau,
Ajouté ou modifié le 05/01/2008 (N°1956)
Limiter l'étendue d'une plage nommée avec la fonction décaler
Coment définir une plage dynamiquement pour qu'elle aille de la cellule A2 à la première cellule contenant la date d'aujourd'hui ?
Si tes dates sont en A3:Axxx, dans le menu insertion/nom/définir (ou dans xl2007 dans formules/définir un nom), tape la formule suivante:
=DECALER(Feuil1!$3;;;EQUIV(AUJOURDHUI();Feuil1!:;0)-2)
Alain Vallon,
Ajouté ou modifié le 12/08/2007 (N°1874)
Référence en VBA à une plage nommée
Via le menu insertion/nom/définir, j'ai donné des noms à des plages de données. Comment utiliser ces noms dans une macro ?
Si MaPlage fait référence à la zone B4:D35, dans ta macro, par exemple pour sélectionner cette sone, tu peux utiliser au choix
range("MaPlage").select
ou
[MaPlage].select
Ceci fonctionne bien sur aussi si tu as utilisé une formule dans insertion/nom/définir pour nommer ta plage
Flo Cabon,
Ajouté ou modifié le 22/05/2007 (N°1835)
Nommer une plage suivant une condition (VBA)
Comment nommer la plage de données en colonne B définie par le fait de partager un même critère en colonne A ?
Pour éviter le recours à des fonctions volatiles pour nommer tes plages de données, ce qui est préférable si tu as de nombreuses plages à nommer, fais le par VBA.

Sub Nomme()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A1], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value Next c For Each c In MonDico.items
ActiveWorkbook.Names.Add Name:="critere" & c, _
RefersTo:="=" & [B1].Offset(Application.Match(c, [A:A], 0) - 1,
0).Resize(Application.CountIf([A:A], c), 1).Address
Next c
[D20].ListNames
End Sub
Jacques Boisgontier,
Ajouté ou modifié le 12/05/2007 (N°1829)
Nommer une plage suivant une condition (formule)
Comment nommer la plage de données en colonne B définie par le fait de partager un même critère en colonne A ?
La valeur du critère étant en colonne A et celles des données en colonne B,
Le valeur du critère en $2 (on peut aussi l'écrire directement dans la formule)
dans insertion/nom/définir, indique la formule ci-dessous:
=DECALER(Feuil1!$1;EQUIV(Feuil1!$2;Feuil1!$1:$1000;0)-1;0;NB.SI(Feuil1!$1:$1000;Feuil1!$2);1)

Attention, les critères en colonne A doivent être regroupés.
Jacques Boisgontier,
Ajouté ou modifié le 12/05/2007 (N°1828)
Sélectionner une plage variable et la nommer
Je voudrais rechercher dans les colonnes A à D le n° de la ligne qui contient un texte donné, sélectionner alors la plage de A1 à D&numéro de la ligne, et enfin attribuer un nom à la plage ainsi sélectionnée.
With Range("A:D")
Range("A1:D" & .Find("machaine", .Item(1), , , ,
xlPrevious).Row).Select
ActiveWorkbook.Names.Add Name:="zaza",
RefersTo:=Selection.Address
End With
Alain Vallon, (N°1158)
Renommer un fichier par VBA
Comment renommer un fichier par script VBA ?
Name "C:TempToto.xls" As "C:TempTata.xls"
Laurent Longre, (N°1157)
Renommer toutes les feuilles d'un classeur
J'ai créé un classeur dont chaque page contient une cellule portant le nom d'une personne comment puis-je faire pour que automatiquement la feuille prenne pour nom le nom de la personne saisie ?
Si tes noms sont en A1 de chaque feuille

On Error Resume Next
For Each sht In ActiveWorkbook.Worksheets
Sheets(sht.Name).Name = Sheets(sht.Name).[A1]
Next
Alain Vallon, (N°1156)
Redimensionner une plage nommée
Comment redimensionner une plage nommée ?
Tu peux utiliser l'instruction Resize si tu pars d'une plage existante.

Sub AgrandirLaPlage()
Dim UnePlage As Range
Set UnePlage = Range("A1:B2")
UnePlage.Name = "Plage"
UnePlage.Resize(UnePlage.Rows.Count + 5).Name = "Plage" ' 5 lignes de +
MsgBox Names("Plage").RefersTo 'A1:B7
End Sub
Daniel Maher, (N°1155)
Portée des noms définis
Lorsque l'on définit un nom (Insertion Définir Nom) et que l'on saisit une formule, il y a un problème de recalcul si cette fonction est recopiée sur plusieurs onglets. Pourquoi et comment contourner le problème ?
1/ La portée d'un nom peut être relative à chaque onglet sans créer un nom par onglet.
Après avoir créé MaFonc dans la Feuille1, revenir dans Insertion / Nom /Définir pour ne
laisser
que le point d'exclamation : on a =!$1 au lieu de Feuil1!$1
2/ Je peux créer =MaFonc dans l'onglet Feuil2, le $1 fera référence à la cellule A1 de
l'onglet Feuil2 et non à celle de Feuil1
3/ Ceci marchait parfaitement dans Excel 5. Dans Excel 97 et 2000, le recalcul ne se fait
pas.
4/ Avec le "truc" suivant, cela fonctionne :
Dans une cellule, par exemple AutreFeuil!$1, mettre =si(maintenant();0;0) et modifier le
nom
MaFonc par = !$1 + AutreFeuil!$1
Cela force le recalcul.

Attention cependant, parceque la solution de la définition d'un nom par =!$1 est non
volatile !
Pas de mise à jour des calculs utilisant ce nom quand on change la valeur de A1. Pour
garder une solution dynamique,
Insertion > Nom > Définir > Nom dans le classeur :
"varA1" > fait référence à :
=INDIRECT("$1")
Xavier, Alain Vallon, (N°1154)
Zone nommée avec cellules non adjacentes
Peut-on construire une zone nommée avec des cellules non adjacentes ?
Oui on peut. Cette zone peut être ensuite utilisée par son nom dans certaines
fonctions comme MOYENNE, SOMME, NBVAL..etc.

Le problème est que certaines fonctions telles que, NB.SI, SOMME.SI, les SommeProd
et matricielles..etc.., ne le supportent pas !

Un interêt assez peu connu et non négligeable :
Lorsqu'on nomme une plage discontinue de "cellules solitaires non
verroullées" en utilisant la touche Ctrl, on peut, (après protection de la
feuille) se balader dans cette plage (avec la touche Tab), dans l'ordre
strictement défini par la chronologie de la sélection.
Alain Vallon, (N°1153)
Nommer des feuilles sans doublon
Par VBA, comment demander à un utilisateur de donner un nom à une feuille qui est crée et comment contrôler que ce nom n'est pas déjà attribué à une autre feuille ?
Sub NouvelleFeuille()
ActiveWorkbook.Sheets.Add
Do
Nom = InputBox("Entrez un nom pour la nouvelle feuille :")
If Nom = "" Then Exit Sub
On Error Resume Next
Set sht = Sheets(Nom)
If Err <> 0 Then

ActiveSheet.Name = Nom
Err.Clear: Exit Do
Else
MsgBox "Une feuille de ce nom existe déjà !"
End If
Loop
End Sub

****************************
Ou encore pour éviter les goto et vérifier que les noms de feuille choisis sont valides :
Sub NomOnglet()
Dim Rep As String

msg = "Comment voulez-vous nommer la nouvelle feuille ?"
Rep = InputBox(msg, "Saisie du nom")
If Rep = "" Then Exit Sub
On Error Resume Next
Application.ScreenUpdating = False
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Rep
If Err <> 0 Then
Err.Clear
With Application
.ScreenUpdating = True
.DisplayAlerts = False
End With
ActiveSheet.Delete
msg = "Le nom de feuille que vous avez tapé n'est pas valide !" _
& vbCrLf
msg = msg & vbCrLf
msg = msg & "- Vérifiez que le nom de la feuille ne dépasse " _
& "pas 31 caractères" & vbCrLf
msg = msg & "- Vérifiez que le nom de la feuille ne contient " _
& "aucun des caractères suivants :" & vbCrLf
msg = msg & " \ / : ? * [ ou ]" & vbCrLf
msg = msg & "- Vérifiez qu'une feuille du classeur ne possède " _
& "pas déjà un nom identique" & vbCrLf
Reponse = MsgBox(msg, , "Saisie invalide")
NomOnglet
End If
End Sub
Frédéric Sigonneau, ChrisV, (N°1152)
Nommer une plage de cellules
Comment faire pour attribuer un nom à une plage de cellules ?
Méthode de base :
Sélectionne la plage en question puis menu
insertion/nom/définir, entre le nom et ensuite tu peux te référer à cette plage
par son nom dans tes formules. Maintenant si cette plage de cellules est appellée à varier,
regarde du côté de la fonction decaler.

Pour faciliter la saisie du nom, tu peux aussi, à gauche de la barre de formule, là ou
normalement tu vois l'adresse de ta cellule entrer le nom que tu veux pour la plage
sélectionnée. Quand tu passes la souris sur cette barre tu vois d'ailleurs écrit "zone de
nom". Entre le nom et valide avec retour. Attention, l'utilisation de cette zone n'est pas
des plus évidentes ensuite pour supprimer/modifier les noms ou les références. En cas de pb
repasse par le menu.
Tu peux d'ailleurs aussi donner un nom à des graphiques de cette manière. Pour cela attention,
il ne faut pas cliquer sur le graphe pour le sélectionner mais aller dans
édition/atteindre/cellules/objets et ensuite utiliser la touche tab pour sélectionner l'objet
(graphe) de ton choix.

Si c'est par VBA :
ActiveWorkbook.Names.Add Name:="PLAGE1",RefersToR1C1:="=Feuil1!R1C10:R5C10"


Si tu es amené à nommer fréquemment des cellules tu peux utiliser cette macro de Frédéric qui
permet
d'aller directement dans le menu insertion/nom/définir sur un clic droit de souris : Avec ça tu
sélectionnes ta plage à nommer, clic droit, "Définir un nom..." et la boite de
dialogue s'affiche directement :

'dans un nouveau classeur à enregistrer en .xla
'dans le module ThisWorkbook :
Private Sub
Workbook_AddinInstall()
CmdNommer
End Sub

Private Sub
Workbook_AddinUninstall()
DelNommer
End Sub
'================================

'dans un module standard
Public Const Nommer = "Définir un nom..."

Sub CmdNommer()
Dim cBar As CommandBar,
Ctrl As CommandBarButton

Set cBar = Application.CommandBars("Cell")
Set
Ctrl = cBar.Controls.Add(msoControlButton, ID:=878, before:=1)
With Ctrl

.Caption = Nommer
.FaceId = 1838
.Style = msoButtonIconAndCaption

End With
End Sub

Sub DelNommer()
On Error Resume Next
Application.CommandBars("Cell").Controls(Nommer).Delete
End Sub


n'oublions pas la très pratique "définition collective de noms" par *Insertion Nom
Créer* (raccourci CTRL MAJ F3) qui permet de définir d'un coup toutes les colonnes et/ou les
lignes d'un tableau en s'appuyant sur les étiquettes de lignes et/ou de colonnes dudit tableau.
Flo Cabon, Thierry Rural, Frédéric Sigonneau, Bernard Mazas, (N°1151)
Nom d'une feuille dans une cellule
Existe-t-il une fonction permettant de renvoyer le nom d'une feuille dans une cellule ?
La formule suivante suppose que le classeur a déjà été enregistré au moins une
fois. Elle repose sur la formule =CELLULE("filename";A1), renvoyant le chemin
d'accès complet de la feuille. Remplacer la référence A1 par celle de la cellule
où est saisie la formule.

=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;32)


Ou encore :
=DROITE(CELLULE("nomfichier");NBCAR(CELLULE("nomfichier"))-TROUVE _
("]";CELLULE("nomfichier")))
Laurent Longre, Pierre Fauconnier, (N°1150)
Récupérer le nom de cellules
Dans un classeur, j'ai en colonne A des cellules qui toutes sont nommées. Je voudrais que dans la colonne B apparaisse le nom des cellules correspondantes de la colonne A.
Function NOM(Cellule As Range) As String
NOM = Cellule.Name.Name
End Function

Et ensuite : =NOM(A1)

Si tu renommes des cellules après coup, il faut faire un Ctrl-Alt-F9
pour mettre à jour les noms renvoyés par cette fonction.
Laurent Longre, (N°1149)
Insertion Nom Etiquettes
Est-ce que quelqu'un pourrait m'éclairer sur la commande Insertion Nom Etiquettes.
Lorsque l'option "Utiliser les étiquettes dans les formules" de l'onglet
"Calcul" de la boite "Options" du menu "Outils" est cochée, il
est possible
d'utiliser des étiquettes de lignes et de colonne dans un tableau.

Ainsi, dans un tableau qui aurait en :
B1 - Janvier
C1 - Février
D1 - Mars
A2 - Stylos
A3 - Papiers

on peut utiliser en E2 la formule "=somme(stylos)". Cette formule peut être
tirée vers le bas et Excel convertit automatiquement en "somme(papiers").
Même chose en vertical avec les mois.

On peut aussi utiliser une la formule "sytlos janvier" (avec l'espace entre
les deux mots), pour obtenir directement la valeur de B2.

Lorsque les étiquettes sont des dates, il faut les entrer dans la formule
avec le signe ' qui encadre l'étiquette.
Si on a en B1 la valeur 13/01, on doit saisir "=somme('13/01')" pour obtenir
une formule valide. Pour éviter cela, on peut utiliser l'insertion de noms
d'étiquettes. Pour l'exemple ci-dessus, on se positionne en B1, on utilise
le menu Insertion, Nom, Etiquette (Excel 2000) ou Insertion, Nom, Intitulé
(Excel 97, si je ne me trompe). Il n'est alors plus nécessaire d'utiliser
les signes ' dans la formule.
ChrisV, (N°1148)
Nom du classeur, de la feuille du chemin... dans une cellule
Comment faire apparaître dans une cellule de la feuille le nom d'un onglet, d'un classeur, d'un répertoire ...?
Attention, les formules doivent être sur une seule ligne...

1. Chemin d'accès complet :
=CELLULE("filename";A1)

2. Répertoire:
=GAUCHE(CELLULE("filename";A1);TROUVE("[";CELLULE("filename"A1))-2)

3. Nom du classeur seul:
=STXT(CELLULE("filename";A1);TROUVE("[";CELLULE("filename";A1))+1;SOMME(TROUVE({"[";"]"};CELLULE("filename";A1))*{-1;1})-1)

4. Nom de la feuille:
=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;32)

5. Répertoire + classeur:
=SUBSTITUE(GAUCHE(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))-1);"[";"")


6. Nom du classeur et de la feuille:
=STXT(CELLULE("filename";A1);TROUVE("[";CELLULE("filename";A1));300)

Et... comment ça marche ce truc ?
=STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;32)

la formule =CELLULE("filename";A1) retourne le chemin complet. par exemple:
C:\Documents and Settings\Administrateur\Application Data\Microsoft\Excel\XLSTART\[PERSO.XLS]Feuil4

tu remarques que le nom du classeur est mis entre crochets [ ]
il reste à trouver l'emplacement de "]" ce que fait la fonction
TROUVE("]";CELLULE("filename";A1)
et la fonction STXT
STXT(texte;no_départ;no_car)
avec un no_car à 32 nous donne la fin du texte car il est très rare que le nom d'une feuille comporte plus de 32 caractères.
Laurent Longre, Isabelle, (N°1147)
Retrouver les cellules nommées
Comment retrouver dans une feuille les adresses correspondant aux cellules nommées ?
sans VBA :
Insertion / Nom / Coller / Coller une liste
fournit la liste des noms du classeur avec leurs références.
Avec une exception majeure : les noms "3D"...

Qu'est ce qu'un nom 3D ?
C'est un nom (toto) affecté à la cellule A2 par exemple de toutes
les feuilles d'un classeur.
Son nom sur la feuil1 est feuil1!toto
la même cellule A2 sur la feuille 2 s'appelle feuil2!toto

ces noms n'apparaissent pas lorsque tu colles la liste comme ci-dessus.
Si tu veux récupérer la liste complète des noms d'un classeur, tu peux
utiliser cette macro à mettre dans un module standard : elle liste les
noms de plage du classeur dans une feuille appelée "Noms de plage"
qu'elle crée si elle n'existe pas.

Sub NomPlages()
Dim Feuille As Worksheet
Dim FeuilleExiste As Boolean
Dim Nom As Name
Dim Cellule As Range
For Each Feuille In ActiveWorkbook.Sheets
If Feuille.Name = "Noms de plage" Then FeuilleExiste = True
Next Feuille
If FeuilleExiste = True Then
Sheets("Noms de plage").Cells.Delete
Else
Set Feuille = ActiveWorkbook.Sheets.Add()
Feuille.Name = "Noms de plage"
End If
Set Feuille = Sheets("Noms de plage")
With Feuille
.Range("a1") = "Nom"
.Range("b1") = "Référence"
For Each Nom In ActiveWorkbook.Names
Set Cellule = .Range("a65536").End(xlUp)(2)
Cellule = Nom.Name
Cellule(1, 2).Value = "'" & Nom.RefersTo
Next Nom
End With
End Sub
Pierre Fauconnier, (N°1146)
Activer une feuille par son nom VBA
Dans un classeur j'ai une feuille nommée par VBA dans la fenêtre propriété "feuille_zaza", le nom de son onglet étant zaza. Qu'elle est la syntaxe pour activer cette feuille par son nom "feuille_zaza", (qui est le même dans 20 classeurs différents à traiter) et non pas par son numéro ou son nom d'onglet qui peut être en 3 langues différentes ?
Workbooks("rien.xls").VBProject.VBComponents("feuille_zaza").Activate
Jacques Chaussard, (N°1145)