OVH Cloud OVH Cloud

chemin complet déclarer avec PUBLIC et SET (doit être redéclaré dans chq mo dule)

6 réponses
Avatar
fetnat
Bonjour,

J'ai des difficultées avec PUBLIC et SET.
Les deux points qui bloquent ce sont :
1 - la déclaration SET (malgré PUBLIC dans thisWorkBook) qu'il faut
mettre dans tous les modules
2 - la selection du graphique qui ne passe pas.

Je souhaite déclarer un chemin complet avec SET ( nom du classeur,
feuille, graphique) dans le module ThisWorkBook dans une sub
Workbook_Open. J'ai fait des essais avec Public seule le select d'une
cell passe. J'essaye de remplir une cellule avec 123 en etant positionné
sur la feuille2 (ça c'est OK) puis de selectionner la feuille1 ( ça
c'est OK) et enfin de selectionner le graphique en feuille1 ( ça ce
n'est pas bon).

Public f1 As Worksheet

puis dans une sub Workbook_Open()

Set f1 = ThisWorkbook.Sheets("Feuil1")


Je pensais mettre une seule fois le SET dans le module ThisWorkBook mais
je dois le répéter dans chaque module, comme si la déclaration public ne
passait pas dans tous les modules. Est-ce possible d'avoir une seule
déclaration pour tous les modules du classeur ? Sioui, ou ?


J'ai mis un exemple simplifié ici : http://cjoint.com/?elsjaiUaRS


Si quelqu'un peut me mettre sur la piste de la solution, merci d'avance

Fetnat

6 réponses

Avatar
Thierryp
Bonjour fetnat,

De mémoire, me semble qu'il doit falloir mettre les déclarations de
variable dans le haut d'un module standard.

@+ thierryp

------------------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet. (Courteline)
------------------------

Bonjour,

J'ai des difficultées avec PUBLIC et SET.
Les deux points qui bloquent ce sont :
1 - la déclaration SET (malgré PUBLIC dans thisWorkBook) qu'il faut
mettre dans tous les modules
2 - la selection du graphique qui ne passe pas.

Je souhaite déclarer un chemin complet avec SET ( nom du classeur,
feuille, graphique) dans le module ThisWorkBook dans une sub
Workbook_Open. J'ai fait des essais avec Public seule le select d'une
cell passe. J'essaye de remplir une cellule avec 123 en etant positionné
sur la feuille2 (ça c'est OK) puis de selectionner la feuille1 ( ça
c'est OK) et enfin de selectionner le graphique en feuille1 ( ça ce
n'est pas bon).

Public f1 As Worksheet

puis dans une sub Workbook_Open()

Set f1 = ThisWorkbook.Sheets("Feuil1")


Je pensais mettre une seule fois le SET dans le module ThisWorkBook mais
je dois le répéter dans chaque module, comme si la déclaration public ne
passait pas dans tous les modules. Est-ce possible d'avoir une seule
déclaration pour tous les modules du classeur ? Sioui, ou ?


J'ai mis un exemple simplifié ici : http://cjoint.com/?elsjaiUaRS


Si quelqu'un peut me mettre sur la piste de la solution, merci d'avance

Fetnat


Avatar
michdenis
Bonjour FetNat,

A ) Si tu utilises le mot Public pour déclarer une variable
Tu dois la déclarer à UN ENDROIT seulement.

Tu as le choix... Pour une variable, habituellement, on utilise
un module Standard et dans le haut de celui-ci, fait les déclarations
des variables et constantes "Public

Public F1 As worksheet

Si tu fais dans ta déclaration dans le ThisWorkbook ou dans un module feuille,
ce que tu crées dans le jargon... et une nouvelle propriété de l'objet dans lequel
tu as ajouté ta déclaration. La conséquence est que tu dois utilisé une référence
de ce type pour faire référence à cette propriété

Msgbox Thisworkbook.F1.name
Ou
Msgbox Feuil1.F1.Name


Attention : Déclarer un variable objet Public en voulant faire référence
à une feuille appartenant à un autre classeur n'est pas une très bonne idée...
à moins que tu sois certain que ce classeur est déjà ouvert ! Je te suggère
d'utiliser une variable déclarée localement pour cela avec une gestion d'erreur.


Salutations!




"fetnat" a écrit dans le message de news:
Bonjour,

J'ai des difficultées avec PUBLIC et SET.
Les deux points qui bloquent ce sont :
1 - la déclaration SET (malgré PUBLIC dans thisWorkBook) qu'il faut
mettre dans tous les modules
2 - la selection du graphique qui ne passe pas.

Je souhaite déclarer un chemin complet avec SET ( nom du classeur,
feuille, graphique) dans le module ThisWorkBook dans une sub
Workbook_Open. J'ai fait des essais avec Public seule le select d'une
cell passe. J'essaye de remplir une cellule avec 123 en etant positionné
sur la feuille2 (ça c'est OK) puis de selectionner la feuille1 ( ça
c'est OK) et enfin de selectionner le graphique en feuille1 ( ça ce
n'est pas bon).

Public f1 As Worksheet

puis dans une sub Workbook_Open()

Set f1 = ThisWorkbook.Sheets("Feuil1")


Je pensais mettre une seule fois le SET dans le module ThisWorkBook mais
je dois le répéter dans chaque module, comme si la déclaration public ne
passait pas dans tous les modules. Est-ce possible d'avoir une seule
déclaration pour tous les modules du classeur ? Sioui, ou ?


J'ai mis un exemple simplifié ici : http://cjoint.com/?elsjaiUaRS


Si quelqu'un peut me mettre sur la piste de la solution, merci d'avance

Fetnat
Avatar
fetnat
Bonsoir Thierryp

Les déclarations PUBLIC et SET que j'avais dans ThisWorkBook sont
placées en tête du module1 et effectivement c'est bon, je passe bien la
déclaration set sans avoir besoin de la renouveler dans les autres modules.
Merci beaucoup, voici la moitié de mon pb résolu.

Je n'arrive pas encore à selectionner le graph avec ce genre de
déclaration :

Set f1 = ThisWorkbook.Sheets("Feuil1")
Set g1 = f1.ChartObjects(1).Chart
puis
g1.Activate
ActiveChart.ChartArea.Select

ou
g1.Select

Je cherche, mais c'est une belle avancée de ne pas répéter la
déclaration dans tous les modules.

Bonne soirée

Fetnat


Bonjour fetnat,

De mémoire, me semble qu'il doit falloir mettre les déclarations de
variable dans le haut d'un module standard.

@+ thierryp

------------------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet. (Courteline)
------------------------


Bonjour,

J'ai des difficultées avec PUBLIC et SET.
Les deux points qui bloquent ce sont :
1 - la déclaration SET (malgré PUBLIC dans thisWorkBook) qu'il faut
mettre dans tous les modules
2 - la selection du graphique qui ne passe pas.

Je souhaite déclarer un chemin complet avec SET ( nom du classeur,
feuille, graphique) dans le module ThisWorkBook dans une sub
Workbook_Open. J'ai fait des essais avec Public seule le select d'une
cell passe. J'essaye de remplir une cellule avec 123 en etant
positionné sur la feuille2 (ça c'est OK) puis de selectionner la
feuille1 ( ça c'est OK) et enfin de selectionner le graphique en
feuille1 ( ça ce n'est pas bon).

Public f1 As Worksheet

puis dans une sub Workbook_Open()

Set f1 = ThisWorkbook.Sheets("Feuil1")


Je pensais mettre une seule fois le SET dans le module ThisWorkBook
mais je dois le répéter dans chaque module, comme si la déclaration
public ne passait pas dans tous les modules. Est-ce possible d'avoir
une seule déclaration pour tous les modules du classeur ? Sioui, ou ?


J'ai mis un exemple simplifié ici : http://cjoint.com/?elsjaiUaRS


Si quelqu'un peut me mettre sur la piste de la solution, merci d'avance

Fetnat




Avatar
fetnat
Bonsoir michdenis

Je vous remercie pour ces precisions.
Je n'avais pas vu le danger d'une déclaration Public vers un autre
classeur. Je retiens cela, bie nque je ne soit pas dans ce cas pour
l'instant.

Merci pour l'aide

Fetnat

Bonjour FetNat,

A ) Si tu utilises le mot Public pour déclarer une variable
Tu dois la déclarer à UN ENDROIT seulement.

Tu as le choix... Pour une variable, habituellement, on utilise
un module Standard et dans le haut de celui-ci, fait les déclarations
des variables et constantes "Public

Public F1 As worksheet

Si tu fais dans ta déclaration dans le ThisWorkbook ou dans un module feuille,
ce que tu crées dans le jargon... et une nouvelle propriété de l'objet dans lequel
tu as ajouté ta déclaration. La conséquence est que tu dois utilisé une référence
de ce type pour faire référence à cette propriété

Msgbox Thisworkbook.F1.name
Ou
Msgbox Feuil1.F1.Name


Attention : Déclarer un variable objet Public en voulant faire référence
à une feuille appartenant à un autre classeur n'est pas une très bonne idée...
à moins que tu sois certain que ce classeur est déjà ouvert ! Je te suggère
d'utiliser une variable déclarée localement pour cela avec une gestion d'erreur.


Salutations!




"fetnat" a écrit dans le message de news:
Bonjour,

J'ai des difficultées avec PUBLIC et SET.
Les deux points qui bloquent ce sont :
1 - la déclaration SET (malgré PUBLIC dans thisWorkBook) qu'il faut
mettre dans tous les modules
2 - la selection du graphique qui ne passe pas.

Je souhaite déclarer un chemin complet avec SET ( nom du classeur,
feuille, graphique) dans le module ThisWorkBook dans une sub
Workbook_Open. J'ai fait des essais avec Public seule le select d'une
cell passe. J'essaye de remplir une cellule avec 123 en etant positionné
sur la feuille2 (ça c'est OK) puis de selectionner la feuille1 ( ça
c'est OK) et enfin de selectionner le graphique en feuille1 ( ça ce
n'est pas bon).

Public f1 As Worksheet

puis dans une sub Workbook_Open()

Set f1 = ThisWorkbook.Sheets("Feuil1")


Je pensais mettre une seule fois le SET dans le module ThisWorkBook mais
je dois le répéter dans chaque module, comme si la déclaration public ne
passait pas dans tous les modules. Est-ce possible d'avoir une seule
déclaration pour tous les modules du classeur ? Sioui, ou ?


J'ai mis un exemple simplifié ici : http://cjoint.com/?elsjaiUaRS


Si quelqu'un peut me mettre sur la piste de la solution, merci d'avance

Fetnat




Avatar
fetnat
Bonsoir,

Finalement la décaration
Set g1 = f1.ChartObjects("Graphique 1").Chart
ne me sert pas. C'est bloquant.

Je m'en tire en selectionnant la feuille puis en activant le graph

f1.Select
ActiveSheet.ChartObjects("Graphique 1").Activate

Pas si mal.

Merci à ceux qui m'ont aidé et lu et les autres. Tout le monde, pour
résumer.

Fetnat


Bonjour,

J'ai des difficultées avec PUBLIC et SET.
Les deux points qui bloquent ce sont :
1 - la déclaration SET (malgré PUBLIC dans thisWorkBook) qu'il faut
mettre dans tous les modules
2 - la selection du graphique qui ne passe pas.

Je souhaite déclarer un chemin complet avec SET ( nom du classeur,
feuille, graphique) dans le module ThisWorkBook dans une sub
Workbook_Open. J'ai fait des essais avec Public seule le select d'une
cell passe. J'essaye de remplir une cellule avec 123 en etant positionné
sur la feuille2 (ça c'est OK) puis de selectionner la feuille1 ( ça
c'est OK) et enfin de selectionner le graphique en feuille1 ( ça ce
n'est pas bon).

Public f1 As Worksheet

puis dans une sub Workbook_Open()

Set f1 = ThisWorkbook.Sheets("Feuil1")


Je pensais mettre une seule fois le SET dans le module ThisWorkBook mais
je dois le répéter dans chaque module, comme si la déclaration public ne
passait pas dans tous les modules. Est-ce possible d'avoir une seule
déclaration pour tous les modules du classeur ? Sioui, ou ?


J'ai mis un exemple simplifié ici : http://cjoint.com/?elsjaiUaRS


Si quelqu'un peut me mettre sur la piste de la solution, merci d'avance

Fetnat


Avatar
fetnat
Bonjour michdenis

J'ai passé une heure tard dans la nuit à remettre de l'ordre. J'avais
des PUBLIC redondants partout même dans les modules de feuille.
Quand j'ai commencé à les tuer, le compilateur trouvait des noms
ambigues, ce qu'il ne faisait pas avant. J'en avait tellement mis que je
n'avais pas de message d'erreurs. Les messages sont arrivés quand j'ai
déchargé le code.
J'avais eu l'idée au début d'ouvrir deux classeurs, puis j'ai pu réduire
à un seul. Vous avez bien deviné les pièges qui se préparaient.

Excellente manip, c'est beaucoup plus léger et cela fonctionne à merveille.

Merci beaucoup pour votre aide.

Fetnat

Bonjour FetNat,

A ) Si tu utilises le mot Public pour déclarer une variable
Tu dois la déclarer à UN ENDROIT seulement.

Tu as le choix... Pour une variable, habituellement, on utilise
un module Standard et dans le haut de celui-ci, fait les déclarations
des variables et constantes "Public

Public F1 As worksheet

Si tu fais dans ta déclaration dans le ThisWorkbook ou dans un module feuille,
ce que tu crées dans le jargon... et une nouvelle propriété de l'objet dans lequel
tu as ajouté ta déclaration. La conséquence est que tu dois utilisé une référence
de ce type pour faire référence à cette propriété

Msgbox Thisworkbook.F1.name
Ou
Msgbox Feuil1.F1.Name


Attention : Déclarer un variable objet Public en voulant faire référence
à une feuille appartenant à un autre classeur n'est pas une très bonne idée...
à moins que tu sois certain que ce classeur est déjà ouvert ! Je te suggère
d'utiliser une variable déclarée localement pour cela avec une gestion d'erreur.


Salutations!




"fetnat" a écrit dans le message de news:
Bonjour,

J'ai des difficultées avec PUBLIC et SET.
Les deux points qui bloquent ce sont :
1 - la déclaration SET (malgré PUBLIC dans thisWorkBook) qu'il faut
mettre dans tous les modules
2 - la selection du graphique qui ne passe pas.

Je souhaite déclarer un chemin complet avec SET ( nom du classeur,
feuille, graphique) dans le module ThisWorkBook dans une sub
Workbook_Open. J'ai fait des essais avec Public seule le select d'une
cell passe. J'essaye de remplir une cellule avec 123 en etant positionné
sur la feuille2 (ça c'est OK) puis de selectionner la feuille1 ( ça
c'est OK) et enfin de selectionner le graphique en feuille1 ( ça ce
n'est pas bon).

Public f1 As Worksheet

puis dans une sub Workbook_Open()

Set f1 = ThisWorkbook.Sheets("Feuil1")


Je pensais mettre une seule fois le SET dans le module ThisWorkBook mais
je dois le répéter dans chaque module, comme si la déclaration public ne
passait pas dans tous les modules. Est-ce possible d'avoir une seule
déclaration pour tous les modules du classeur ? Sioui, ou ?


J'ai mis un exemple simplifié ici : http://cjoint.com/?elsjaiUaRS


Si quelqu'un peut me mettre sur la piste de la solution, merci d'avance

Fetnat