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!

5 réponses

1 2
Avatar
michdenis
Merci beaucoup pour toutes ces informations supplémentaires.

Bonne journée,


Salutations!



"Alain CROS" a écrit dans le message de news:1e7f01c4a6b9$2d29c810$
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!


Avatar
michdenis
Bonjour Jacquouille,


ô grande prétention car Excel est emme. -)))
**** Si j'avais su, je n'aurais pas poser la question !


essaie de trouver des questions à ma portéeBonne journée
****Savoir comment la fenêtre VBE gère l'apparition des listes déroulantes lors de la saisie du code est à priori une
question simple qui devrait piquer la curiosité de tous les débutants...! Ce n'est pas de ma faute si Alain et Pierre ont
tout fait pour compliquer la réponse !!!

;-)))


Salutations!


--
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
LeSteph
Bonsoir,
question simple qui devrait piquer la curiosité de tous les débutants...!
Et bien si (et pas si simple), après relecture des différents message il me

semble
qu'Alain a bien complèté sa réponse et que j'avais "pas tout bien lu" dans
ta réponse à son premier message..
Sinon depuis le temps que je suis "débutant confirmé" je t'assure que ce
sujet m'a beaucoup intéressé même s'il me pose d'autres question :
ex: pourquoi ws n'apparaît pas au même titre que mes Sub perso ou
ThisWorkbook et en Gras dans l'explorateur d'objets lorsqu'il est déclaré
comme dans le contre exemple d'Alain

Dim ws As Worksheet
Set ws = Worksheets.Add....

En tout cas m^me si pas eu plus de participants cette fois ci,
je t'assure tu devrais nous en faire plus souvent..
la question de la semaine ou pourquoi pas ..du jour..

merci MichDenis
lSteph




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

Bonjour Jacquouille,


ô grande prétention car Excel est emme. -)))
**** Si j'avais su, je n'aurais pas poser la question !


essaie de trouver des questions à ma portéeBonne journée
****Savoir comment la fenêtre VBE gère l'apparition des listes déroulantes
lors de la saisie du code est à priori une
question simple qui devrait piquer la curiosité de tous les débutants...!
Ce n'est pas de ma faute si Alain et Pierre ont
tout fait pour compliquer la réponse !!!

;-)))


Salutations!


--
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
michdenis
Bonjour LeSteph,

Si tu ne peux pas visualiser l'objet Ws dans l'explorateur d'objet lors que tu sélectionne la bibliothèque VBAProject, c'est
tout simplement parce que ta variable n'est pas déclaré comme Public comme ceci :

Dans le haut d'un module standard ou de classe
Public ws As Worksheet

Lorsqu'une variable est déclarée localement, son intérêt ne dure que pour le temps que durera l'exécution de la procédure...
après l'objet disparaîtra même si on ne termine pas la procédure par ce type de code : Set Ws = Nothing (Il est préférable
cependant d'inscrire cette ligne ... c'est comme la déclaration des variables ... !

'Voici un petit exemple qui créera une feuille "Worksheet", l'affichera à l'écran et disparaîtra à la fin de la procédure.
Pour t'en convaincre exécute ce code pas à pas ...

'----------------------
Sub AjoutFeuille()

Dim Sh As Object

Set Sh = CreateObject("excel.sheet")
Sh.Application.Visible = True
(Si tu ne rendais pas la feuille visible, tu pourrais quand même l'utiliser
le temps que dure la procédure pour exécuter certaines
opérations ...et récupérer son contenu avant qu'elle
disparaisse de la mémoire. Cela éviterais d'ajouter
directement une feuille au classeur pour la détruire
à la fin des opérations.

Et pour écrire 25 dans une cellule de cette feuille, tu pourrais
utiliser l'une ou l'autre (et d'autres) ligne de code ..

Sh.Application.ActiveWorkbook.ActiveSheet.Range("A1") = 25
Sh.ActiveSheet.Range("A1") = 100

Attention cette syntaxe n'est pas valide
Sh.range("A1") %
Car sh représente un workbook ... même si l'objet ajouté
est une feuille de calcul. Une feuille de calcul n'est pas viable
seule ... le classeur est donc crée !

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

Quand tu ajoutes une variable Public, Cette variable existe pour toute la durée de vie du classeur pas seulement d'une
procédure ...C'est comme si tu décidais d'ajouter une nouvelle caractéristique (une propriété au module). C'est cette
propriété qui s'ajoute dans l'explorateur d'objets. Observe bien l'icône dans l'explorateur d'objets, c'est celui
représentant "propriété" qui est utilisé... ce n'est pas pour rien !
Si tu écris :

Module1.Ws ...
Ws est une propriété du module1 mais Ws est en même temps un objet de classe "Worksheet" si la variable a été initialée par
Set Ws = worksheets.add à l'intérieur d'une procédure


Salutations!


"LeSteph" a écrit dans le message de news:%
Bonsoir,
question simple qui devrait piquer la curiosité de tous les débutants...!
Et bien si (et pas si simple), après relecture des différents message il me

semble
qu'Alain a bien complèté sa réponse et que j'avais "pas tout bien lu" dans
ta réponse à son premier message..
Sinon depuis le temps que je suis "débutant confirmé" je t'assure que ce
sujet m'a beaucoup intéressé même s'il me pose d'autres question :
ex: pourquoi ws n'apparaît pas au même titre que mes Sub perso ou
ThisWorkbook et en Gras dans l'explorateur d'objets lorsqu'il est déclaré
comme dans le contre exemple d'Alain

Dim ws As Worksheet
Set ws = Worksheets.Add....

En tout cas m^me si pas eu plus de participants cette fois ci,
je t'assure tu devrais nous en faire plus souvent..
la question de la semaine ou pourquoi pas ..du jour..

merci MichDenis
lSteph




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

Bonjour Jacquouille,


ô grande prétention car Excel est emme. -)))
**** Si j'avais su, je n'aurais pas poser la question !


