Noms de cellules et noms de champs

Accueil

Nommer un champ
ListeNoms
Nom Local
Nom 3D
Nom Champ Dyn
Nommer un champ en VBA
Liste des noms utilisés par des formules
Supprimer les noms inutilisés
Formulaire Suppression
Liste des commentaires et des noms des cellules

Nommer un champ

Lorsque des cellules ont étés nommées, elles peuvent être référencées par leur nom.
Les formules deviennent ainsi plus lisibles.

Sur l'exemple, nous nommons la cellule E1 (CSG):

  • Sélectionner E1
  • Insertion/Noms/Définir (Excel2010:Formules/Définir un nom)
  • Appeler Csg
  • Ecrire en C7: =B4*Csg

Noms.xls

Raccourci pour nommer une cellule ou un champ

-Sélectionner la cellule (E1)
-Frapper le nom (Csg) en haut à gauche à la place du numéro de cellule
-Valider avec Entrée

Liste des noms de champs

La commande Insertion/Noms/Coller/Coller une liste donne la liste des noms de champs

Nom Local à un onglet

-Sélectionner la cellule
-Insertion/Nom/Défnir
-Frapper NomOnglet!NomChamp

Noms de champ en 3D

-Insertion/Nom/définir
-Frapper un nom (CA3D)
-Cliquer dans référence à
-Appuyer sur Maj
-Cliquer sur juin
=Janvier:Juin!$B$2:$B$5

Noms de champ dynamique

-Insertion/Nom/Définir
-MonChamp

=DECALER($B$2;0;0;5;$M$2)

Nommer des champs en VBA

ActiveWorkbook.Names.Add Name:="ww", RefersTo:=Range("A1:A3")
ActiveWorkbook.Names.Add Name:="xxx", RefersTo:="=Feuil1!$A$1"
ActiveWorkbook.Names.Add Name:="Feuil2!yyy", RefersTo:="=Feuil2!$A$1" ' nom local à feuil2
ActiveWorkbook.Names.Add Name:="xx", RefersTo:="=12"
ActiveWorkbook.Names.Add Name:="yy", RefersTo:="={2,3,4}"
ActiveWorkbook.Names("yy").Delete
ActiveWorkbook.Names.Add Name:="xxx", RefersToR1C1:="=Sheet1!R1C1", Visible:=False
ActiveWorkbook.Names.Add Name:="zzz", RefersTo:="=feuil1!$A$1", Visible:=False

Sur cet exemple, les noms de champ sont les libellés de la première ligne

Sub NommerChamps()
  For Each c In Range([A1], [IV1].End(xlToLeft))
    If Not IsEmpty(c.Offset(1, 0)) Then
       ActiveWorkbook.Names.Add Name:=c, RefersTo:="=" & Range(c.Offset(1, 0), c.End(xlDown)).Address
    End If
  Next
End Sub

Sub NommerChampsDynamique()
  For Each c In Range([A1], [IV1].End(xlToLeft))
    If Not IsEmpty(c.Offset(1, 0)) Then
      ActiveWorkbook.Names.Add Name:=c, RefersTo:= _
       "=OFFSET(" & c.Address & ",,,COUNTA(" & c.EntireColumn.Address & ")-1)"
     End If
   Next
End Sub

Liste des noms de champ du classeur

Sub ListeNomsClasseur2()
  Dim n As Name
  i = 2
  For Each n In ActiveWorkbook.Names
    Cells(i, 1) = n.Name
    Cells(i, 2) = n
    Cells(i, 3) = n.Visible
    i = i + 1
  Next n
End Sub

aaaa

=Feuil1!$D$7

Feuil1!bbbb

=Feuil1!$C$15

cccc

=Feuil2!$C$5

Feuil3!dddd

=Feuil1!$D$11

Fonction liste des noms de champ

La liste est mise à jour dynamiquement.

FonctionNomsChamps

Sélectionner A2:B10
=listenoms()
Valider avec maj+ctrl+entrée

Function ListeNoms()
  Application.Volatile
  Dim n As Name
  Dim a()
  ReDim a(1 To Application.Caller.Rows.Count, 1 To 2)
  i = 1
  For Each n In ActiveWorkbook.Names
    a(i, 1) = n.Name
    a(i, 2) = n
    i = i + 1
  Next n
  ListeNoms = a
End Function

Récupérer le nom d'une cellule nommée

nom = [D7].Name.Name

Supprimer les noms de champ d'un classeur

For Each n In ActiveWorkbook.Names
   N.Delete
Next N

Supprimer les noms de champ d'une feuille

F = "feuil1"
For Each n In ActiveWorkbook.Names
  If InStr(UCase(n), UCase("=" & F & "!")) > 0 Then n.Delete
Next N

Liste des noms de champs utilisés par des formules

