[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 :)