références VBA project

Le
M41
Bonjour

Peut-on afficher (dans une feuille) les références VBA project non pas
utilisées mais présentées disponibles dans la boite de dialogue des
validations manuelles ?

Autrement dit. Est ce qu'une application VBA "peut faire son marché" en
fonction de ses besoins et de ce qui est disponible sur la machine hôte ?

Cordialement

M41
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #21374431
Bonjour,

Ceci te donne la liste de toutes les références
qui sont "chargées" dans un projetVBA d'un classeur
avec les principales priorités.

La collection "References" retourne ce qui est énoncé
précédemment et non toutes les références que tu
pourrais cocher. Si tu veux la lister, coche d'abord
chacun des items de la liste avant de lancer la macro !


'-----------------------------------------------
Sub Test()
Dim Ref As Object
Dim Sh As Worksheet

With ThisWorkbook
Set Sh = .Worksheets("Sheet1")
For Each Ref In .VBProject.references
a = a + 1
With .VBProject.references(a)
Sh.Range("A" & a) = .Name
Sh.Range("B" & a) = .Description
Sh.Range("C" & a) = .FullPath
Sh.Range("D" & a) = .Major
Sh.Range("E" & a) = .Minor
Sh.Range("F" & a) = .GUID
End With
Next
Sh.Range("A:F").EntireColumn.AutoFit
End With
End Sub
'-----------------------------------------------



"M41" 4b9beb2d$0$17901$
Bonjour

Peut-on afficher (dans une feuille) les références VBA project non pas
utilisées mais présentées disponibles dans la boite de dialogue des
validations manuelles ?

Autrement dit. Est ce qu'une application VBA "peut faire son marché" en
fonction de ses besoins et de ce qui est disponible sur la machine hôte ?

Cordialement

M41
M41
Le #21375821
Bonjour

Merci. Ok uniquement ce qui est chargé pour
ThisWorkbook.VBProject.References....

Problème. Une application Excel verrouillée (codes non communiqués)
compatible 2000 à 2003 transpose des données de calculs ou des images de
graphes vers Word. L'application peut être utilisée par n'importe Qui sur un
PC individuel ou un serveur. Les installations ne sont pas forcement des
versions d'Office homogènes pouvant contenir Word 97 à 2007 voir le Writter
d'OpenOffice. Il peut aussi ne pas y avoir de version Word installée ou
plusieurs versions d'Office. Le concepteur de l'application Excel ne connait
pas l'utilisateur final et ne peut que préciser que son logiciel Excel est
compatible avec les versions Excel 2000 à 2003 sous Windows32.

Il me semble n'y avoir que 2 solutions dans ce cas là : un Sub Auto_Open

- ...analyse la base de registre hôte ; est-ce possible avec VBA? Excel peut
il tester la version de Word qui est installée dans un PC sans l'ouvrir et
sans se bloquer par une autre voie que ThisWorkbook.VBProject.References ?

- ...teste en force toutes les combinaisons possibles avec :

ActiveWorkbook.VBProject.References.AddFromGuid GUID, majeure, mineure

quitte à ce que certaines combinaisons s'avèrent "Broken" ; GUID est commun
à plusieurs versions mais comment déterminer les versions
majeures/mineures... on ne connait pas l'ordi. de l'hôte. On ne dispose pas
obligatoirement non plus personnellement de toutes les versions d'Office
dans ses PC ou serveurs. Peut-on mettre n'importe quoi pour majeure et
mineure, genre 0.0, en partant du principe d'une compatibilité descendante ?

Pour scanner l'hôte avec des ....AddFromGuid :

- existe-t il bibliographiquement des tables de références compilant toutes
les versions qui ont existé/existent ?

- GUID étant commun à plusieurs références, peut-on tester majeure/mineure
avec des boucles For/next avant de faire le ménage ou des gestions d'erreurs
?

En quoi l'instruction "....Version" d'Excel pourrait-elle aider dans
l'hypothèse d'une installation d'Office homogène ?

En résumé : comment gérer l'incertitude !

Cordialement

M41

"michdenis"
Bonjour,

Ceci te donne la liste de toutes les références
qui sont "chargées" dans un projetVBA d'un classeur
avec les principales priorités.

La collection "References" retourne ce qui est énoncé
précédemment et non toutes les références que tu
pourrais cocher. Si tu veux la lister, coche d'abord
chacun des items de la liste avant de lancer la macro !


'-----------------------------------------------
Sub Test()
Dim Ref As Object
Dim Sh As Worksheet

