Déclarer un Classeur Excel en global

Résolu
monaldinho Messages postés 74 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 25 octobre 2007 - 30 juil. 2007 à 17:10
monaldinho Messages postés 74 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 25 octobre 2007 - 31 juil. 2007 à 10:29
Hello!

Il y a un certain temps, Mpi avait résolu mon probleme de declaration de feuille Excel en global, maintenant j'ai tendance à croire que c'est la suite ( et fin) pour ce probleme de déclaration!!

Voici ce qu'il a été dit pour la déclaration des feuilles Excel :
http://www.vbfrance.com/infomsg_DECLARE-FEUILLE-EXCEL-GLOBAL_975208.aspx?p=2

Finalement, pour la déclaration de feuille j'ai créer une procédure M_Declaration, dans laquelle jai fait ma déclaration de feuilles excel.
j'apelle la procédure avant chacune de mes fonctions.
lorsque je désire changer le nom d'une feuille, j'ai juste à changer le nom dans la procédure M_Declaration.
j'aimerais avoir cette meme possibilité avec le classeur!

Voici comment est mon module de declaration:
Public wk1, wk2, wk3, wk4 As Worksheet       ' feuilles
Public WB As Workbook                                 'classeur

Public Sub M_Declaration()
Set WK1 = Worksheets("feuill1")
Set WK2 = Worksheets("feuill2")
Set WK3 = Worksheets("feuill3")
Set WK4 = Worksheets("feuill4")
'Set WB = ActiveWorkbook                              'test 1
'Set WB = Workbooks("Classeur.xls")               'test 2
'Set WB = Workbooks("C\...\Classeur.xls")        'test 3
End Sub

ensuite dans les autres procédure et fonction, je fais des appels aux feuilles ainsi:
Wb.wk1.range...

pour le test 3, la faute est dans la procédure M_declaration--> "l'indice n'appartient pas a la selection"

pour les deux tests precedant ( test 1 et test 2 ) jobtien l'erreur suivante : "propriété ou methode non géré par cet objet" .

Encore une fois, je suis à court d'idée et j'espere tombé sur un ange de l'informatique tombé du ciel...
please, angel, help me!

Monaldinho.

 faites comme moi, éssayer d'éviter le coté obscur de la force

4 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
31 juil. 2007 à 03:14
Dans ta déclaration suivante
Public wk1, wk2, wk3, wk4 As Worksheet       ' feuilles
seul wk4 est déclaré comme une WorkSheet. Les autres sont As Variant

Il faut déclarer le type pour chaque variable... On est pas en C
Public ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet, ws4 As Worksheet
Public wb1 As WorkBook, wb2 As Workbook

Maintenant que tes variables sont déclarées, tu veux les initialiser
La méthode que tu utilises pourrait éventuellement fonctionner, je pense, en autant que les feuil1 à 4 existent bien... et que te Workbooks existent aussi.

Le mieux, en tout cas le plus simple, serait d'initialiser au fur et à mesure que tu en as besoin.
Ça ne sert à rien de déclarer une panoplie de variables si tu ne les utilises pas toutes.
Un simple objet Worksheet peut être initialisé, utilisé et terminé à l'intérieur d'une même procédure. Cette méthode est souvent utilisée avec des objets Recordset. Ça ne sert souvent à rien de les traîner tout au long du programme.

Mais là, ça dépend aussi de ton programme et de l'utilité de ces variables-objets.

Si tu dois garder ces objets "vivants", commence par déclarer le Workbook
Set wb1 = Activeworkbook

ensuite le Worksheet
Set ws1 = wb1.Sheets("Feuil1")

Par la suite, un seul appel à ws1 devrait suffire (sans mettre le nom du workbook -> wb1)
Par sa déclaration ws1 est déjà "lié" à wb1
Donc,
ws1.Range("...") devrait suffire

Ne pas oublier de fermer tous ces objets et de les mettre = Nothing en terminant.

MPi
3
monaldinho Messages postés 74 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 25 octobre 2007
30 juil. 2007 à 18:31
re - hello !

euh... s'il vous plait, laissez des commentaires que je sache au moins si vous n'avez aucune idée de comment faire ou si vous trouvez le texte resumant mon probleme trop long au point que vous etes pas arrivés au bout...

si il est trop long, je peux le re-résumer! faut absolument qu'on me dirige car je sais vraiment pas ou aller!  

merci!

Monaldinho.

 faites comme moi, éssayer d'éviter le coté obscur de la force
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
31 juil. 2007 à 08:10
Salut
pas mieux que [auteurdetail.aspx?ID=6078 MPi]
@+: Ju£i?n
Pensez: Réponse acceptée
0
monaldinho Messages postés 74 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 25 octobre 2007
31 juil. 2007 à 10:29
Hello !!!!

Merci de toute ces indications!


Pour tout te dire, j'ai beaucoups de procédures, dans certaines j'utilise deux feuilles Excel, dans une autre trois feuilles, des fois je suis amené à les utiliser toutes en meme temps.


J'ai fais l'initialisation comme tu me l'as conseillé et ca marche comme sur des roulettes!


Je pige pas pourquoi j'y ai pas pensé!! initialisé d'abord le classeur, puis initialisé les feuilles avec le classeur!!!


Voila comment j'ai fait cette partie de declaration :


J'ai créer une procédure M_Declaration en faisant l'initialisation comme tu me l'a proposé.


J'ai créer une procédure M_UnDeclaration dans laquelle j'ai mis tout les feuilles à "nothing"


Et en debut de procédure j'apelle "M_declaration" et En fin de procédure j'apelle "M_undeclaration"


 


En tout cas merci beaucoup Mpi! 
Je te souhaite une exelente journée!
A++

Monaldinho

 faites comme moi, éssayer d'éviter le coté obscur de la force
0
Rejoignez-nous