OVH Cloud OVH Cloud

La question du mois !!!!!!!!!!!!!!!

15 réponses
Avatar
michdenis
Bonjour à tous et à toutes,


Voici 3 bouts de code qui accomplissent la même chose que j'ai copié dans un module standard. Il y a plein d'exemples qu'il
est possible de formuler dans d'autres types de module. Les exemples retenues ne le sont pour les fins de mon intervention !


'----------Version 1------------------------
With Worksheets(2)
.Range("A5").Interior.ColorIndex = 5
End With

'----------Version 2------------------------
ThisWorkbook.Worksheets("Feuil1").Range("A5").Interior.ColorIndex = 5

'----------Version 3------------------------
With Feuil1
.Range("A5").Interior.ColorIndex = 5
End With


Dans "La Version 1" :
Lors de la saisie du code manuellement dans le module, l'insertion du point entre chaque expression ne génère aucune liste
déroulante à partir de laquelle on peut choisir la méthode ou la propriété désirée pour compléter la ligne de code

Dans La "Version 2", cette liste déroulante est offerte seulement après le premier point "thisworkbook" et est absent pour
le reste de la ligne

Dans la "Version 3" , la liste déroulante est offerte à chaque point(.) inséré dans la ligne de code


Ma question est toute simple :

Est-ce que quelqu'un connaît le ou les principes d'usage qui permettent à cette liste déroulante d'apparaître lorsque l'on
saisit du code.

Je suppose que la connaissance de ces principes devraient amener à prédire le comportement d'excel lors de la saisie du code
...et faciliter par la même occasion l'écriture d'une macro.


À une question toute simple, je suppose que la réponse doit être évidente !!!

Merci d'avance à ceux et à celles qui se pencheront sur la question.

P.S. L'option "Complément du code" dans la fenêtre VBE(visual basic editor) /barre des menus / outils / options / onglet
Éditeur est effectivement cochée.


Salutations!

10 réponses

1 2
Avatar
Alain CROS
Bonjour

La liste n'est obtenue que lorsqu'Excel identifie parfaitement l'objet.

Version 1 : l'objet Worksheets(2) peut être un Chart ou un Worksheet --> pas de liste

Version 2 : même chose que version 1

Version 3 : Feuil1 est ici le CodeName donc Worksheet

Lors de l'écriture du code, pour obtenir la liste, tu peux passer par une variable objet intermédiaire que tu supprime ensuite.

'----------Version 2------------------------
Dim Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets("Feuil1")
With Ws
.Range("A5").Interior.ColorIndex = 5
End With


Alain CROS


"michdenis" a écrit dans le message de news:

Bonjour à tous et à toutes,


Voici 3 bouts de code qui accomplissent la même chose que j'ai copié dans un module standard. Il y a plein d'exemples qu'il
est possible de formuler dans d'autres types de module. Les exemples retenues ne le sont pour les fins de mon intervention !


'----------Version 1------------------------
With Worksheets(2)
.Range("A5").Interior.ColorIndex = 5
End With

'----------Version 2------------------------
ThisWorkbook.Worksheets("Feuil1").Range("A5").Interior.ColorIndex = 5

'----------Version 3------------------------
With Feuil1
.Range("A5").Interior.ColorIndex = 5
End With


Dans "La Version 1" :
Lors de la saisie du code manuellement dans le module, l'insertion du point entre chaque expression ne génère aucune liste
déroulante à partir de laquelle on peut choisir la méthode ou la propriété désirée pour compléter la ligne de code

Dans La "Version 2", cette liste déroulante est offerte seulement après le premier point "thisworkbook" et est absent pour
le reste de la ligne

Dans la "Version 3" , la liste déroulante est offerte à chaque point(.) inséré dans la ligne de code


Ma question est toute simple :

Est-ce que quelqu'un connaît le ou les principes d'usage qui permettent à cette liste déroulante d'apparaître lorsque l'on
saisit du code.

Je suppose que la connaissance de ces principes devraient amener à prédire le comportement d'excel lors de la saisie du code
...et faciliter par la même occasion l'écriture d'une macro.


À une question toute simple, je suppose que la réponse doit être évidente !!!

Merci d'avance à ceux et à celles qui se pencheront sur la question.

P.S. L'option "Complément du code" dans la fenêtre VBE(visual basic editor) /barre des menus / outils / options / onglet
Éditeur est effectivement cochée.


Salutations!






Avatar
michdenis
Bonjour Alain,

Merci pour cette réponse .

A )

" l'objet Worksheets(2) peut être un Chart ou un Worksheet "

Comment une feuille de calcul "Worksheet" devient une feuille graphique "Chart"... je ne saisis pas !

Par contre, "Chart" fait parti de la collection Sheets et non Worksheets


B )

" La liste n'est obtenue que lorsqu'Excel identifie parfaitement l'objet"

Dans une expression comme celle-ci :

ActiveSheet. ..... il n'y a pas de liste déroulante
Est-ce à dire qu'excel ne réussit pas à identifier clairement ce qu'est "ActiveSheet"


C )

" Feuil1 est ici le CodeName donc Worksheet "

Quelle différence entre Feuil1 et Worksheets("Feuil1") ? Pourquoi excel cela fonctionne très bien avec l'un et pas du tout
avec l'autre ? C'était là le sens de ma question !


D ) Je suis d'accord avec toi quant à l'utilisation des variables objet ... mais cela ne faisait pas parti de ma question !
;-))



Salutations!




"Alain CROS" a écrit dans le message de news:
Bonjour

La liste n'est obtenue que lorsqu'Excel identifie parfaitement l'objet.

Version 1 : l'objet Worksheets(2) peut être un Chart ou un Worksheet --> pas de liste

Version 2 : même chose que version 1

Version 3 : Feuil1 est ici le CodeName donc Worksheet

Lors de l'écriture du code, pour obtenir la liste, tu peux passer par une variable objet intermédiaire que tu supprime
ensuite.

'----------Version 2------------------------
Dim Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets("Feuil1")
With Ws
.Range("A5").Interior.ColorIndex = 5
End With


Alain CROS


"michdenis" a écrit dans le message de news:

Bonjour à tous et à toutes,