With ThisWorkbook
Set Sh = .Worksheets("Sheet1")
For Each Ref In .VBProject.references
a = a + 1
With .VBProject.references(a)
Sh.Range("A" & a) = .Name
Sh.Range("B" & a) = .Description
Sh.Range("C" & a) = .FullPath
Sh.Range("D" & a) = .Major
Sh.Range("E" & a) = .Minor
Sh.Range("F" & a) = .GUID
End With
Next
Sh.Range("A:F").EntireColumn.AutoFit
End With
End Sub
'-----------------------------------------------



"M41" discussion :
4b9beb2d$0$17901$
Bonjour

Peut-on afficher (dans une feuille) les références VBA project non pas
utilisées mais présentées disponibles dans la boite de dialogue des
validations manuelles ?

Autrement dit. Est ce qu'une application VBA "peut faire son marché" en
fonction de ses besoins et de ce qui est disponible sur la machine hôte ?

Cordialement

M41

michdenis
Le #21377171
Tout ce qui suit n'a pas été testé... je n'irai pas jusqu'à désinstaller
des applications pour effectuer les tests. Choisis l'alternative qui
te convient le mieux.

A ) Il est possible de faire référence à Word sans que sa bibliothèque
soit chargée. Il suffit d'utiliser une liaison tardive au lieu d'une
liaison précoce. Le code va comme ceci:

Dim Wd As Object

On error resume next
'Utilise l'instance de Word, si l'application est ouverte
Set Wd = GetObject(,"Word.Application")
if err <> 0 then
Err=0
Set Wd = CreateObject("Word.Application"
end if

if wd is nothing then
err = 0
msgbox "L'application ""Word"" n'est pas installé sur cette machine."
Exit sub
end if

Dans le reste du code, si tu fais référence à des constantes appartenant
à la bibliothèque de Word, tu devras utilisé la valeur numérique au lieu
de leur valeur littéraire.

B ) Au lieu d'aller cocher la bibliothèque dans la fenêtre de l'éditeur de code
Barre des menus / outils /References /
Tu peux la charger par programmation. Peu importe la version de Word
installée, cette procédure la chargera. Pour des questions de
compatibilité, tu devras tester ton code avec Word97, la plus
ancienne version.
Voici comme faire pour charger la bibliothèque avec du code :
'--------------------------------------
Sub Auto_Open()
'pour ajouter la référence "Word" à un projetVBA
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromGuid _
"{00020905-0000-0000-C000-000000000046}", 8, 4
End Sub
'--------------------------------------

C ) si tu veux savoir si l'exécutable "WindWord.exe" est présent
sur la machine, tu peux employer ceci comme code :

'------------------------------------------
Sub Auto_Open()

Dim Arr(), Suite As String, X As String, Rep As String
Arr = Array(8, 9, 10, 11, 12, 14)

On Error Resume Next
For a = 23 To 25
For Each elt In Arr
Rep = Split(Environ(a), "=")(1)
X = Dir(Rep & "Microsoft officeOffice" & elt & "WINWORD.EXE")
If Err = 0 And X <> "" Then
GoTo Suite
MsgBox "Word est présent sur la machine."
Else
Err = 0
' GoTo Suite
End If
Next
Next
MsgBox "L'application ""Word"" n'est pas installé sur cette machine"
Exit Sub

Suite:
'L'Exécutable est présent - Chargement de la référence
ThisWorkbook.VBProject.References.AddFromGuid _
"{00020905-0000-0000-C000-000000000046}", 8, 4

End Sub
'------------------------------------------



"M41" 4b9cc7e3$0$17896$
Bonjour

Merci. Ok uniquement ce qui est chargé pour
ThisWorkbook.VBProject.References....

Problème. Une application Excel verrouillée (codes non communiqués)
compatible 2000 à 2003 transpose des données de calculs ou des images de
graphes vers Word. L'application peut être utilisée par n'importe Qui sur un
PC individuel ou un serveur. Les installations ne sont pas forcement des
versions d'Office homogènes pouvant contenir Word 97 à 2007 voir le Writter
d'OpenOffice. Il peut aussi ne pas y avoir de version Word installée ou
plusieurs versions d'Office. Le concepteur de l'application Excel ne connait
pas l'utilisateur final et ne peut que préciser que son logiciel Excel est
compatible avec les versions Excel 2000 à 2003 sous Windows32.

Il me semble n'y avoir que 2 solutions dans ce cas là : un Sub Auto_Open

- ...analyse la base de registre hôte ; est-ce possible avec VBA? Excel peut
il tester la version de Word qui est installée dans un PC sans l'ouvrir et
sans se bloquer par une autre voie que ThisWorkbook.VBProject.References ?

