OVH Cloud OVH Cloud

MsgBox récalcitrante

4 réponses
Avatar
Daniel
Bonjour,

Dans un usf démarré en feuil1 mais dont les données sont en feuil2.

Et alors que toutes les instructions (For ..., if... then .. else ..).se
déroulent normalement avec les données de la feuil2, l'instruction
suivante se fait avec les données de la Feuil1.

MsgBox Right(Cells(J, 1), 2)

Alors que bien évidement c'est la cellule en feuil2 dont je souhaite
avoir les 2 derniers caractères !

Si je veux lui indiquer plus précisément la feuille Í  utiliser avec
MsgBox Worksheets("feuil2").Right(Cells(J, 1), 2)

J'ai une erreur 438 'Propriété ou méthode non gérée par cet objet'
Petite précision, toutes les instructions sont dans un bloc encadré par
With feuil2 ... End with

Alors, j'ai bien fait un essai en mettant Sheets("feuil2").Activate et
lÍ  ma msgbox travaille bien avec la feuil2 mais c'est pas ce qui est
souhaité. Comment puis-je m'en sortir ?


Au passage, je remercie grandement MichD pour l'éclairage sur le fait
que les combobox travaillent avec du texte et pas avec des nombres.

Daniel

4 réponses

Avatar
Michel__D
Bonjour,
Le 09/01/2021 Í  10:43, Daniel a écrit :
Bonjour,
Dans un usf démarré en feuil1 mais dont les données sont en feuil2.
Et alors que toutes les instructions (For ..., if... then .. else ..).se déroulent normalement avec
les données de la feuil2, l'instruction suivante se fait avec les données de la Feuil1.
MsgBox Right(Cells(J, 1), 2)
Alors que bien évidement c'est la cellule en feuil2 dont je souhaite avoir les 2 derniers caractères !
Si je veux lui indiquer plus précisément la feuille Í  utiliser avec
MsgBox Worksheets("feuil2").Right(Cells(J, 1), 2)
J'ai une erreur 438 'Propriété ou méthode non gérée par cet objet'
Petite précision, toutes les instructions sont dans un bloc encadré par With feuil2 ... End with
Alors, j'ai bien fait un essai en mettant Sheets("feuil2").Activate et lÍ  ma msgbox travaille bien
avec la feuil2 mais c'est pas ce qui est souhaité. Comment puis-je m'en sortir ?
Au passage, je remercie grandement MichD pour l'éclairage sur le fait que les combobox travaillent
avec du texte et pas avec des nombres.

Alors je ne suis pas MichD, mais si c'est bien dans un bloc With feuil2 ... End With
Alors ceci devrait faire l'affaire :
MsgBox Right(.Cell(J, 1).Value, 2)
Avatar
Daniel
Le 09/01/2021 Í  12:05, Michel__D a écrit :
Bonjour,
Le 09/01/2021 Í  10:43, Daniel a écrit :
Bonjour,
Dans un usf démarré en feuil1 mais dont les données sont en feuil2.
Et alors que toutes les instructions (For ..., if... then .. else
..).se déroulent normalement avec les données de la feuil2,
l'instruction suivante se fait avec les données de la Feuil1.
MsgBox Right(Cells(J, 1), 2)
Alors que bien évidement c'est la cellule en feuil2 dont je souhaite
avoir les 2 derniers caractères !
Si je veux lui indiquer plus précisément la feuille Í  utiliser avec
MsgBox Worksheets("feuil2").Right(Cells(J, 1), 2)
J'ai une erreur 438 'Propriété ou méthode non gérée par cet objet'
Petite précision, toutes les instructions sont dans un bloc encadré
par With feuil2 ... End with
Alors, j'ai bien fait un essai en mettant Sheets("feuil2").Activate et
lÍ  ma msgbox travaille bien avec la feuil2 mais c'est pas ce qui est
souhaité. Comment puis-je m'en sortir ?
Au passage, je remercie grandement MichD pour l'éclairage sur le fait
que les combobox travaillent avec du texte et pas avec des nombres.

