Problème de suppression de référence vba par code

Dadi79 Messages postés 4 Date d'inscription jeudi 26 mai 2011 Statut Membre Dernière intervention 18 février 2012 - 17 févr. 2012 à 17:08
Dadi79 Messages postés 4 Date d'inscription jeudi 26 mai 2011 Statut Membre Dernière intervention 18 février 2012 - 18 févr. 2012 à 02:20
Bonjour à tous,

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"

Y a-t-il qqn qui puisse m'aider?

D'avance merci

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 févr. 2012 à 17:26
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
0
Dadi79 Messages postés 4 Date d'inscription jeudi 26 mai 2011 Statut Membre Dernière intervention 18 février 2012
17 févr. 2012 à 18:59
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...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 févr. 2012 à 19:14
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 févr. 2012 à 19:31
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dadi79 Messages postés 4 Date d'inscription jeudi 26 mai 2011 Statut Membre Dernière intervention 18 février 2012
17 févr. 2012 à 22:03
Même en mettant ce code en tout début de la procédure Workbook_Open cela ne change rien, j'ai toujours le même message...

En ce qui concerne le remplacement de la référence manquante, une fois celle-ci ôtée du projet, je pense que je m'en sortirai sans pb
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 févr. 2012 à 22:44
Et ?
pour mémoire :
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
0
Dadi79 Messages postés 4 Date d'inscription jeudi 26 mai 2011 Statut Membre Dernière intervention 18 février 2012
18 févr. 2012 à 02:20
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.
0
Rejoignez-nous