Voici 3 bouts de code qui accomplissent la même chose que j'ai copié dans un module standard. Il y a plein d'exemples qu'il
est possible de formuler dans d'autres types de module. Les exemples retenues ne le sont pour les fins de mon intervention
!



'----------Version 1------------------------
With Worksheets(2)
.Range("A5").Interior.ColorIndex = 5
End With

'----------Version 2------------------------
ThisWorkbook.Worksheets("Feuil1").Range("A5").Interior.ColorIndex = 5

'----------Version 3------------------------
With Feuil1
.Range("A5").Interior.ColorIndex = 5
End With


Dans "La Version 1" :
Lors de la saisie du code manuellement dans le module, l'insertion du point entre chaque expression ne génère aucune liste
déroulante à partir de laquelle on peut choisir la méthode ou la propriété désirée pour compléter la ligne de code

Dans La "Version 2", cette liste déroulante est offerte seulement après le premier point "thisworkbook" et est absent pour
le reste de la ligne

Dans la "Version 3" , la liste déroulante est offerte à chaque point(.) inséré dans la ligne de code


Ma question est toute simple :

Est-ce que quelqu'un connaît le ou les principes d'usage qui permettent à cette liste déroulante d'apparaître lorsque l'on
saisit du code.

Je suppose que la connaissance de ces principes devraient amener à prédire le comportement d'excel lors de la saisie du
code

...et faciliter par la même occasion l'écriture d'une macro.


À une question toute simple, je suppose que la réponse doit être évidente !!!

Merci d'avance à ceux et à celles qui se pencheront sur la question.

P.S. L'option "Complément du code" dans la fenêtre VBE(visual basic editor) /barre des menus / outils / options / onglet
Éditeur est effectivement cochée.


Salutations!






Avatar
Pierre Fauconnier
Bonsoir Michel

Lorsque tu utilises l'index pour un worksheet, Excel ne sait pas a priori si
l'objet existe ou non, car il interprétera l'index à l'exécution. Comme un
worksheet pourrait avoir des propriétés ou procédures particulières ( hors
du jeu standard des propriétés et méthodes définies par Excel), l'éditeur ne
sait pas afficher de liste.
Par contre, lorsque tu utilises le codename de l'objet, Excel "voit" que cet
objet existe et peut donc t'afficher la liste des méthodes et propriétés
propres à cet objet.

Au niveau de l'exécution, il y a un temps plus long d'exécution lorsque tu
utilises worksheets(1) ou worksheets("Feuil1") que lorsque tu utilises
Feuil1 directement, car Excel doit vérifier la syntaxe à l'exécution dans
les deux premiers cas alors qu'il le fait au lancement de la macro dans le
troisième cas.

Cela convient-il?


--
Pierre Fauconnier ()
Les sept laids tuent ( Lewis Carol )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

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

Merci pour cette réponse .

A )

" l'objet Worksheets(2) peut être un Chart ou un Worksheet "

Comment une feuille de calcul "Worksheet" devient une feuille graphique
"Chart"... je ne saisis pas !


Par contre, "Chart" fait parti de la collection Sheets et non Worksheets


B )

" La liste n'est obtenue que lorsqu'Excel identifie parfaitement l'objet"

Dans une expression comme celle-ci :

ActiveSheet. ..... il n'y a pas de liste déroulante
Est-ce à dire qu'excel ne réussit pas à identifier clairement ce qu'est
"ActiveSheet"



C )

" Feuil1 est ici le CodeName donc Worksheet "

Quelle différence entre Feuil1 et Worksheets("Feuil1") ? Pourquoi excel
cela fonctionne très bien avec l'un et pas du tout

avec l'autre ? C'était là le sens de ma question !


D ) Je suis d'accord avec toi quant à l'utilisation des variables objet
... mais cela ne faisait pas parti de ma question !

;-))



Salutations!




"Alain CROS" a écrit dans le message de
news:

Bonjour

La liste n'est obtenue que lorsqu'Excel identifie parfaitement l'objet.

Version 1 : l'objet Worksheets(2) peut être un Chart ou un Worksheet -->
pas de liste


Version 2 : même chose que version 1

Version 3 : Feuil1 est ici le CodeName donc Worksheet

Lors de l'écriture du code, pour obtenir la liste, tu peux passer par une
variable objet intermédiaire que tu supprime

ensuite.

'----------Version 2------------------------
Dim Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets("Feuil1")
With Ws
.Range("A5").Interior.ColorIndex = 5
End With


Alain CROS


"michdenis" a écrit dans le message de news:



Bonjour à tous et à toutes,


Voici 3 bouts de code qui accomplissent la même chose que j'ai copié
dans un module standard. Il y a plein d'exemples qu'il


est possible de formuler dans d'autres types de module. Les exemples
retenues ne le sont pour les fins de mon intervention


!


'----------Version 1------------------------
With Worksheets(2)
.Range("A5").Interior.ColorIndex = 5
End With

'----------Version 2------------------------
ThisWorkbook.Worksheets("Feuil1").Range("A5").Interior.ColorIndex = 5

'----------Version 3------------------------
With Feuil1
.Range("A5").Interior.ColorIndex = 5
End With


Dans "La Version 1" :
Lors de la saisie du code manuellement dans le module, l'insertion du
point entre chaque expression ne génère aucune liste


déroulante à partir de laquelle on peut choisir la méthode ou la
propriété désirée pour compléter la ligne de code



Dans La "Version 2", cette liste déroulante est offerte seulement après
le premier point "thisworkbook" et est absent pour


le reste de la ligne

Dans la "Version 3" , la liste déroulante est offerte à chaque point(.)
inséré dans la ligne de code




Ma question est toute simple :

Est-ce que quelqu'un connaît le ou les principes d'usage qui permettent
à cette liste déroulante d'apparaître lorsque l'on


saisit du code.

Je suppose que la connaissance de ces principes devraient amener à
prédire le comportement d'excel lors de la saisie du


code
...et faciliter par la même occasion l'écriture d'une macro.


À une question toute simple, je suppose que la réponse doit être
évidente !!!



Merci d'avance à ceux et à celles qui se pencheront sur la question.