Alors je ne suis pas MichD, mais si c'est bien dans un bloc With feuil2
... End With
Alors ceci devrait faire l'affaire :
MsgBox Right(.Cell(J, 1).Value, 2)

Merci beaucoup Michel_D. C'est l'identification de la feuille qui
n'était pas au bon endroit. J'en apprend tous les jours grÍ¢ce aux
forumeurs qui nous font don de leurs connaissances.
Vous n'êtes peut-être pas MichD mais je suis sÍ»r qu'Excel a des
accointances avec les Michel quand même ;-)
Encore un grand merci et bonne année 2021.
Daniel
Avatar
MichD
Le 09/01/21 Í  06:05, Michel__D a écrit :
Bonjour,
Le 09/01/2021 Í  10:43, Daniel a écrit :
Bonjour,
Dans un usf démarré en feuil1 mais dont les données sont en feuil2.
Et alors que toutes les instructions (For ..., if... then .. else
..).se déroulent normalement avec les données de la feuil2,
l'instruction suivante se fait avec les données de la Feuil1.
MsgBox Right(Cells(J, 1), 2)
Alors que bien évidement c'est la cellule en feuil2 dont je souhaite
avoir les 2 derniers caractères !
Si je veux lui indiquer plus précisément la feuille Í  utiliser avec
MsgBox Worksheets("feuil2").Right(Cells(J, 1), 2)
J'ai une erreur 438 'Propriété ou méthode non gérée par cet objet'
Petite précision, toutes les instructions sont dans un bloc encadré
par With feuil2 ... End with
Alors, j'ai bien fait un essai en mettant Sheets("feuil2").Activate et
lÍ  ma msgbox travaille bien avec la feuil2 mais c'est pas ce qui est
souhaité. Comment puis-je m'en sortir ?
Au passage, je remercie grandement MichD pour l'éclairage sur le fait
que les combobox travaillent avec du texte et pas avec des nombres.

Alors je ne suis pas MichD, mais si c'est bien dans un bloc With feuil2
... End With
Alors ceci devrait faire l'affaire :
MsgBox Right(.Cell(J, 1).Value, 2)

Bonjour,
Michel_D a raison. Si tu n'es pas très familier avec le VBA, ce que
propose Michel_D prend la forme comme ceci :
With Feuil2
MsgBox Right(.Cell(J, 1).Value, 2)
End With
Attention : Feuil2 n'est pas le nom de l'onglet de la feuille o͹ se
situe la cellule, mais la propriété "NAME" qui est affichée dans le
projetVBA du classeur sous la rubrique "Microsoft Excel Objects" o͹ l'on
retrouve la liste des feuilles de calcul du classeur. Elles ont cette
présentation : Feuil2(toto)
toto est le nom de l'onglet de la feuille de calcul
Feuil2 est le nom de la propriété Name de l'objet
Comme code, tu aurais utilisé ceci avec le nom de l'onglet de la feuille
et tu aurais le même résultat.
With Worksheets("toto")
MsgBox Right(.Cell(J, 1).Value, 2)
End With
Ce que propose Michel_D est la meilleure approche.
En utilisant la propriété "Name" de l'objet au lieu du nom de l'onglet
de la feuille, tu as les avantages suivants :
A ) Tu peux modifier le nom des onglets Í  volonté et tu n'as pas besoin
de modifier le code.
B ) À l'exécution, le code s'exécute plus rapidement...mais avec la
rapidité des processeurs d'aujourd'hui, on n'en est pas Í  quelques
nanosecondes de plus ou moins.
C ) Le plus important, en utilisant ceci : With feuil2 , dès que tu
tapes Í  la ligne en dessous un "."(point), tu obtiens une liste
déroulante des propriétés et méthodes de l'objet. Par conséquent, nul
besoin de les mémoriser. Cela réduit aussi les fautes d'orthographe.
MichD
Avatar
Daniel
Le 09/01/2021 Í  12:39, MichD a écrit :
Le 09/01/21 Í  06:05, Michel__D a écrit :
Bonjour,
Le 09/01/2021 Í  10:43, Daniel a écrit :
Bonjour,
Dans un usf démarré en feuil1 mais dont les données sont en feuil2.
Et alors que toutes les instructions (For ..., if... then .. else
..).se déroulent normalement avec les données de la feuil2,
l'instruction suivante se fait avec les données de la Feuil1.
MsgBox Right(Cells(J, 1), 2)
Alors que bien évidement c'est la cellule en feuil2 dont je souhaite
avoir les 2 derniers caractères !
Si je veux lui indiquer plus précisément la feuille Í  utiliser avec
MsgBox Worksheets("feuil2").Right(Cells(J, 1), 2)
J'ai une erreur 438 'Propriété ou méthode non gérée par cet objet'
Petite précision, toutes les instructions sont dans un bloc encadré
par With feuil2 ... End with
Alors, j'ai bien fait un essai en mettant Sheets("feuil2").Activate
et lÍ  ma msgbox travaille bien avec la feuil2 mais c'est pas ce qui
est souhaité. Comment puis-je m'en sortir ?
Au passage, je remercie grandement MichD pour l'éclairage sur le fait
que les combobox travaillent avec du texte et pas avec des nombres.