essaie de trouver des questions à ma portéeBonne journée
****Savoir comment la fenêtre VBE gère l'apparition des listes déroulantes
lors de la saisie du code est à priori une
question simple qui devrait piquer la curiosité de tous les débutants...!
Ce n'est pas de ma faute si Alain et Pierre ont
tout fait pour compliquer la réponse !!!

;-)))


Salutations!


--
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
leSteph
Bonjour,

Effectivement, puisque
l'explorateur d'objet peut être appelé de n'importe quel
module ou projet ... j'aurais pû y penser, si je veux voir
un objet dedans je dois donc le déclarer Public pour
qu'il soit accessible hors de ma sub..

Merci à toi et aussi pour les précisions supplémentaires..

lSteph


-----Message d'origine-----
Bonjour LeSteph,

Si tu ne peux pas visualiser l'objet Ws dans
l'explorateur d'objet lors que tu sélectionne la

bibliothèque VBAProject, c'est
tout simplement parce que ta variable n'est pas déclaré
comme Public comme ceci :


Dans le haut d'un module standard ou de classe
Public ws As Worksheet

Lorsqu'une variable est déclarée localement, son intérêt
ne dure que pour le temps que durera l'exécution de la

procédure...
après l'objet disparaîtra même si on ne termine pas la
procédure par ce type de code : Set Ws = Nothing (Il est

préférable
cependant d'inscrire cette ligne ... c'est comme la
déclaration des variables ... !


'Voici un petit exemple qui créera une
feuille "Worksheet", l'affichera à l'écran et disparaîtra

à la fin de la procédure.
Pour t'en convaincre exécute ce code pas à pas ...

'----------------------
Sub AjoutFeuille()

Dim Sh As Object

Set Sh = CreateObject("excel.sheet")
Sh.Application.Visible = True
(Si tu ne rendais pas la feuille visible, tu pourrais
quand même l'utiliser

le temps que dure la procédure pour exécuter certaines
opérations ...et récupérer son contenu avant qu'elle
disparaisse de la mémoire. Cela éviterais d'ajouter
directement une feuille au classeur pour la détruire
à la fin des opérations.

Et pour écrire 25 dans une cellule de cette feuille, tu
pourrais

utiliser l'une ou l'autre (et d'autres) ligne de code ..

Sh.Application.ActiveWorkbook.ActiveSheet.Range("A1") = 25
Sh.ActiveSheet.Range("A1") = 100

Attention cette syntaxe n'est pas valide
Sh.range("A1") %
Car sh représente un workbook ... même si l'objet ajouté
est une feuille de calcul. Une feuille de calcul n'est
pas viable

seule ... le classeur est donc crée !

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

Quand tu ajoutes une variable Public, Cette variable
existe pour toute la durée de vie du classeur pas

seulement d'une
procédure ...C'est comme si tu décidais d'ajouter une
nouvelle caractéristique (une propriété au module). C'est

cette
propriété qui s'ajoute dans l'explorateur d'objets.
Observe bien l'icône dans l'explorateur d'objets, c'est

celui
représentant "propriété" qui est utilisé... ce n'est pas
pour rien !

Si tu écris :

Module1.Ws ...
Ws est une propriété du module1 mais Ws est en même temps
un objet de classe "Worksheet" si la variable a été

initialée par
Set Ws = worksheets.add à l'intérieur d'une procédure


Salutations!


"LeSteph" a écrit dans le message
de news:%

Bonsoir,
question simple qui devrait piquer la curiosité de tous
les débutants...!


Et bien si (et pas si simple), après relecture des
différents message il me

semble
qu'Alain a bien complèté sa réponse et que j'avais "pas
tout bien lu" dans

ta réponse à son premier message..
Sinon depuis le temps que je suis "débutant confirmé" je
t'assure que ce

sujet m'a beaucoup intéressé même s'il me pose d'autres
question :

ex: pourquoi ws n'apparaît pas au même titre que mes Sub
perso ou

ThisWorkbook et en Gras dans l'explorateur d'objets
lorsqu'il est déclaré

comme dans le contre exemple d'Alain

Dim ws As Worksheet
Set ws = Worksheets.Add....

En tout cas m^me si pas eu plus de participants cette
fois ci,

je t'assure tu devrais nous en faire plus souvent..
la question de la semaine ou pourquoi pas ..du jour..

merci MichDenis
lSteph




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


Bonjour Jacquouille,


ô grande prétention car Excel est emme. -)))
**** Si j'avais su, je n'aurais pas poser la question !


essaie de trouver des questions à ma portéeBonne journée
****Savoir comment la fenêtre VBE gère l'apparition des
listes déroulantes


lors de la saisie du code est à priori une
question simple qui devrait piquer la curiosité de tous
les débutants...!


Ce n'est pas de ma faute si Alain et Pierre ont
tout fait pour compliquer la réponse !!!

;-)))


Salutations!


--
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!












.





1 2