P.S. L'option "Complément du code" dans la fenêtre VBE(visual basic
editor) /barre des menus / outils / options / onglet


Éditeur est effectivement cochée.


Salutations!











Avatar
michdenis
Bonjour Pierre,


Cela fait un certain sens !! ;-))

Et si j'écris dans un module standard :

Worksheets(1).range("A1").Interior.Colorindex =5 , aucune liste suggéré pour les les "points" de la ligne de code.


Si j'écris seulement dans un module standard :

range("A1").Interior.Colorindex =5 'Excel me propose une liste déroulante pour tous les points.


Comment expliquer le fait de donner le nom de la feuille à laquelle appartient l'objet "Range" semble "troubler" excel. Il
ne semble pas avoir de problème en l'absence de l'objet feuille.

Un autre petit exemple :

Si j'écris dans un module standard :

Shapes("toto"). aucune liste dérolante

Si j'écris la même chose dans une feuille module

Shapes("toto"). Une liste est suggérée ... même si aucune "Shape" n'existe dans la dite feuille ... peu importe le nom
utilisé pour la "shape".

Je suppose qu'excel ne peut pas savoir là aussi, avant l'exécution de la procédure, si la "Shape" existe ...mais cela ne
l'empêche pas de m'afficher la liste déroulante à la saisie !

Tu as une explication ? Merci.


Salutations!






"Pierre Fauconnier" a écrit dans le message de
news:
Bonsoir Michel

Lorsque tu utilises l'index pour un worksheet, Excel ne sait pas a priori si
l'objet existe ou non, car il interprétera l'index à l'exécution. Comme un
worksheet pourrait avoir des propriétés ou procédures particulières ( hors
du jeu standard des propriétés et méthodes définies par Excel), l'éditeur ne
sait pas afficher de liste.
Par contre, lorsque tu utilises le codename de l'objet, Excel "voit" que cet
objet existe et peut donc t'afficher la liste des méthodes et propriétés
propres à cet objet.

Au niveau de l'exécution, il y a un temps plus long d'exécution lorsque tu
utilises worksheets(1) ou worksheets("Feuil1") que lorsque tu utilises
Feuil1 directement, car Excel doit vérifier la syntaxe à l'exécution dans
les deux premiers cas alors qu'il le fait au lancement de la macro dans le
troisième cas.

Cela convient-il?


--
Pierre Fauconnier ()
Les sept laids tuent ( Lewis Carol )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

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

Merci pour cette réponse .

A )

" l'objet Worksheets(2) peut être un Chart ou un Worksheet "

Comment une feuille de calcul "Worksheet" devient une feuille graphique
"Chart"... je ne saisis pas !


Par contre, "Chart" fait parti de la collection Sheets et non Worksheets


B )

" La liste n'est obtenue que lorsqu'Excel identifie parfaitement l'objet"

Dans une expression comme celle-ci :

ActiveSheet. ..... il n'y a pas de liste déroulante
Est-ce à dire qu'excel ne réussit pas à identifier clairement ce qu'est
"ActiveSheet"



C )

" Feuil1 est ici le CodeName donc Worksheet "

Quelle différence entre Feuil1 et Worksheets("Feuil1") ? Pourquoi excel
cela fonctionne très bien avec l'un et pas du tout

avec l'autre ? C'était là le sens de ma question !


D ) Je suis d'accord avec toi quant à l'utilisation des variables objet
... mais cela ne faisait pas parti de ma question !

;-))



Salutations!




"Alain CROS" a écrit dans le message de
news:

Bonjour

La liste n'est obtenue que lorsqu'Excel identifie parfaitement l'objet.

Version 1 : l'objet Worksheets(2) peut être un Chart ou un Worksheet -->
pas de liste


Version 2 : même chose que version 1

Version 3 : Feuil1 est ici le CodeName donc Worksheet

Lors de l'écriture du code, pour obtenir la liste, tu peux passer par une
variable objet intermédiaire que tu supprime

ensuite.

'----------Version 2------------------------
Dim Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets("Feuil1")
With Ws
.Range("A5").Interior.ColorIndex = 5
End With


Alain CROS


"michdenis" a écrit dans le message de news:



Bonjour à tous et à toutes,


Voici 3 bouts de code qui accomplissent la même chose que j'ai copié
dans un module standard. Il y a plein d'exemples qu'il


est possible de formuler dans d'autres types de module. Les exemples
retenues ne le sont pour les fins de mon intervention


!


'----------Version 1------------------------
With Worksheets(2)
.Range("A5").Interior.ColorIndex = 5
End With

'----------Version 2------------------------
ThisWorkbook.Worksheets("Feuil1").Range("A5").Interior.ColorIndex = 5

'----------Version 3------------------------
With Feuil1
.Range("A5").Interior.ColorIndex = 5
End With


Dans "La Version 1" :
Lors de la saisie du code manuellement dans le module, l'insertion du
point entre chaque expression ne génère aucune liste


déroulante à partir de laquelle on peut choisir la méthode ou la
propriété désirée pour compléter la ligne de code



Dans La "Version 2", cette liste déroulante est offerte seulement après
le premier point "thisworkbook" et est absent pour


le reste de la ligne

Dans la "Version 3" , la liste déroulante est offerte à chaque point(.)
inséré dans la ligne de code




Ma question est toute simple :

Est-ce que quelqu'un connaît le ou les principes d'usage qui permettent
à cette liste déroulante d'apparaître lorsque l'on


saisit du code.

Je suppose que la connaissance de ces principes devraient amener à
prédire le comportement d'excel lors de la saisie du


code
...et faciliter par la même occasion l'écriture d'une macro.


À une question toute simple, je suppose que la réponse doit être
évidente !!!



Merci d'avance à ceux et à celles qui se pencheront sur la question.

P.S. L'option "Complément du code" dans la fenêtre VBE(visual basic
editor) /barre des menus / outils / options / onglet


Éditeur est effectivement cochée.


Salutations!











