Problème de références !

Albadeath Messages postés 18 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 28 mars 2006 - 24 mars 2006 à 15:58
Albadeath Messages postés 18 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 28 mars 2006 - 28 mars 2006 à 11:27
Salut,
Je voudrais supprimer toutes les références d'une macro excel pour pouvoir rajouter les références nécessaires ensuite (C'est pour une compatibilité avec toutes les versions de Office).

J'ai essayé ces deux solutions :
Dim oRef As Object
Dim oRefs As References
Dim i As Integer
For Each oRef In oRefs 'première solution
oRefs.Remove (oRefs.Item(oRefs.Name))
Next oRef


For i = 1 To oRefs.Count 'Seconde solution
oRefs.Remove (oRefs.Item(i))
Next i

Mais cela ne fonctionne pas alors que tout à l'air bon. J'ai l'erreur membre de méthode introuvable pour la solution 1 et méthode non gérée par cet objet pour la solution2. Il doit quand même être possible de supprimer les référence par un numéro non? Je suis vraiment desespéré la...

6 réponses

jannoman Messages postés 256 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 20 février 2008 1
24 mars 2006 à 17:11
déja, algorithmiquement parlant, ce serait

For i = 1 To oRefs.Count 'Seconde solution
oRefs.Remove (oRefs.Item(1))
Next i

parce qu'au moment où tu supprime item(i), item(i+1) prend la plac de item(i)
ou bien

For i = oRefs.Count to 1 step (-1)
oRefs.Remove (oRefs.Item(i))
Next i

dernière chose : est ce que les indices commencent à 0 ou 1 ?

A+.
Thomas.
0
Albadeath Messages postés 18 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 28 mars 2006
24 mars 2006 à 17:32
Merci pour la petite subtilité mais de toute façon "oRefs.Item(i)" ne fonctionne pas. Apparemment il est impossible d'acceder à une référence par son numéro.
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
26 mars 2006 à 22:34
Salut albadeath, salut jannoman,

thomas a raison, sauf pour la faute de frappe oRefs.Item(1), mais il explique très bien après.
Ensuite oRef.Item(1) fonctionne très bien, tout comme fonctionne très bien oRefs("VBA")!
Maintenant, pour que fonctionne le bout de code qu'Albadeath présente il faut ajouter :
Set oRefs = VBProject.References
avant l'énumération!

Autre problème, normalement l'énumération va les sortir dans le même ordre que la liste de références dans le VBE, et pour les premières (par défaut) :
VBA 57101 Impossible de supprimer la référence par défaut
Excel 57101 Impossible de supprimer la référence par défaut
stdole 17 Impossible d'effectuer l'opération requise
Office 17 Impossible d'effectuer l'opération requise
VBIDE 17 Impossible d'effectuer l'opération requise

Moi, personnellement, je trouve les messages très explicites, comment se passer de VBA pour poursuivre l'énumération (for each), ou de VBIDE pour l'enumérateur (References)...

Ensuite, avec des indices, cela fonctionne aussi, et le mieux, comme le disait thomas, c'est en marche arrière (Count to 1) :

For i = oRefs.Count To 1 Step -1
oRefs.Remove oRefs(i)
Next i

Maintenant, pour toucher les références en cours d'exécution, il apparait que ce n'est pas possible (dixit le fichier d'aide VBA, sur erreur 17)! J'ai même essayé d'ouvrir un autre workbook et de lui enlever ses références, alors qu'il n'est pas en exécution, impossible! Je m'attendais à pouvoir le faire avec des références additionnelles, pas réussi non plus! (mais que fait la police!)

As-tu réussi une fois, albadeath un AddFromFile sur References? moi non. Mais si la méthode existe, elle doit bien être utilisable!

PS pour Thomas : dans cette dernière question, je fais référence à http://www.vbfrance.com/forum.v2.aspx?ID=695567

à suivre.


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
jannoman Messages postés 256 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 20 février 2008 1
27 mars 2006 à 08:58
merci rvblog, je saurais où aller chercher si un jour j'ai un probleme de ref aussi.

A+.


Thomas.
0

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

Posez votre question
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
27 mars 2006 à 10:05
Attention,
je ne suis pas bon en tout, et donc :

mea maxima culpa, Thomas n'avait pas fait de faute de frappe, c'est moi qui ai fait une faute d'attention, c'était bien :

oRefs.Item(1)

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
Albadeath Messages postés 18 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 28 mars 2006
28 mars 2006 à 11:27
Salut les gars,

pour répondre à rvblog, j'ai effectivement réussi un AddFromFile sur References et plusieurs fois en plus. Je vous donne mon code au complet cette fois (j'avais pas mis les déclarations au début désolé). Le problème est que si le fichier xls a été ouvert sous la version 11 de office , la référence à word 11 (par exemple) est rajoutée et le fichier fonctionne, mais si l'on retourne sous office 9, la référence a word 11 est coché avec l'inscription "manquante" et l'ajout de la référence a word 9 par le code est impossible a cause du "manquant ref word 11 coché!!" Tout le problème est de pouvoir décocher les références manquantes... et c'est une autre paire de manches... Je n'arrive qu'a virer des références pas leur nom les numéros ne fonctionnent pas. Voici le code :