- ...teste en force toutes les combinaisons possibles avec :

ActiveWorkbook.VBProject.References.AddFromGuid GUID, majeure, mineure

quitte à ce que certaines combinaisons s'avèrent "Broken" ; GUID est commun
à plusieurs versions mais comment déterminer les versions
majeures/mineures... on ne connait pas l'ordi. de l'hôte. On ne dispose pas
obligatoirement non plus personnellement de toutes les versions d'Office
dans ses PC ou serveurs. Peut-on mettre n'importe quoi pour majeure et
mineure, genre 0.0, en partant du principe d'une compatibilité descendante ?

Pour scanner l'hôte avec des ....AddFromGuid :

- existe-t il bibliographiquement des tables de références compilant toutes
les versions qui ont existé/existent ?

- GUID étant commun à plusieurs références, peut-on tester majeure/mineure
avec des boucles For/next avant de faire le ménage ou des gestions d'erreurs
?

En quoi l'instruction "....Version" d'Excel pourrait-elle aider dans
l'hypothèse d'une installation d'Office homogène ?

En résumé : comment gérer l'incertitude !

Cordialement

M41

"michdenis"
Bonjour,

Ceci te donne la liste de toutes les références
qui sont "chargées" dans un projetVBA d'un classeur
avec les principales priorités.

La collection "References" retourne ce qui est énoncé
précédemment et non toutes les références que tu
pourrais cocher. Si tu veux la lister, coche d'abord
chacun des items de la liste avant de lancer la macro !


'-----------------------------------------------
Sub Test()
Dim Ref As Object
Dim Sh As Worksheet

With ThisWorkbook
Set Sh = .Worksheets("Sheet1")
For Each Ref In .VBProject.references
a = a + 1
With .VBProject.references(a)
Sh.Range("A" & a) = .Name
Sh.Range("B" & a) = .Description
Sh.Range("C" & a) = .FullPath
Sh.Range("D" & a) = .Major
Sh.Range("E" & a) = .Minor
Sh.Range("F" & a) = .GUID
End With
Next
Sh.Range("A:F").EntireColumn.AutoFit
End With
End Sub
'-----------------------------------------------



"M41" discussion :
4b9beb2d$0$17901$
Bonjour

Peut-on afficher (dans une feuille) les références VBA project non pas
utilisées mais présentées disponibles dans la boite de dialogue des
validations manuelles ?

Autrement dit. Est ce qu'une application VBA "peut faire son marché" en
fonction de ses besoins et de ce qui est disponible sur la machine hôte ?

Cordialement

M41

M41
Le #21377421
Bon merci, y a plus qu'à

Cordialement

M41



"michdenis" eca$$
Tout ce qui suit n'a pas été testé... je n'irai pas jusqu'à désinstaller
des applications pour effectuer les tests. Choisis l'alternative qui
te convient le mieux.

A ) Il est possible de faire référence à Word sans que sa bibliothèque
soit chargée. Il suffit d'utiliser une liaison tardive au lieu d'une
liaison précoce. Le code va comme ceci:

Dim Wd As Object

On error resume next
'Utilise l'instance de Word, si l'application est ouverte
Set Wd = GetObject(,"Word.Application")
if err <> 0 then
Err=0
Set Wd = CreateObject("Word.Application"
end if

if wd is nothing then
err = 0
msgbox "L'application ""Word"" n'est pas installé sur cette machine."
Exit sub
end if

Dans le reste du code, si tu fais référence à des constantes appartenant
à la bibliothèque de Word, tu devras utilisé la valeur numérique au lieu
de leur valeur littéraire.

B ) Au lieu d'aller cocher la bibliothèque dans la fenêtre de l'éditeur de
code
Barre des menus / outils /References /
Tu peux la charger par programmation. Peu importe la version de Word
installée, cette procédure la chargera. Pour des questions de
compatibilité, tu devras tester ton code avec Word97, la plus
ancienne version.
Voici comme faire pour charger la bibliothèque avec du code :
'--------------------------------------
Sub Auto_Open()
'pour ajouter la référence "Word" à un projetVBA
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromGuid _
"{00020905-0000-0000-C000-000000000046}", 8, 4
End Sub
'--------------------------------------

C ) si tu veux savoir si l'exécutable "WindWord.exe" est présent
sur la machine, tu peux employer ceci comme code :

'------------------------------------------
Sub Auto_Open()

Dim Arr(), Suite As String, X As String, Rep As String
Arr = Array(8, 9, 10, 11, 12, 14)