Avatar
Pierre Fauconnier
A nouveau, c'est parce que tu utilises worksheets(1).Range... Si tu utilises
Feuil1.Range..., tu auras une liste qui suivra chaque point, car Excel saura
à quel objet tu te réfères.
Pour l'objet Range, c'est différent car tu n'as pas accès au module de
classe de l'objet Range, et tu ne sais donc pas ajouter des propriétés ou
méthodes pour cet objet. Dès lors, même si tu donnais une référence hors
plage, par exemple range("XX9999"), excel te donnerait la liste des
propriétés et méthodes, alors même que l'objet ne peut exister.

Pierre

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


Cela fait un certain sens !! ;-))

Et si j'écris dans un module standard :

Worksheets(1).range("A1").Interior.Colorindex =5 , aucune liste suggéré
pour les les "points" de la ligne de code.



Si j'écris seulement dans un module standard :

range("A1").Interior.Colorindex =5 'Excel me propose une liste
déroulante pour tous les points.



Comment expliquer le fait de donner le nom de la feuille à laquelle
appartient l'objet "Range" semble "troubler" excel. Il

ne semble pas avoir de problème en l'absence de l'objet feuille.

Un autre petit exemple :

Si j'écris dans un module standard :

Shapes("toto"). aucune liste dérolante

Si j'écris la même chose dans une feuille module

Shapes("toto"). Une liste est suggérée ... même si aucune "Shape"
n'existe dans la dite feuille ... peu importe le nom

utilisé pour la "shape".

Je suppose qu'excel ne peut pas savoir là aussi, avant l'exécution de la
procédure, si la "Shape" existe ...mais cela ne

l'empêche pas de m'afficher la liste déroulante à la saisie !

Tu as une explication ? Merci.


Salutations!






"Pierre Fauconnier" a écrit dans le
message de

news:
Bonsoir Michel

Lorsque tu utilises l'index pour un worksheet, Excel ne sait pas a priori
si

l'objet existe ou non, car il interprétera l'index à l'exécution. Comme un
worksheet pourrait avoir des propriétés ou procédures particulières ( hors
du jeu standard des propriétés et méthodes définies par Excel), l'éditeur
ne

sait pas afficher de liste.
Par contre, lorsque tu utilises le codename de l'objet, Excel "voit" que
cet

objet existe et peut donc t'afficher la liste des méthodes et propriétés
propres à cet objet.

Au niveau de l'exécution, il y a un temps plus long d'exécution lorsque tu
utilises worksheets(1) ou worksheets("Feuil1") que lorsque tu utilises
Feuil1 directement, car Excel doit vérifier la syntaxe à l'exécution dans
les deux premiers cas alors qu'il le fait au lancement de la macro dans le
troisième cas.

Cela convient-il?


--
Pierre Fauconnier ()
Les sept laids tuent ( Lewis Carol )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

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

Merci pour cette réponse .

A )

" l'objet Worksheets(2) peut être un Chart ou un Worksheet "

Comment une feuille de calcul "Worksheet" devient une feuille graphique
"Chart"... je ne saisis pas !


Par contre, "Chart" fait parti de la collection Sheets et non
Worksheets




B )

" La liste n'est obtenue que lorsqu'Excel identifie parfaitement
l'objet"



Dans une expression comme celle-ci :

ActiveSheet. ..... il n'y a pas de liste déroulante
Est-ce à dire qu'excel ne réussit pas à identifier clairement ce qu'est
"ActiveSheet"



C )

" Feuil1 est ici le CodeName donc Worksheet "

Quelle différence entre Feuil1 et Worksheets("Feuil1") ? Pourquoi excel
cela fonctionne très bien avec l'un et pas du tout

avec l'autre ? C'était là le sens de ma question !


D ) Je suis d'accord avec toi quant à l'utilisation des variables objet
... mais cela ne faisait pas parti de ma question !

;-))



Salutations!




"Alain CROS" a écrit dans le message de
news:

Bonjour

La liste n'est obtenue que lorsqu'Excel identifie parfaitement l'objet.

Version 1 : l'objet Worksheets(2) peut être un Chart ou un Worksheet -->
pas de liste


Version 2 : même chose que version 1

Version 3 : Feuil1 est ici le CodeName donc Worksheet

Lors de l'écriture du code, pour obtenir la liste, tu peux passer par
une


variable objet intermédiaire que tu supprime
ensuite.

'----------Version 2------------------------
Dim Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets("Feuil1")
With Ws
.Range("A5").Interior.ColorIndex = 5
End With


Alain CROS


"michdenis" a écrit dans le message de news:



Bonjour à tous et à toutes,


Voici 3 bouts de code qui accomplissent la même chose que j'ai copié
dans un module standard. Il y a plein d'exemples qu'il


est possible de formuler dans d'autres types de module. Les exemples
retenues ne le sont pour les fins de mon intervention


!


'----------Version 1------------------------
With Worksheets(2)
.Range("A5").Interior.ColorIndex = 5
End With

'----------Version 2------------------------
ThisWorkbook.Worksheets("Feuil1").Range("A5").Interior.ColorIndex = 5

'----------Version 3------------------------
With Feuil1
.Range("A5").Interior.ColorIndex = 5
End With


Dans "La Version 1" :
Lors de la saisie du code manuellement dans le module, l'insertion du
point entre chaque expression ne génère aucune liste


déroulante à partir de laquelle on peut choisir la méthode ou la
propriété désirée pour compléter la ligne de code



Dans La "Version 2", cette liste déroulante est offerte seulement
après



le premier point "thisworkbook" et est absent pour
le reste de la ligne

Dans la "Version 3" , la liste déroulante est offerte à chaque
point(.)



inséré dans la ligne de code


Ma question est toute simple :

Est-ce que quelqu'un connaît le ou les principes d'usage qui
permettent



à cette liste déroulante d'apparaître lorsque l'on
saisit du code.

Je suppose que la connaissance de ces principes devraient amener à
prédire le comportement d'excel lors de la saisie du


code
...et faciliter par la même occasion l'écriture d'une macro.


À une question toute simple, je suppose que la réponse doit être
évidente !!!



Merci d'avance à ceux et à celles qui se pencheront sur la question.

P.S. L'option "Complément du code" dans la fenêtre VBE(visual basic
editor) /barre des menus / outils / options / onglet


Éditeur est effectivement cochée.


