Voilà j'ai un problème lorsque j'essaie de supprimer des références non valides dans un classeur avec le code ci-dessous :
Dim chkRef As Reference
For Each chkRef In Workbooks("Toto.xls").VBProject.References
If chkRef.IsBroken Then
Workbooks("Toto.xls").VBProject.References.Remove chkRef
End If
Next
j' obtiens le message ci-dessous :
"Erreur d'exécution '-2147319779(8002801d)' :
Bibliothèque d'objet non enregistrée"
Bonjour,
pas sûr de moi, mais il me semble bien avoir déjà traité dans le passé ce genre de cas .
Essaye ceci, (pas sur de moi) (exemple sur classeur actif) :
Dim Ref As Object
For Each Ref In ThisWorkbook.VBProject.References
If Ref.IsBroken = True Then ThisWorkbook.VBProject.References.Remove Ref.Name
Next Ref
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Merci pour la rapidité de la réponse.
Je viens d'essayer en plaçant le code dans le type fichier posant problème (sachant que je préfèrerais lancer la macro d'un autre fichier), et le résultat est identique...
Il est possible que :
1) il faille déclarer spécifiquement l'objet projet
2) ce ne soit finalement pas une référence incorrecte, mais une référence manquante
Lance ceci (depuis le classeur concerné, pour l'instant)
Dim Proj As VBProject
Dim refe As Reference
Set Proj = ThisWorkBook.VBProject
For Each refe In Proj.References
If refe.IsBroken Then
msgbox refe.Name
End If
Next
Si référence incorrecte, tu devrais voir la msgbox te dire laquelle
Si pas de msgbox ===>> problème autre que de référence incorrecxte.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Ah oui. Un "détail" important !
Où as-tu mis ce code ?
Il doit être le tout premier exécuté, à l'ouverture de ton classeur.
De sorte à être certain de ce que ton message d'erreur n'intervienne pas ailleurs dans ton code (là où il ferait appel à cette référence), bien évidemment !
Et le fait de supprimer la référence n'y changera rien tant que tu n'auras pas supprimé la/les ligne(s) de code faisant appel à cette référence ou que tu ne l'auras pas remplacée (la référence) par celle adéquate.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Vous n’avez pas trouvé la réponse que vous recherchez ?
Si référence incorrecte, tu devrais voir la msgbox te dire laquelle
Si pas de msgbox ===>> problème autre que de référence incorrecxte.
Pas un mot à propos de l'apparition ou non de la msgbox ? (c'est pourtant important, de le savoir !)
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Et bien étant données que le fichier ayant cette référence manquante présente un problème de chargement des bibliothèques à l'ouverture (avant le Workbook_Open), il est impossible de lancer une macro avec "Dim Proj As VBProject" comme déclaration.
Donc la macro :
Dim Proj As VBProject
Dim refe As Reference
Set Proj = ThisWorkBook.VBProject
For Each refe In Proj.References
If refe.IsBroken Then
msgbox refe.Name
End If
Next
ne fonctionne pas, hormis si j'enlève manuellement la mauvaise référence avant...
donc pas trop d’intérêt.
De façon plus général, sur cette référence manquante, il n'y a que la propriété .IsBroken, que je peux exploiter.
Toute ce qui est .Name, .FullPath, .GUID,... me renvoie toujours ce message d'erreur.
Je pense, malheureusement, que je vais devoir décocher manuellement cette référence dans tous les fichiers de ce modèle.