XL 2010 Supprimer le nom de cellules

David73

XLDnaute Nouveau
Bonjour,
je souhaite créer une macro qui supprime les noms des cellules sélectionnées :
VB:
Sub Suppression()
'   Supprime le nom d'une cellule
    For Each r In Selection
        If r.Name <> "" Then
            r.Name.Delete
        End If
    Next
End Sub

Le problème est que j'ai une erreur lorsque une cellule sélectionnée n'a pas de nom :
"Erreur d'exécution 1004"

Il faudrait faire un test mais je n'y parviens pas.
Si quelqu'un aune idée.
Merci
 

xUpsilon

XLDnaute Accro
Bonjour David

Remplace On Error Resume Next par
VB:
Dim i as integer
On Error GoTo Erreur
i = 0

Erreur :
i = i + 1


Msgbox "Il y a eu" & i & "erreurs"

La dernière ligne doit être insérée à la fin de ton programme, et pas dans la fonction Erreur.

Bonne continuation
 

David73

XLDnaute Nouveau
Bonjour David

Remplace On Error Resume Next par
VB:
Dim i as integer
On Error GoTo Erreur
i = 0

Erreur :
i = i + 1


Msgbox "Il y a eu" & i & "erreurs"

La dernière ligne doit être insérée à la fin de ton programme, et pas dans la fonction Erreur.

Bonne continuation

J'ai fait cela mais il me sort une erreur 400 :
VB:
Sub Suppression()
    On Error GoTo Erreur
    i = 0
'   Supprime le nom d'une cellule
    For Each r In Selection
        If r.Name <> "" Then
            r.Name.Delete
        End If
Erreur:
    i = i + 1
    Next
    MsgBox "Il y a eu" & i & " erreurs"
End Sub
 

xUpsilon

XLDnaute Accro
VB:
Sub Suppression()
    On Error GoTo Erreur
    i = 0
'   Supprime le nom d'une cellule
    For Each r In Selection
        If r.Name <> "" Then
            r.Name.Delete
        End If
    Next
    MsgBox "Il y a eu" & i & " erreurs"
    
Erreur:
    i = i + 1
    
End Sub

Plutôt ça

Bonne continuation
 

eriiic

XLDnaute Barbatruc
Bonjour,

xUpsilon, il faudrait peut-être tester tes propositions avant de poster...
VB:
Sub test()
    Dim c As Range, nb As Long
    For Each c In Selection
        On Error Resume Next
        c.Name.Delete
        If Err Then nb = nb + 1
        On Error GoTo 0
    Next c
    MsgBox nb & " noms absents"
End Sub
eric
 

eriiic

XLDnaute Barbatruc
Sauf si déclarées Static, les variables sont toutes vides au lancement d'une macro, pas besoin de les vider plus.

Ca fonctionne aussi ; cette ligne a-t-elle une autre utilité ?
Il faut rétablir la gestion d'erreur dès que la partie concernée est passée.
Même si ici on pourrait s'en passer il faut garder cette bonne habitude pour des raisons de clarté, et surtout être alerté des erreurs non prévues pour les déboguer..
eric
 

David73

XLDnaute Nouveau
Encore une petite question.
Lorsque j'ai une grande sélection (exemple 100 cellules) le décompte des erreurs (noms absents) se fait mal.
Il faut relancer une deuxième fois pour que le décompte se fasse bien.
Faut-il mettre une tempo dans la boucle ?
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Sorti de la poussière de mes archives
VB:
Sub DeleteName()
Dim nName As Name
For Each nName In Names
If Not Intersect(Selection, Range(nName.Name)) Is Nothing Then
nName.Delete
End If
Next nName
'///->D.Hawley|171105|WA///
End Sub
 

job75

XLDnaute Barbatruc
Bonsoir David73, xUpsilon, eriiiic, JM,

Oui JM on peut se passer du contrôle d'erreur mais comme ceci :
VB:
Sub a()
Dim n As Name, i
ActiveCell.Activate 'au cas où la sélection n'est pas un Range
For Each n In ThisWorkbook.Names
    If TypeName(Evaluate(n.Name)) = "Range" Then _
        If Evaluate(n.Name).Parent.Name = Selection.Parent.Name Then _
            If Evaluate(n.Name).Count = 1 Then _
                If Not Intersect(Evaluate(n.Name), Selection) Is Nothing Then n.Delete: i = i + 1
Next
MsgBox IIf(i, i, "Aucun") & " nom" & IIf(i > 1, "s", "") & " supprimé" & IIf(i > 1, "s", "") & " dans la sélection..."
End Sub
Bonne nuit.
 

Discussions similaires

Statistiques des forums

Discussions
312 047
Messages
2 084 864
Membres
102 690
dernier inscrit
souleymaane