Salutations!
















Avatar
Pierre Fauconnier
J'ajouterai que, avec le code suivant
dim Feuille as worksheet
Set Feuille = worksheets("Feuil1")
tu ne récupère dans la liste des propriétés et méthodes de Feuille que les
"standard" des feuilles de calcul.
Ainsi, si dans le module de Feuil1 tu as, en début de module
Public MaVariable ...

Tu ne récupèreras pas MaVariable dans la liste après le . pour l'objet
Feuille, alors que tu la verras apparraître dans la liste après le . pour
l'objet Feuil1...

Pierre

"Pierre Fauconnier" a écrit dans le
message de news:euKT$
A nouveau, c'est parce que tu utilises worksheets(1).Range... Si tu
utilises

Feuil1.Range..., tu auras une liste qui suivra chaque point, car Excel
saura

à quel objet tu te réfères.
Pour l'objet Range, c'est différent car tu n'as pas accès au module de
classe de l'objet Range, et tu ne sais donc pas ajouter des propriétés ou
méthodes pour cet objet. Dès lors, même si tu donnais une référence hors
plage, par exemple range("XX9999"), excel te donnerait la liste des
propriétés et méthodes, alors même que l'objet ne peut exister.

Pierre

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


Cela fait un certain sens !! ;-))

Et si j'écris dans un module standard :

Worksheets(1).range("A1").Interior.Colorindex =5 , aucune liste suggéré
pour les les "points" de la ligne de code.



Si j'écris seulement dans un module standard :

range("A1").Interior.Colorindex =5 'Excel me propose une liste
déroulante pour tous les points.



Comment expliquer le fait de donner le nom de la feuille à laquelle
appartient l'objet "Range" semble "troubler" excel. Il

ne semble pas avoir de problème en l'absence de l'objet feuille.

Un autre petit exemple :

Si j'écris dans un module standard :

Shapes("toto"). aucune liste dérolante

Si j'écris la même chose dans une feuille module

Shapes("toto"). Une liste est suggérée ... même si aucune "Shape"
n'existe dans la dite feuille ... peu importe le nom

utilisé pour la "shape".

Je suppose qu'excel ne peut pas savoir là aussi, avant l'exécution de la
procédure, si la "Shape" existe ...mais cela ne

l'empêche pas de m'afficher la liste déroulante à la saisie !

Tu as une explication ? Merci.


Salutations!






"Pierre Fauconnier" a écrit dans le
message de

news:
Bonsoir Michel

Lorsque tu utilises l'index pour un worksheet, Excel ne sait pas a
priori


si
l'objet existe ou non, car il interprétera l'index à l'exécution. Comme
un


worksheet pourrait avoir des propriétés ou procédures particulières (
hors


du jeu standard des propriétés et méthodes définies par Excel),
l'éditeur


ne
sait pas afficher de liste.
Par contre, lorsque tu utilises le codename de l'objet, Excel "voit" que
cet

objet existe et peut donc t'afficher la liste des méthodes et propriétés
propres à cet objet.

Au niveau de l'exécution, il y a un temps plus long d'exécution lorsque
tu


utilises worksheets(1) ou worksheets("Feuil1") que lorsque tu utilises
Feuil1 directement, car Excel doit vérifier la syntaxe à l'exécution
dans


les deux premiers cas alors qu'il le fait au lancement de la macro dans
le


troisième cas.

Cela convient-il?


--
Pierre Fauconnier ()
Les sept laids tuent ( Lewis Carol )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

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

Merci pour cette réponse .

A )

" l'objet Worksheets(2) peut être un Chart ou un Worksheet "

Comment une feuille de calcul "Worksheet" devient une feuille
graphique



"Chart"... je ne saisis pas !

Par contre, "Chart" fait parti de la collection Sheets et non
Worksheets




B )

" La liste n'est obtenue que lorsqu'Excel identifie parfaitement
l'objet"



Dans une expression comme celle-ci :

ActiveSheet. ..... il n'y a pas de liste déroulante
Est-ce à dire qu'excel ne réussit pas à identifier clairement ce
qu'est



"ActiveSheet"


C )

" Feuil1 est ici le CodeName donc Worksheet "

Quelle différence entre Feuil1 et Worksheets("Feuil1") ? Pourquoi
excel



cela fonctionne très bien avec l'un et pas du tout
avec l'autre ? C'était là le sens de ma question !


D ) Je suis d'accord avec toi quant à l'utilisation des variables
objet



... mais cela ne faisait pas parti de ma question !
;-))



Salutations!




"Alain CROS" a écrit dans le message de
news:

Bonjour

La liste n'est obtenue que lorsqu'Excel identifie parfaitement
l'objet.




Version 1 : l'objet Worksheets(2) peut être un Chart ou un
Worksheet -->



pas de liste

Version 2 : même chose que version 1

Version 3 : Feuil1 est ici le CodeName donc Worksheet

Lors de l'écriture du code, pour obtenir la liste, tu peux passer par
une


variable objet intermédiaire que tu supprime
ensuite.

'----------Version 2------------------------
Dim Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets("Feuil1")
With Ws
.Range("A5").Interior.ColorIndex = 5
End With


Alain CROS


"michdenis" a écrit dans le message de news:



Bonjour à tous et à toutes,


Voici 3 bouts de code qui accomplissent la même chose que j'ai copié
dans un module standard. Il y a plein d'exemples qu'il


est possible de formuler dans d'autres types de module. Les exemples
retenues ne le sont pour les fins de mon intervention


!


'----------Version 1------------------------
With Worksheets(2)
.Range("A5").Interior.ColorIndex = 5
End With

'----------Version 2------------------------
ThisWorkbook.Worksheets("Feuil1").Range("A5").Interior.ColorIndex 5

'----------Version 3------------------------
With Feuil1
.Range("A5").Interior.ColorIndex = 5
End With


Dans "La Version 1" :
Lors de la saisie du code manuellement dans le module, l'insertion
du




point entre chaque expression ne génère aucune liste
déroulante à partir de laquelle on peut choisir la méthode ou la
propriété désirée pour compléter la ligne de code



Dans La "Version 2", cette liste déroulante est offerte seulement
après



