Enums introuvables

Gizzzmo Messages postés 10 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 21 novembre 2009 - 20 nov. 2009 à 14:59
Gizzzmo Messages postés 10 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 21 novembre 2009 - 21 nov. 2009 à 08:11
Bonjour,

Je fais actuellement une macro sous Microsoft Project qui va modifier un fichier Excel. Je rencontre un problème quand j'essaye de modifier les bordures dans mon fichier Excel.

J'ai le code suivant :

Private Sub DrawGrid(appExcel As Object, wbExcel As Object, lngSheetNumber As Long, strRange As String)

    wbExcel.Sheets(lngSheetNumber).Range(strRange).Borders(xlDiagonalDown).LineStyle = xlNone

...

End Sub


Ce code ne fonctionne pas car il ne trouve pas les valeurs de xlDiagonalDown et de xlNone. J'ai essayé de mettre XlBordersIndex.xlDiagonalDown ou encore Constants.xlNone mais c'est toujours pareil. Par contre en les remplaçant par 1 par exemple, ça fonctionne.

Comment faire pour que ces enums soient reconnus ?

Merci.

13 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 nov. 2009 à 15:35
Salut
Peut-être en décomposant :
  wbExcel.Sheets(lngSheetNumber).Range(strRange).Select
  Selection.Borders(xlDiagonalDown).LineStyle = xlNone

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Gizzzmo Messages postés 10 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 21 novembre 2009
20 nov. 2009 à 15:42
Non, si je décompose, il me fait une erreur sur la seconde ligne en me disant "Objet requis". Je suis d'ailleurs en train de rencontrer cette erreur à un autre endroit dans mon code...

La première ligne (Select fonctionne par contre correctement)

Merci d'avance.
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 nov. 2009 à 15:45
Ah non, bien sûr :
Comme tu écris
.LineStyle = xlNone
le "xlNone" appartien au monde Project, pas au monde Excel.
Si tu as défini wbExcel avec une référence à Excel (*), tu dois pouvoir faire :
.LineStyle = wbExcel.xlNone
(*) Si tu l'as déclaré tardivement avec un CreateObject, pas sûr que cela fonctionne.

Sinon, oui, il faut utiliser les valeurs numériques, quitte à recréer un type "maison" afin de garder les noms standards des variables :
    Enum eExcelConst
      xlToRight = -4161
      xlDown = -4121
      xlNone = -4142
      xlEdgeLeft = 7
      xlEdgeTop = 8
      xlEdgeBottom = 9
      xlEdgeRight = 10
      xlContinuous = 1
      xlThin = 2
      xlAutomatic = -4105
      xlInsideVertical = 11
      xlInsideHorizontal = 12
    End Enum

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Gizzzmo Messages postés 10 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 21 novembre 2009
20 nov. 2009 à 15:45
En y regardant de plus près avec un espion de l'objet "Selection", il me retourne "Vide"... Il faut peut-être passer par un autre moyen pour faire une sélection dans un fichier Excel à partir d'une autre application ?!
0

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

Posez votre question
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 nov. 2009 à 15:47
Oui, dans mon premier exemple, je suis tombé dans le même panneau que toi :
Selection n'appartient pas au monde Project, mais à l'objet.
--> wbExcel.Selection.Borders(xlDiagonalDown).LineStyle = xlNone


Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
20 nov. 2009 à 15:51
Bonjour,

Je suis de l'avis de Jack. Pour répondre à la 1er question le code devrait être ceci :

Private Sub DrawGrid(appExcel As Object, wbExcel As Object, lngSheetNumber As Long, strRange As String)

wbExcel.Sheets(lngSheetNumber).Range(strRange).Borders(wbExcel.xlDiagonalDown).LineStyle = wbExcel.xlNone

...

End Sub


Amicalement,
Us.
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 nov. 2009 à 15:51
Voir cette info plus complète de MSDN : http://support.microsoft.com/kb/461271/fr
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 nov. 2009 à 15:53
Ah oui, US_30, tu as l'oeil !
Le problème se serait reproduit aussi avec cette autre constante "xlDiagonalDown" liée au produit.
Bien vu
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
20 nov. 2009 à 16:06
l'oeil ? lequel ?

Ensuite, pour compléter ma réponse. Il est tout à fait possible de faire référence à une constante d'une application Office à une autre. C'est ce qu'on vient de dire... mais, il est aussi souvent nécessaire de déclarer toutes les "références"... En gros, peut-être que wbExcel.xlNone ne fonctionne pas car en fait xlNone, fait partie du "conteneur" constants...

Donc une autre façon de faire serait d'écrire :
wbExcel.Constants.xlNone
vbExcel.XlBordersIndex.xlDiagonalDown

On les retrouve dans l'explorateur d'objet du VBA...

Amicalement,
Us.
0
Gizzzmo Messages postés 10 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 21 novembre 2009
20 nov. 2009 à 17:01
Ça doit en effet être un truc dans le genre mais aucune des 2 solutions ne fonctionne...

wbExcel.XlBordersIndex.xlDiagonalDown ou wbExcel.xlDiagonalDown, rien ne marche :-/
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 nov. 2009 à 19:30
Alors il faut te rabattre sur le 'enum' que je t'ai proposé, plus complet dans le lien que je t'ai aussi proposé.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
20 nov. 2009 à 23:43
Euh... j'ai persuadé qu'on pouvait accéder aux constantes, comme une fonction. JE me suis trompé.
Il est vrai que par habitude je converti toujours mes constantes "xl...", "wd...", etc en valeur numérique pour l'automation.

Bon, ben, tant pis. Mais, c'est aussi une bonne idée pour un petit module prêt à l'emploi pour tout ceux utilisant l'automation...

Amicalement,
Us.
0
Gizzzmo Messages postés 10 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 21 novembre 2009
21 nov. 2009 à 08:11
C'est ce que j'ai fait en parallèle du coup et ça fonctionne ;-)

Merci :D
0
Rejoignez-nous