XL 2019 Supprimer noms des colonnes d'une feuille

carlos

XLDnaute Impliqué
Supporter XLD
Bonjour,
J'aimerais effacer les noms attribués aux colonnes avec ce code mais cela ne marche pas.
Private Sub CommandButton1_Click()
Dim N As Name
With Worksheets("Test")
For Each N In .Names
N.Delete
Next
End With

Merci
 

Pièces jointes

  • Supprimer les noms des colonnes d'une feuille.xlsm
    19.4 KB · Affichages: 8
Solution
Bonjour à tous :),

Un autre code qui tient compte aussi des noms désignant des zones à plusieurs colonnes disjointes ou non (ces noms seront supprimés) ou bien des noms faisant référence à un mélange de colonnes et de plages qui ne sont pas des colonnes (les noms seront conservés).
VB:
Sub OterNomColEntiere()
Const Feuille = "Test"
Dim N As Name, addr, xrg As Range, xarea As Range, xcol As Range, uniquementCol As Boolean
   DefinirNoms    ' >>>>> à supprimer hors ntest
   For Each N In ThisWorkbook.Names
      uniquementCol = True       ' a priori le nom de fait référence qu'à des colonnes (on va vérifier)
      ' si la rérérence du nom ne commence par "=" & Feuille alors uniquementCol est faux
      ' et on quitte la boucle (pas la...

Dranreb

XLDnaute Barbatruc
Bonjour.
Il y a deux noms de niveau classeur ChampsZER = Test!$C:$C et Nom =Test!A:$A
Mais il n'y a aucun nom de niveau feuille.
Réécrite comme ça la Sub les supprime bien :
VB:
Private Sub CommandButton1_Click()
   Dim N As Name
   For Each N In ThisWorkbook.Names
      If N.RefersToRange.Worksheet.Name = Me.Name Then N.Delete
      Next N
   End Sub
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Carlos, Oneida, Dranreb,
Si j'ai bien compris :
VB:
Private Sub CommandButton1_Click()
Dim N
With Worksheets("Test")
    For Each N In ActiveWorkbook.Names
        N.Delete
    Next
End With
End Sub
Mais cela efface tous les noms de colonnes, sans aucun filtrage, sinon introduire des IF ou Case pour filtrer.
 

Dranreb

XLDnaute Barbatruc
Information: Les noms de niveau feuille correspondent aussi à des noms de niveau classeur mais dont la propriété Name est préfixée du nom de la feuille suivi d'un point d'exclamation.
La collection Names d'un objet Worksheet reprend ces objets Name de l'objet Workbook mais avec une clé d'accès différente de leur propriété Name, débarrassée du préfixe.
Votre procédure aurait donc supprimé des noms Test!ChampsZER et Test!Nom
 

carlos

XLDnaute Impliqué
Supporter XLD
Les 2 propositions marchent sur le fichier joint mais pas dans mon projet qui a plusieurs feuilles
Meme erreur des 2 propositions.
1725091040638.png
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Autre approche donné par Aria, supprime que les noms de colonnes à l'exception de tous autres :
VB:
Private Sub CommandButton1_Click()
    Dim nom As Name
    ' Parcourir tous les noms dans le gestionnaire de noms
    For Each nom In ThisWorkbook.Names
        ' Vérifier si le nom fait référence à une colonne
        If InStr(1, nom.RefersTo, ":") > 0 Then
            nom.Delete      ' Supprimer le nom
        End If
    Next nom
    MsgBox "Tous les noms de colonnes ont été supprimés avec succès !"
End Sub
 

carlos

XLDnaute Impliqué
Supporter XLD
Super , ca marche avec ce code :
Sub SupNomF2()
Dim N As Name
On Error Resume Next
For Each N In ThisWorkbook.Names
If N.RefersToRange.Worksheet.Name = "BGT Santorin" Then N.Delete
Next N
End Sub
Bien joué le : On error resume next
Merci
Re,
Autre approche donné par Aria, supprime que les noms de colonnes à l'exception de tous autres :
VB:
Private Sub CommandButton1_Click()
    Dim nom As Name
    ' Parcourir tous les noms dans le gestionnaire de noms
    For Each nom In ThisWorkbook.Names
        ' Vérifier si le nom fait référence à une colonne
        If InStr(1, nom.RefersTo, ":") > 0 Then
            nom.Delete      ' Supprimer le nom
        End If
    Next nom
    MsgBox "Tous les noms de colonnes ont été supprimés avec succès !"
End Sub
Merci Sylvanu. Je la garde sous le coude
 

job75

XLDnaute Barbatruc
Bonjour carlos, le forum,

Cette macro supprime les noms définis dans le classeur ou dans des feuilles s'ils font référence à des colonnes entières :
VB:
Private Sub CommandButton1_Click()
Dim N As Name
For Each N In ThisWorkbook.Names
    If TypeOf Evaluate(N.RefersTo) Is Range Then If Evaluate(N.RefersTo).Rows.Count = Rows.Count Then N.Delete
Next
End Sub
A+
 

job75

XLDnaute Barbatruc
Cette macro supprime uniquement les noms qui font référence à des colonnes de la feuille "Test" et évite les noms des plages constituées de plusieurs zones :
VB:
Private Sub CommandButton1_Click()
Dim N As Name
For Each N In ThisWorkbook.Names
    If TypeOf Evaluate(N.RefersTo) Is Range Then _
        If Evaluate(N.RefersTo).Parent.Name = "Test" Then _
            If Evaluate(N.RefersTo).Areas.Count = 1 Then _
                If Evaluate(N.RefersTo).Rows.Count = Rows.Count Then N.Delete
Next
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous :),

Un autre code qui tient compte aussi des noms désignant des zones à plusieurs colonnes disjointes ou non (ces noms seront supprimés) ou bien des noms faisant référence à un mélange de colonnes et de plages qui ne sont pas des colonnes (les noms seront conservés).
VB:
Sub OterNomColEntiere()
Const Feuille = "Test"
Dim N As Name, addr, xrg As Range, xarea As Range, xcol As Range, uniquementCol As Boolean
   DefinirNoms    ' >>>>> à supprimer hors ntest
   For Each N In ThisWorkbook.Names
      uniquementCol = True       ' a priori le nom de fait référence qu'à des colonnes (on va vérifier)
      ' si la rérérence du nom ne commence par "=" & Feuille alors uniquementCol est faux
      ' et on quitte la boucle (pas la bonne feuille)
      If Not (N.RefersTo Like "=" & Feuille & "*") Then
         uniquementCol = False
      Else
         Set xrg = Range(Mid(N.RefersTo, 2))    ' le range qui définit N
         For Each xarea In xrg.Areas            ' pour chaque plage de xrg
            For Each xcol In xarea.Columns      ' pour chaque colonne de la plage
               ' si le nombre de ligne d ela plage n'est pas le nombre de colonne d'une feuille excel
               ' alors uniquementCol est faux et on quitte la boucle des colonnes
               If xcol.Rows.Count <> Rows.Count Then uniquementCol = False: Exit For
            Next xcol
            ' si on n'a pas que des colonnes entières dans la plage alors on quitte la boucle des plages
            If Not uniquementCol Then Exit For
         Next xarea
      End If
         ' si on a une plage qui ne contient des colonnes alors on efface le nom
         If uniquementCol Then N.Delete
   Next N
   AfficherNoms "Les Noms restant après traitement"    ' à >>>>> supprimer hors ntest
End Sub
 

Pièces jointes

  • carlos- supprimer nom ref à colonnes- v1.xlsm
    23 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
313 908
Messages
2 103 461
Membres
108 674
dernier inscrit
crcoast71