le premier point "thisworkbook" et est absent pour
le reste de la ligne

Dans la "Version 3" , la liste déroulante est offerte à chaque
point(.)



inséré dans la ligne de code


Ma question est toute simple :

Est-ce que quelqu'un connaît le ou les principes d'usage qui
permettent



à cette liste déroulante d'apparaître lorsque l'on
saisit du code.

Je suppose que la connaissance de ces principes devraient amener à
prédire le comportement d'excel lors de la saisie du


code
...et faciliter par la même occasion l'écriture d'une macro.


À une question toute simple, je suppose que la réponse doit être
évidente !!!



Merci d'avance à ceux et à celles qui se pencheront sur la question.

P.S. L'option "Complément du code" dans la fenêtre VBE(visual basic
editor) /barre des menus / outils / options / onglet


Éditeur est effectivement cochée.


Salutations!




















Avatar
LeSteph
Bonsoir,
Merci à vous deux car cette question et sa réponse
éclairent beaucoup de choses, maintenant je sais pourquoi
je suis souvent obligé de faire ctrl+scpacebar, il faut un objet bien défini
..
Pour ceux qui viendront sur ce fil voilà une info qui est bien utile..
Merci
lSteph

"michdenis" a écrit dans le message de news:

Bonjour Alain,

Merci pour cette réponse .

A )

" l'objet Worksheets(2) peut être un Chart ou un Worksheet "

Comment une feuille de calcul "Worksheet" devient une feuille graphique
"Chart"... je ne saisis pas !

Par contre, "Chart" fait parti de la collection Sheets et non Worksheets


B )

" La liste n'est obtenue que lorsqu'Excel identifie parfaitement l'objet"

Dans une expression comme celle-ci :

ActiveSheet. ..... il n'y a pas de liste déroulante
Est-ce à dire qu'excel ne réussit pas à identifier clairement ce qu'est
"ActiveSheet"


C )

" Feuil1 est ici le CodeName donc Worksheet "

Quelle différence entre Feuil1 et Worksheets("Feuil1") ? Pourquoi excel
cela fonctionne très bien avec l'un et pas du tout
avec l'autre ? C'était là le sens de ma question !


D ) Je suis d'accord avec toi quant à l'utilisation des variables objet
... mais cela ne faisait pas parti de ma question !
;-))



Salutations!




"Alain CROS" a écrit dans le message de
news:
Bonjour

La liste n'est obtenue que lorsqu'Excel identifie parfaitement l'objet.

Version 1 : l'objet Worksheets(2) peut être un Chart ou un Worksheet -->
pas de liste

Version 2 : même chose que version 1

Version 3 : Feuil1 est ici le CodeName donc Worksheet

Lors de l'écriture du code, pour obtenir la liste, tu peux passer par une
variable objet intermédiaire que tu supprime
ensuite.

'----------Version 2------------------------
Dim Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets("Feuil1")
With Ws
.Range("A5").Interior.ColorIndex = 5
End With


Alain CROS


"michdenis" a écrit dans le message de news:


Bonjour à tous et à toutes,


Voici 3 bouts de code qui accomplissent la même chose que j'ai copié dans
un module standard. Il y a plein d'exemples qu'il
est possible de formuler dans d'autres types de module. Les exemples
retenues ne le sont pour les fins de mon intervention
!



'----------Version 1------------------------
With Worksheets(2)
.Range("A5").Interior.ColorIndex = 5
End With

'----------Version 2------------------------
ThisWorkbook.Worksheets("Feuil1").Range("A5").Interior.ColorIndex = 5

'----------Version 3------------------------
With Feuil1
.Range("A5").Interior.ColorIndex = 5
End With


Dans "La Version 1" :
Lors de la saisie du code manuellement dans le module, l'insertion du
point entre chaque expression ne génère aucune liste
déroulante à partir de laquelle on peut choisir la méthode ou la
propriété désirée pour compléter la ligne de code

Dans La "Version 2", cette liste déroulante est offerte seulement après
le premier point "thisworkbook" et est absent pour
le reste de la ligne

Dans la "Version 3" , la liste déroulante est offerte à chaque point(.)
inséré dans la ligne de code


Ma question est toute simple :

Est-ce que quelqu'un connaît le ou les principes d'usage qui permettent à
cette liste déroulante d'apparaître lorsque l'on
saisit du code.

Je suppose que la connaissance de ces principes devraient amener à
prédire le comportement d'excel lors de la saisie du
code

...et faciliter par la même occasion l'écriture d'une macro.


À une question toute simple, je suppose que la réponse doit être évidente
!!!

Merci d'avance à ceux et à celles qui se pencheront sur la question.

P.S. L'option "Complément du code" dans la fenêtre VBE(visual basic
editor) /barre des menus / outils / options / onglet
Éditeur est effectivement cochée.


Salutations!











Avatar
michdenis
Bonjour Pierre,