On Error Resume Next
For a = 23 To 25
For Each elt In Arr
Rep = Split(Environ(a), "=")(1)
X = Dir(Rep & "Microsoft officeOffice" & elt & "WINWORD.EXE")
If Err = 0 And X <> "" Then
GoTo Suite
MsgBox "Word est présent sur la machine."
Else
Err = 0
' GoTo Suite
End If
Next
Next
MsgBox "L'application ""Word"" n'est pas installé sur cette machine"
Exit Sub

Suite:
'L'Exécutable est présent - Chargement de la référence
ThisWorkbook.VBProject.References.AddFromGuid _
"{00020905-0000-0000-C000-000000000046}", 8, 4

End Sub
'------------------------------------------



"M41" discussion :
4b9cc7e3$0$17896$
Bonjour

Merci. Ok uniquement ce qui est chargé pour
ThisWorkbook.VBProject.References....

Problème. Une application Excel verrouillée (codes non communiqués)
compatible 2000 à 2003 transpose des données de calculs ou des images de
graphes vers Word. L'application peut être utilisée par n'importe Qui sur
un
PC individuel ou un serveur. Les installations ne sont pas forcement des
versions d'Office homogènes pouvant contenir Word 97 à 2007 voir le
Writter
d'OpenOffice. Il peut aussi ne pas y avoir de version Word installée ou
plusieurs versions d'Office. Le concepteur de l'application Excel ne
connait
pas l'utilisateur final et ne peut que préciser que son logiciel Excel est
compatible avec les versions Excel 2000 à 2003 sous Windows32.

Il me semble n'y avoir que 2 solutions dans ce cas là : un Sub Auto_Open

- ...analyse la base de registre hôte ; est-ce possible avec VBA? Excel
peut
il tester la version de Word qui est installée dans un PC sans l'ouvrir et
sans se bloquer par une autre voie que ThisWorkbook.VBProject.References ?

- ...teste en force toutes les combinaisons possibles avec :

ActiveWorkbook.VBProject.References.AddFromGuid GUID, majeure, mineure

quitte à ce que certaines combinaisons s'avèrent "Broken" ; GUID est
commun
à plusieurs versions mais comment déterminer les versions
majeures/mineures... on ne connait pas l'ordi. de l'hôte. On ne dispose
pas
obligatoirement non plus personnellement de toutes les versions d'Office
dans ses PC ou serveurs. Peut-on mettre n'importe quoi pour majeure et
mineure, genre 0.0, en partant du principe d'une compatibilité descendante
?

Pour scanner l'hôte avec des ....AddFromGuid :

- existe-t il bibliographiquement des tables de références compilant
toutes
les versions qui ont existé/existent ?

- GUID étant commun à plusieurs références, peut-on tester majeure/mineure
avec des boucles For/next avant de faire le ménage ou des gestions
d'erreurs
?

En quoi l'instruction "....Version" d'Excel pourrait-elle aider dans
l'hypothèse d'une installation d'Office homogène ?

En résumé : comment gérer l'incertitude !

Cordialement

M41

"michdenis"
Bonjour,

Ceci te donne la liste de toutes les références
qui sont "chargées" dans un projetVBA d'un classeur
avec les principales priorités.

La collection "References" retourne ce qui est énoncé
précédemment et non toutes les références que tu
pourrais cocher. Si tu veux la lister, coche d'abord
chacun des items de la liste avant de lancer la macro !


'-----------------------------------------------
Sub Test()
Dim Ref As Object
Dim Sh As Worksheet

With ThisWorkbook
Set Sh = .Worksheets("Sheet1")
For Each Ref In .VBProject.references
a = a + 1
With .VBProject.references(a)
Sh.Range("A" & a) = .Name
Sh.Range("B" & a) = .Description
Sh.Range("C" & a) = .FullPath
Sh.Range("D" & a) = .Major
Sh.Range("E" & a) = .Minor
Sh.Range("F" & a) = .GUID
End With
Next
Sh.Range("A:F").EntireColumn.AutoFit
End With
End Sub
'-----------------------------------------------



"M41" discussion :
4b9beb2d$0$17901$
Bonjour

Peut-on afficher (dans une feuille) les références VBA project non pas
utilisées mais présentées disponibles dans la boite de dialogue des
validations manuelles ?

Autrement dit. Est ce qu'une application VBA "peut faire son marché" en
fonction de ses besoins et de ce qui est disponible sur la machine hôte ?

Cordialement

M41




Publicité
Poster une réponse
Anonyme