Alors je ne suis pas MichD, mais si c'est bien dans un bloc With
feuil2 ... End With
Alors ceci devrait faire l'affaire :
MsgBox Right(.Cell(J, 1).Value, 2)

Bonjour,
Michel_D a raison. Si tu n'es pas très familier avec le VBA, ce que
propose Michel_D prend la forme comme ceci :
With Feuil2
    MsgBox Right(.Cell(J, 1).Value, 2)
End With
Attention : Feuil2 n'est pas le nom de l'onglet de la feuille o͹ se
situe la cellule, mais la propriété "NAME" qui est affichée dans le
projetVBA du classeur sous la rubrique "Microsoft Excel Objects" o͹ l'on
retrouve la liste des feuilles de calcul du classeur. Elles ont cette
présentation : Feuil2(toto)
toto est le nom de l'onglet de la feuille de calcul
Feuil2 est le nom de la propriété Name de l'objet
Comme code, tu aurais utilisé ceci avec le nom de l'onglet de la feuille
et tu aurais le même résultat.
With Worksheets("toto")
    MsgBox Right(.Cell(J, 1).Value, 2)
End With
Ce que propose Michel_D est la meilleure approche.
En utilisant la propriété "Name" de l'objet au lieu du nom de l'onglet
de la feuille, tu as les avantages suivants :
A ) Tu peux modifier le nom des onglets Í  volonté et tu n'as pas besoin
de modifier le code.
B ) À l'exécution, le code s'exécute plus rapidement...mais avec la
rapidité des processeurs d'aujourd'hui, on n'en est pas Í  quelques
nanosecondes de plus ou moins.
C ) Le plus important, en utilisant ceci : With feuil2 , dès que tu
tapes Í  la ligne en dessous un "."(point), tu obtiens une liste
déroulante des propriétés et méthodes de l'objet. Par conséquent, nul
besoin de les mémoriser.  Cela réduit aussi les fautes d'orthographe.
MichD

Bonjour MichD,
Merci pour tous ces apports énormément enrichissants et qui me
permettent d'avoir une vision plus affine des propriétés des noms
utilisés et des objets.
c'est vrai aussi que les différents codes que l'on rencontre n'ont pas
tous la même durée d'exécution et cela n'eest pas toujours de l'ordre de
la nanoseconde ;-)
Bonne continuation et merci en tout cas dans cette volonté d'aider les
néoexcelistes en perdition.
Daniel