Merci pour ces précisions. J'ai depuis longtemps observé ces différences ...mais la difficulté que j'ai, c'est d'expliquer
( et non pas de constater les différences) le pourquoi au niveau du modèle objet Excel (je suppose que c'est la même chose
pour les autres applications d'office), de sa structure et de l'hiérarchie des objets. Il y a bien sûr, l'interface
utilisateur avec les différents types de feuille (calcul, graphique ...), les cellules et les objets de la feuille (shapes,
Charts...) et l'interface du développeur représenté par la fenêtre VBE (visual basic editor) avec ses objets particuliers.
Selon les objets de l'interface utilisé, la saisie du code est différente.

Ma question de base, comment peut-on expliquer ces différences en regard du modèle objet d'excel ? C'est peut être pas une
question pour un groupe de news !

Au sujet précisément de cette section de ta réponse, celle-ci me laisse perplexe.

"Pour l'objet Range, c'est différent car tu n'as pas accès au module de
classe de l'objet Range, et tu ne sais donc pas ajouter des propriétés ou
méthodes pour cet objet. Dès lors, même si tu donnais une référence hors
plage, par exemple range("XX9999"), excel te donnerait la liste des
propriétés et méthodes, alors même que l'objet ne peut exister."


Que tu écrives :

Worksheets(1).Range("XX9999")....
OU
Feuil1.Range("XX9999")....
OU
Range("XX9999")....

Sauf pour "Worksheets(1).Range("XX9999")...." que tu as expliqué, les 2 autres syntaxes génèrent une liste déroulante à
chacun des points !

L' accès au module de classe de l'objet Range a lieu en cours d'exécution du code ...à chaque fois que l'exécution du code
rencontre le mot (obje) "Range", le module de classe objet "Range" est appelé ... c'est le principe même des bibliothèques
dynamiques.

L'autre alternative est de déclarer une variable objet de type range qui aura pour effet de créer une instance du module de
classe Range et de lui assigner une plage de cellules.


Salutations!




"Pierre Fauconnier" a écrit dans le message de
news:euKT$
A nouveau, c'est parce que tu utilises worksheets(1).Range... Si tu utilises
Feuil1.Range..., tu auras une liste qui suivra chaque point, car Excel saura
à quel objet tu te réfères.
Pour l'objet Range, c'est différent car tu n'as pas accès au module de
classe de l'objet Range, et tu ne sais donc pas ajouter des propriétés ou
méthodes pour cet objet. Dès lors, même si tu donnais une référence hors
plage, par exemple range("XX9999"), excel te donnerait la liste des
propriétés et méthodes, alors même que l'objet ne peut exister.

Pierre

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


Cela fait un certain sens !! ;-))

Et si j'écris dans un module standard :

Worksheets(1).range("A1").Interior.Colorindex =5 , aucune liste suggéré
pour les les "points" de la ligne de code.



Si j'écris seulement dans un module standard :

range("A1").Interior.Colorindex =5 'Excel me propose une liste
déroulante pour tous les points.



Comment expliquer le fait de donner le nom de la feuille à laquelle
appartient l'objet "Range" semble "troubler" excel. Il

ne semble pas avoir de problème en l'absence de l'objet feuille.

Un autre petit exemple :

Si j'écris dans un module standard :

Shapes("toto"). aucune liste dérolante

Si j'écris la même chose dans une feuille module

Shapes("toto"). Une liste est suggérée ... même si aucune "Shape"
n'existe dans la dite feuille ... peu importe le nom

utilisé pour la "shape".

Je suppose qu'excel ne peut pas savoir là aussi, avant l'exécution de la
procédure, si la "Shape" existe ...mais cela ne

l'empêche pas de m'afficher la liste déroulante à la saisie !

Tu as une explication ? Merci.


Salutations!






"Pierre Fauconnier" a écrit dans le
message de

news:
Bonsoir Michel

Lorsque tu utilises l'index pour un worksheet, Excel ne sait pas a priori
si

l'objet existe ou non, car il interprétera l'index à l'exécution. Comme un
worksheet pourrait avoir des propriétés ou procédures particulières ( hors
du jeu standard des propriétés et méthodes définies par Excel), l'éditeur
ne

sait pas afficher de liste.
Par contre, lorsque tu utilises le codename de l'objet, Excel "voit" que
cet

objet existe et peut donc t'afficher la liste des méthodes et propriétés
propres à cet objet.

Au niveau de l'exécution, il y a un temps plus long d'exécution lorsque tu
utilises worksheets(1) ou worksheets("Feuil1") que lorsque tu utilises
Feuil1 directement, car Excel doit vérifier la syntaxe à l'exécution dans
les deux premiers cas alors qu'il le fait au lancement de la macro dans le
troisième cas.

Cela convient-il?


--
Pierre Fauconnier ()
Les sept laids tuent ( Lewis Carol )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

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

Merci pour cette réponse .

A )

" l'objet Worksheets(2) peut être un Chart ou un Worksheet "

Comment une feuille de calcul "Worksheet" devient une feuille graphique
"Chart"... je ne saisis pas !


Par contre, "Chart" fait parti de la collection Sheets et non
Worksheets




B )

" La liste n'est obtenue que lorsqu'Excel identifie parfaitement
l'objet"



Dans une expression comme celle-ci :

ActiveSheet. ..... il n'y a pas de liste déroulante
Est-ce à dire qu'excel ne réussit pas à identifier clairement ce qu'est
"ActiveSheet"



C )

" Feuil1 est ici le CodeName donc Worksheet "

Quelle différence entre Feuil1 et Worksheets("Feuil1") ? Pourquoi excel
cela fonctionne très bien avec l'un et pas du tout

avec l'autre ? C'était là le sens de ma question !


D ) Je suis d'accord avec toi quant à l'utilisation des variables objet
... mais cela ne faisait pas parti de ma question !

;-))



Salutations!




"Alain CROS" a écrit dans le message de
news:

Bonjour

La liste n'est obtenue que lorsqu'Excel identifie parfaitement l'objet.

Version 1 : l'objet Worksheets(2) peut être un Chart ou un Worksheet -->
pas de liste


Version 2 : même chose que version 1

Version 3 : Feuil1 est ici le CodeName donc Worksheet

Lors de l'écriture du code, pour obtenir la liste, tu peux passer par
une


variable objet intermédiaire que tu supprime
ensuite.

'----------Version 2------------------------
Dim Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets("Feuil1")
With Ws
.Range("A5").Interior.ColorIndex = 5
End With


Alain CROS


"michdenis" a écrit dans le message de news:



Bonjour à tous et à toutes,


Voici 3 bouts de code qui accomplissent la même chose que j'ai copié
dans un module standard. Il y a plein d'exemples qu'il


est possible de formuler dans d'autres types de module. Les exemples
retenues ne le sont pour les fins de mon intervention


!


'----------Version 1------------------------
With Worksheets(2)
.Range("A5").Interior.ColorIndex = 5
End With

'----------Version 2------------------------
ThisWorkbook.Worksheets("Feuil1").Range("A5").Interior.ColorIndex = 5

'----------Version 3------------------------
With Feuil1
.Range("A5").Interior.ColorIndex = 5
End With


Dans "La Version 1" :
Lors de la saisie du code manuellement dans le module, l'insertion du
point entre chaque expression ne génère aucune liste


déroulante à partir de laquelle on peut choisir la méthode ou la
propriété désirée pour compléter la ligne de code



