[VBA] Erreur "=#NAME?" - Non répétable

Bonsoir,

Parfois, j'ai un bug qui survient lors de l'export d'une feuille après mise à jour.

Le code en question est le suivant :

Sub ExporterBDD()
Dim Destination$, nm As Name

Destination = ThisWorkbook.Path & "\Bases de données\"
If FeuilleExiste("BDD_SAISIE_LISTE") = True Then Sheets("BDD_SAISIE_LISTE").Visible = xlSheetVisible
    Worksheets("BDD_SAISIE_LISTE").Copy
    For Each nm In ActiveWorkbook.Names: nm.Delete: Next
        With ActiveWorkbook
            .SaveAs Filename:=Destination & "BDD_SAISIE_LISTE" & Year(Now) & "_" & Month(Now) & "_" & Day(Now) & "_" & Hour(Now) & "_" & Minute(Now) & ".xlsx", FileFormat:=xlOpenXMLWorkbook
            .Close SaveChanges:=False
        End With
Call hide_nohide_BSF
    If Sheets("Options").Cells(71, 1) = 1 Then MsgBox "La base de données BDD_SAISIE_LISTE a été mise à jour et exportée dans le dossier associé.", vbInformation
End Sub

Je ne peux pas mettre de fichier exemple, car l'erreur n'apparaît pas dans mon document exemple (ni dans mon document de travail, ... sauf quelques fois)..

Je me retrouve avec une erreur sur la variable nm qui se retrouve nommée : "=#NAME?"

Avec la génération d'une erreur 91 "classe non enregistrée" (puis des indications sur certains caractères non autorisés).

Avec ce minimum d'informations, j'espère que vous aurez une idée de ce qui peut générer ce souci. Autrement je vais continuer à tester et essayer d'avoir une erreur reproductible systématiquement.

Bonne journée !

Bonjour,

Personnellement, je trouve que la forme d'écriture de la ligne suivante bien que correcte, ne facilite pas la recherche d'une erreur.

For Each nm In ActiveWorkbook.Names: nm.Delete: Next

Je préfère utiliser la forme plus classique mais plus aisée pour l'interprétation et surtout plus facile pour placer un point d'arrêt à chaque étape

For Each nm In ActiveWorkbook.Names
     nm.Delete
Next

Essayez de commencer par là.

Cdlt

bonjour,

Je pense que vous ne pouvez pas utiliser ce genre de macro, sauf à paramétrer vos Name de manière à filtrer ce que vous aller supprimer.

Par exemple si tous vos Name sont préfixés avec "ww" par exemple, vous pouvez supprimer tous les names dont le nom commence par "ww"

Sub test()
Dim nm As Name
For Each nm In ActiveWorkbook.Names
     If Left(nm.Name, 2) = "ww" Then nm.Delete
Next
End Sub

En prenant soin de préfixer vos Name de manière sécurisée.

En effet la collection de Names comporte des éléments visible ou invisible dont certains -si nécessaire- sont générés et gérés par Excel. Il importe donc de faire en sorte qu'il ne risque pas d'y avoir de conflit...

A+

Bonjour,

Je vous remercie pour vos réponses !

J'ai donc opté pour modifier ce bout de code comme ceci :

Worksheets("BDD_SAISIE_LISTE").Copy
    For Each nm In ActiveWorkbook.Names
        If nm = BDD_SAISIE_LISTE Then nm.Delete
    Next nm

Je n'ai pas d'erreur.

Et en fait.. Je ne me rappelle même plus pourquoi j'ai ce bout de code. Je l'ai supprimé et le tout s'exécute pareil. ^^'

Il va encore falloir que je me replonge dans certains anciennes macro pour faire le ménage..

Bonne fin de journée :)

Rechercher des sujets similaires à "vba erreur name repetable"