Le programme ci dessous donne la liste des noms de champs d'un classeur et indique s'ils sont utilisés par des formules. - Noms Champs -

Sub ListeNomsChamps()
   Application.DisplayAlerts = False
   On Error Resume Next
   Sheets("TempNoms").Delete
   On Error GoTo 0
   Sheets.Add after:=Sheets(Sheets.Count)
   ActiveSheet.Name = "TempNoms"
   [A1] = "Noms de champ"
   [C1] = "Utilisé"
   [A1:C1].Font.Bold = True
   nchamps = 0
   For Each n In ActiveWorkbook.Names
     nchamps = nchamps + 1
     Cells(nchamps + 1, 1) = n.Name
     Cells(nchamps + 1, 2) = n
   Next n
   '--- Formules qui utilisent les noms de champ
   Ligne = 1
   [E1] = "Formules utilisant les noms de champs"
   [E1].Font.Bold = True
   For s = 1 To Sheets.Count - 1
   Sheets(s).Select
   On Error Resume Next
   Sheets(s).Cells.SpecialCells(xlCellTypeFormulas, 23).Select
   If Err = 0 Then
      For Each c In Sheets(s).Cells.SpecialCells(xlCellTypeFormulas, 23)
        témoin = False
        For I = 1 To nchamps
          temp = Sheets("tempNoms").Cells(I + 1, 1)
          If InStr(temp, Sheets(s).Name & "!") > 0 Then
             temp = Mid(temp, InStr(temp, "!") + 1)
          End If
          If InStr(c.Formula, temp) > 0 Then
             Sheets("TempNoms").Cells(I + 1, 3) = True
             témoin = True
          End If
        Next I
        If témoin Then
          Ligne = Ligne + 1
          Sheets("TempNoms").Cells(Ligne, 5) = "'" & Sheets(s).Name
          Sheets("TempNoms").Cells(Ligne, 6) = "'" & c.Address
          Sheets("TempNoms").Cells(Ligne, 7) = "'" & c.Formula
        End If
      Next c
    End If
  Next s
  Sheets("TempNoms").Columns("A:K").EntireColumn.AutoFit
  Sheets("TempNoms").Select
End Sub

Supprimer les noms de champs inutilisés


Sub supNomsInutilises()
  ListeNomsChamps
  Sheets("TempNoms").Select
  For Each c In Range("A2", [A65000].End(xlUp))
    If Not c.Offset(0, 2) Then
      ActiveWorkbook.Names(c.Value).Delete
    End If
   Next c
End Sub

Formulaire de suppression de noms

SupNoms

Private Sub UserForm_Initialize()
  For Each n In ActiveWorkbook.Names
    Me.ListBox1.AddItem n.Name
  Next n
End Sub

Private Sub B_sup_Click()
   If Me.ListBox1.ListIndex <> -1 Then
     If MsgBox("Etes vous sûr de supprimer ? " & Me.ListBox1, vbYesNo) = vbYes Then
        ActiveWorkbook.Names(Me.ListBox1.Value).Delete
        Me.ListBox1.RemoveItem Me.ListBox1.ListIndex
     End If
   End If
End Sub

Suppression des noms commençant par xxxxx

Sub supnoms()
  For Each n In ActiveWorkbook.Names
     If Left(n.Name, 7) = "tableau" Then n.Delete
  Next n
End Sub

Crée un onglet avec les commentaires de la feuille active et les noms des cellules

CommentairesNoms

Sub CommentNomsChamp()
  mafeuille = ActiveSheet.Name
  Application.DisplayAlerts = False
  On Error Resume Next
  Sheets("TempNoms").Delete
  On Error GoTo 0
  Sheets.Add after:=Sheets(Sheets.Count)
  ActiveSheet.Name = "TempNoms"
  MEF
  ligne = 2
  For Each c In Sheets(mafeuille).Comments
    z = nomChamp(mafeuille & "!" & c.Parent.Address)
    With Sheets("TempNoms")
      .Cells(ligne, 1) = "Cellule:"
      .Cells(ligne + 1, 1) = "Commentaire:"
      .Cells(ligne, 2) = IIf(z <> "", z, c.Parent.Address)
      .Cells(ligne + 1, 2) = c.Text
    End With
    ligne = ligne + 3
  Next c
End Sub

Function nomChamp(adr)
  For Each n In ActiveWorkbook.Names
    If Mid(n, 2) = adr Then nomChamp = n.Name
  Next n
End Function

Sub MEF()
   ActiveWindow.DisplayGridlines = False
   With Columns("A:A")
    .ColumnWidth = 14.29
    .Font.Bold = True
    .VerticalAlignment = xlTop
    .HorizontalAlignment = xlRight
  End With
  Columns("B:B").ColumnWidth = 35
End Sub

 


 

 

 

 

 


Exemples

Noms
Noms 2007
Noms Champs
Commentaires Noms