Dans La "Version 2", cette liste déroulante est offerte seulement
après



le premier point "thisworkbook" et est absent pour
le reste de la ligne

Dans la "Version 3" , la liste déroulante est offerte à chaque
point(.)



inséré dans la ligne de code


Ma question est toute simple :

Est-ce que quelqu'un connaît le ou les principes d'usage qui
permettent



à cette liste déroulante d'apparaître lorsque l'on
saisit du code.

Je suppose que la connaissance de ces principes devraient amener à
prédire le comportement d'excel lors de la saisie du


code
...et faciliter par la même occasion l'écriture d'une macro.


À une question toute simple, je suppose que la réponse doit être
évidente !!!



Merci d'avance à ceux et à celles qui se pencheront sur la question.

P.S. L'option "Complément du code" dans la fenêtre VBE(visual basic
editor) /barre des menus / outils / options / onglet


Éditeur est effectivement cochée.


Salutations!
















Avatar
Jacquouille
Bonjour matinal à notre copain Denis
Loin de moi l'idée de vouloir répondre à cette colle. Les autres en
seraient vexés. -))
Mais, je crois que tu te lances dans un combat à la Sancho Pansa. Tu veux
deviner comment Excel va réagir. ô grande prétention car Excel est
emme. -)))
Bonne chance et essaie de trouver des questions à ma portée,càd plus
simples. -)
Bonne journée

--
Bien amicalmement,
Vivement conseillé >> http://www.excelabo.net
Jacquouille.

"michdenis" a écrit dans le message de
news:

Bonjour à tous et à toutes,


Voici 3 bouts de code qui accomplissent la même chose que j'ai copié dans
un module standard. Il y a plein d'exemples qu'il

est possible de formuler dans d'autres types de module. Les exemples
retenues ne le sont pour les fins de mon intervention !



'----------Version 1------------------------
With Worksheets(2)
.Range("A5").Interior.ColorIndex = 5
End With

'----------Version 2------------------------
ThisWorkbook.Worksheets("Feuil1").Range("A5").Interior.ColorIndex = 5

'----------Version 3------------------------
With Feuil1
.Range("A5").Interior.ColorIndex = 5
End With


Dans "La Version 1" :
Lors de la saisie du code manuellement dans le module, l'insertion du
point entre chaque expression ne génère aucune liste

déroulante à partir de laquelle on peut choisir la méthode ou la propriété
désirée pour compléter la ligne de code


Dans La "Version 2", cette liste déroulante est offerte seulement après
le premier point "thisworkbook" et est absent pour

le reste de la ligne

Dans la "Version 3" , la liste déroulante est offerte à chaque point(.)
inséré dans la ligne de code



Ma question est toute simple :

Est-ce que quelqu'un connaît le ou les principes d'usage qui permettent à
cette liste déroulante d'apparaître lorsque l'on

saisit du code.

Je suppose que la connaissance de ces principes devraient amener à prédire
le comportement d'excel lors de la saisie du code

...et faciliter par la même occasion l'écriture d'une macro.


À une question toute simple, je suppose que la réponse doit être évidente
!!!


Merci d'avance à ceux et à celles qui se pencheront sur la question.

P.S. L'option "Complément du code" dans la fenêtre VBE(visual basic
editor) /barre des menus / outils / options / onglet

Éditeur est effectivement cochée.


Salutations!






Avatar
Alain CROS
Bonjour

A) Petite erreur de ma part

Version 1 : l'objet Worksheets(2) peut être un Chart ou un
Worksheet --> pas de liste

L'objet Worksheets(2) ne peut pas être un Chart mais :

Worksheets, propriété

Objet Application : renvoie une collection Sheets qui
représente toutes les feuilles de calcul du classeur
actif. En lecture-seule.
Objet Workbook : renvoie une collection Sheets qui
représente toutes les feuilles de calcul du classeur
spécifié. En lecture-seule.

Worksheets renvoie une collection Sheets donc pas typé car
une sheet peut être une worksheet, un chart ...

Petite exemple d'utilisation de Worksheets qui ne retourne
pas une Worksheet :

Dim ws As Worksheet
Set ws = Worksheets.Add(, , , xlExcel4IntlMacroSheet)

Ceci peut être un contre exemple puisque ws propose une
liste
Si on choisi ws.codename --> Erreur

B) ActiveSheet. ..... il n'y a pas de liste déroulante
Est-ce à dire qu'excel ne réussit pas à identifier
clairement ce qu'est "ActiveSheet"

ActiveSheet retourne une sheet qui peut trés bien être un
Chart

C) Quelle différence entre Feuil1 et Worksheets
("Feuil1") ? Pourquoi excel cela fonctionne très bien avec
l'un et pas du tout
avec l'autre ? C'était là le sens de ma question !

Worksheets est une collection Sheets particulière(qui ne
contient que des worksheets) donc Worksheets("Feuil1") est
une sheet.

D) C'est une technique que j'utilise car je ne domine pas
encore tout à fait toutes les propriétés, méthodes, ...

Alain CROS

-----Message d'origine-----
Bonjour Alain,

Merci pour cette réponse .

A )

" l'objet Worksheets(2) peut être un Chart ou un
Worksheet "


Comment une feuille de calcul "Worksheet" devient une
feuille graphique "Chart"... je ne saisis pas !


Par contre, "Chart" fait parti de la collection Sheets
et non Worksheets



B )

" La liste n'est obtenue que lorsqu'Excel identifie
parfaitement l'objet"


Dans une expression comme celle-ci :

ActiveSheet. ..... il n'y a pas de liste déroulante
Est-ce à dire qu'excel ne réussit pas à identifier
clairement ce qu'est "ActiveSheet"



C )

" Feuil1 est ici le CodeName donc Worksheet "

Quelle différence entre Feuil1 et Worksheets("Feuil1") ?
Pourquoi excel cela fonctionne très bien avec l'un et pas

du tout
avec l'autre ? C'était là le sens de ma question !


D ) Je suis d'accord avec toi quant à l'utilisation des
variables objet ... mais cela ne faisait pas parti de ma

question !
;-))



Salutations!


1 2