Private Sub Workbook_Open()
'Code pour l'ajout de références selon la version office installée

Dim oRef As Object
Dim oRefs As References
Dim WordV9installed As Boolean
Dim ExcelV9installed As Boolean
Dim OfficeV9installed As Boolean
Dim WordXPinstalled As Boolean 'V10 en fait
Dim ExcelXPinstalled As Boolean 'V10 en fait
Dim OfficeXPinstalled As Boolean 'V10 en fait
Dim WordV11installed As Boolean
Dim ExcelV11installed As Boolean
Dim OfficeV11installed As Boolean
Dim i As Integer
Dim truc As Integer

Set oRefs = ActiveWorkbook.VBProject.References

'initialisation
WordV9installed = False
ExcelV9installed = False
OfficeV9installed = False
WordXPinstalled = False
ExcelXPinstalled = False
OfficeXPinstalled = False
WordV11installed = False
ExcelV11installed = False
OfficeV11installed = False

'Test du nombre de reférences
MsgBox Application.Version
MsgBox oRefs.Count

For i = 1 To oRefs.Count 'Suppression de toutes les références (echec)
oRefs.Remove (oRefs.Item(1)) 'Ne fonctionne pas
Next i

'Vérifications des références existantes
On Error Resume Next
For Each oRef In oRefs
If (oRef.Name = "Word") Then
'WordV9installed = True
oRefs.Remove (oRefs.Item("Word"))
End If
If (oRef.Name = "Excel") Then
'ExcelV9installed = True
oRefs.Remove (oRefs.Item("Excel"))
End If
If (oRef.Name = "Office") Then
'OfficeV9installed = True
oRefs.Remove oRefs.Item("office")
End If
Next oRef

On Error Resume Next 'affichage des nom pour petite vérification des ref installées
For Each oRef In oRefs
MsgBox "Nom : " & oRef.Name & vbCrLf & "Description : " & oRef.Description
Next oRef

If (Application.Version = "9.0") Then
'Vérifications des références existantes
'On Error Resume Next
'For Each oRef In oRefs
'If (oRef.Name = "Word") Then
'WordV9installed = True
'oRefs.Remove oRefs.Item("Word") 'enlever une reférence
'End If
'If (oRef.Name = "Excel") Then
'ExcelV9installed = True
'oRefs.Remove oRefs.Item("Excel")
'End If
'If (oRef.Name = "Office") Then
'OfficeV9installed = True
'oRefs.Remove oRefs.Item("Office")
'End If
'Next oRef

'Installation des références manquantes versions 9
If (WordV9installed = False) Then
Set oRef = oRefs.AddFromFile("C:\Program Files\Microsoft Office\Office\MSWORD9.olb") 'Ajout qui fonctionne
End If
If (ExcelV9installed = False) Then
Set oRef = oRefs.AddFromFile("C:\Program Files\Microsoft Office\Office\EXCEL9.olb")
End If
If (OfficeV9installed = False) Then
Set oRef = oRefs.AddFromFile("C:\Program Files\Microsoft Office\Office\MSO9.dll")
End If
End If

If (Application.Version = "10.0") Then
'Il s'agit de Microsoft Office 10.0 (Pc bureau chez compta par exemple)
'For Each oRef In oRefs
'If (oRef.Name = "Word") Then
'WordXPinstalled = True
'End If
'If (oRef.Name = "Excel") Then
'ExcelXPinstalled = True
'End If
'If (oRef.Name = "Office") Then
'OfficeXPinstalled = True
'End If
'Next oRef

'Installation de la référence à word version XP
If (WordXPinstalled = False) Then
Set oRef = oRefs.AddFromFile("C:\Program Files\Microsoft Office\Office10\MSWORD.olb")
End If
If (ExcelXPinstalled = False) Then
'Pas sur du tout
Set oRef = oRefs.AddFromFile("C:\Program Files\Microsoft Office\Office10\EXCEL.exe")
End If
If (OfficeXPinstalled = False) Then
'Pas sur du tout
Set oRef = oRefs.AddFromFile("C:\Program Files\Fichiers communs\Microsoft Shared\Office10\MSO.DLL")
End If

Else 'Il s'agit de la version 11

'For Each oRef In oRefs
'If (oRef.Name = "Word") Then
'WordV11installed = True
'End If
'If (oRef.Name = "Excel") Then
'ExcelV11installed = True
'End If
'If (oRef.Name = "Office") Then
'OfficeV11installed = True
'End If
'Next oRef

'Installation de la référence à word version XP
If (WordV11installed = False) Then
Set oRef = oRefs.AddFromFile("C:\Program Files\Microsoft Office\Office11\MSWORD.olb")
End If
If (ExcelV11installed = False) Then
'Pas sur du tout
Set oRef = oRefs.AddFromFile("C:\Program Files\Microsoft Office\Office11\EXCEL.exe")
End If
If (OfficeV11installed = False) Then
'Pas sur du tout
Set oRef = oRefs.AddFromFile("C:\Program Files\Fichiers communs\Microsoft Shared\Office11\MSO.DLL")
End If

End If
End Sub

Voila bon le code est brouillon car c'est un mélange de tous mes différents essais et il est répété pour les trois versions de microsoft office.
Si vous avez des remarques allez y !
Albadeath.
0
Rejoignez-nous