XL 2019 Supprimer noms des colonnes d'une feuille

  • Initiateur de la discussion Initiateur de la discussion carlos
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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...
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:
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.
 
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
 
Les 2 propositions marchent sur le fichier joint mais pas dans mon projet qui a plusieurs feuilles
Meme erreur des 2 propositions.
1725091040638.png
 
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
 
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
 
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+
 
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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
243
Réponses
7
Affichages
212
Réponses
2
Affichages
203
Réponses
10
Affichages
282
Réponses
4
Affichages
180
Retour