Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Simple curiosité

7 réponses
Avatar
josephb
Bonjour,

je vais encore poser une question que je ne voudrais pas voir tourner en
dérision ou polémique stérile, merci d'avance.
Je rappelle que je suis avec Excel 2008 pour Mac

Acheté pour m'exercer pas à pas un bouquin chez Micro-Application "Excel
2007 /VBA pour Excel 2007"

page 518, il y a ce code qui bloque à l'exécution

Private Sub Commentaire()
Dim vTVA As Single
Dim vMontant As Single
Dim vCellule As Object
vTVA = 0.206
For Each vCellule In Selection
vCellule.AddComment
vMontant = Round(vCellule.Value * (1 + vTVA), 2)
' c'est là que ça bloque
vCellule.Comment.Text vMontant & " euros TTC"
Next
End Sub

Si je corrige par
< vMontant = Application.Round(vCellule.Value * (1 + vTVA), 2) >

ça marche.

Je voudrais savoir si d'après vous il s'agit
* d'une anomalie de "mon" logiciel ?
* d'une syntaxe plus récente que mon Excel 98 Mac ne reconnaît pas ?
* d'un oubli de l'imprimeur en recopiant la routine ?


Merci de vos avis


--
J. B.

7 réponses

Avatar
garnote
Salut Joseph,

Pour information, avec XL 2007 sous Windows XP,
ces trois lignes donnent le résultat attendu :
vMontant = WorksheetFunction.Round(vCellule.Value * (1 + vTVA), 2)
vMontant = Application.Round(vCellule.Value * (1 + vTVA), 2)
vMontant = Round(vCellule.Value * (1 + vTVA), 2)

Serge


"Joseph B." a écrit dans le message de news:
1j4wz0r.1yiynbg1xvzg1iN%
Bonjour,

je vais encore poser une question que je ne voudrais pas voir tourner en
dérision ou polémique stérile, merci d'avance.
Je rappelle que je suis avec Excel 2008 pour Mac

Acheté pour m'exercer pas à pas un bouquin chez Micro-Application "Excel
2007 /VBA pour Excel 2007"

page 518, il y a ce code qui bloque à l'exécution

Private Sub Commentaire()
Dim vTVA As Single
Dim vMontant As Single
Dim vCellule As Object
vTVA = 0.206
For Each vCellule In Selection
vCellule.AddComment
vMontant = Round(vCellule.Value * (1 + vTVA), 2)
' c'est là que ça bloque
vCellule.Comment.Text vMontant & " euros TTC"
Next
End Sub

Si je corrige par
< vMontant = Application.Round(vCellule.Value * (1 + vTVA), 2) >

ça marche.

Je voudrais savoir si d'après vous il s'agit
* d'une anomalie de "mon" logiciel ?
* d'une syntaxe plus récente que mon Excel 98 Mac ne reconnaît pas ?
* d'un oubli de l'imprimeur en recopiant la routine ?


Merci de vos avis


--
J. B.


Avatar
MichDenis
Bonjour Joseph,

L'exemple que ton volume donne n'est pas très bon !

L'usage de l'expression "Selection" s'applique à tous les
objets sélectionnés dans une feuille de calcul. Ce peut être
une plage de cellules mais aussi, un graphe, un contrôle
quelconque, une image, un commentaire, etc.

L'enregistreur de macro utilise cette expression pour faciliter
sa tâche d'écrire le code. Il n'a qu'à suivre les commandes que
que l'usager applique avec la souris. Cet outil est très utile à
l'apprentissage mais le code ainsi généré est loin d'être efficace !

Le code que tu as soumis fonctionne "correctement". Tu dois
t'assurer que tu as sélectionné la plage de cellules où tu veux
appliquer la macro avant de la lancer. Tu dois aussi t'assurer
que chaque cellule contient une valeur numérique. Si une cellule
a une valeur Texte, la macro comme elle est écrite va se planter !

Voici une amélioration de la procédure :
'-----------------------------
Private Sub Commentaire()
Dim vTVA As Single
Dim vMontant As Single
Dim vCellule As Range 'Modifier le type objet pour Range
vTVA = 0.206

'D'abord s'assurer que la sélection dans la feuille représente
'une plage de cellules et non un tout autre objet
If TypeName(Selection) = "Range" Then
For Each vCellule In Selection
'La ligne suivante efface le commentaire de la cellule
's'il y en a 1, cela empêche la macro de planter si tu
'essaies d'ajouter un commentaire à une cellule qui en
'contient déjà un.
vCellule.ClearComments
vCellule.AddComment
'La ligne suivante teste si chaque cellule de la sélection
'est une valeur numérique, sinon la procédure se plante !
'Si tu es certain -> valeur numérique -> tu peux passer outre !
If IsNumeric(vCellule.Value) Then
vMontant = Round(vCellule.Value * (1 + vTVA), 2)
' c'est là que ça bloque
vCellule.Comment.Text vMontant & " euros TTC"
End If
Next
End If
End Sub
'-----------------------------
Au lieu d'utiliser l'expression Selection, utilise une variable Objet
de type range

Dim Rg as Range
set Rg = Worksheets("Feuil1").range("A1:A5")
for each c in Rg
if isnumeric(c.value) = True then
'le reste du code

Ceci t'évite de devoir sélectionner ladite plage de cellules
à chaque fois que tu appelles la macro...!



"Joseph B." a écrit dans le message de groupe de discussion :
1j4wz0r.1yiynbg1xvzg1iN%
Bonjour,

je vais encore poser une question que je ne voudrais pas voir tourner en
dérision ou polémique stérile, merci d'avance.
Je rappelle que je suis avec Excel 2008 pour Mac

Acheté pour m'exercer pas à pas un bouquin chez Micro-Application "Excel
2007 /VBA pour Excel 2007"

page 518, il y a ce code qui bloque à l'exécution

Private Sub Commentaire()
Dim vTVA As Single
Dim vMontant As Single
Dim vCellule As Object
vTVA = 0.206
For Each vCellule In Selection
vCellule.AddComment
vMontant = Round(vCellule.Value * (1 + vTVA), 2)
' c'est là que ça bloque
vCellule.Comment.Text vMontant & " euros TTC"
Next
End Sub

Si je corrige par
< vMontant = Application.Round(vCellule.Value * (1 + vTVA), 2) >

ça marche.

Je voudrais savoir si d'après vous il s'agit
* d'une anomalie de "mon" logiciel ?
* d'une syntaxe plus récente que mon Excel 98 Mac ne reconnaît pas ?
* d'un oubli de l'imprimeur en recopiant la routine ?


Merci de vos avis


--
J. B.
Avatar
FS
Bonjour,

Je n'arrive pas à trouver sur le net quelle est la version de VBA
qu'Excel 2008 utilise. Il me semble que jusqu'à Excel 2004 c'était la
version 5, qui n'inclut pas de fonction Round native. Il fallait alors
utiliser celle d'Excel avec la syntaxe Application.Round.
Comme c'est exactement ce que tu rapportes, je me demande si Office pour
Mac n'est pas resté au VBA5 alors que les versions Windows utilisent
VBA6 depuis Office 2000.
C'est juste une hypothèse en passant :)

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Joseph B. a écrit :
Bonjour,

je vais encore poser une question que je ne voudrais pas voir tourner en
dérision ou polémique stérile, merci d'avance.
Je rappelle que je suis avec Excel 2008 pour Mac

Acheté pour m'exercer pas à pas un bouquin chez Micro-Application "Excel
2007 /VBA pour Excel 2007"

page 518, il y a ce code qui bloque à l'exécution

Private Sub Commentaire()
Dim vTVA As Single
Dim vMontant As Single
Dim vCellule As Object
vTVA = 0.206
For Each vCellule In Selection
vCellule.AddComment
vMontant = Round(vCellule.Value * (1 + vTVA), 2)
' c'est là que ça bloque
vCellule.Comment.Text vMontant & " euros TTC"
Next
End Sub

Si je corrige par
< vMontant = Application.Round(vCellule.Value * (1 + vTVA), 2) >

ça marche.

Je voudrais savoir si d'après vous il s'agit
* d'une anomalie de "mon" logiciel ?
* d'une syntaxe plus récente que mon Excel 98 Mac ne reconnaît pas ?
* d'un oubli de l'imprimeur en recopiant la routine ?


Merci de vos avis




Avatar
MichDenis
Il me semble que la version équivalente à 2007 sur Mac
n'existe pas. La version d'Excel est sortie mais sans
la composante VBA !

`A vérifier !



"MichDenis" a écrit dans le message de groupe de discussion :
#zlP#
Bonjour Joseph,

L'exemple que ton volume donne n'est pas très bon !

L'usage de l'expression "Selection" s'applique à tous les
objets sélectionnés dans une feuille de calcul. Ce peut être
une plage de cellules mais aussi, un graphe, un contrôle
quelconque, une image, un commentaire, etc.

L'enregistreur de macro utilise cette expression pour faciliter
sa tâche d'écrire le code. Il n'a qu'à suivre les commandes que
que l'usager applique avec la souris. Cet outil est très utile à
l'apprentissage mais le code ainsi généré est loin d'être efficace !

Le code que tu as soumis fonctionne "correctement". Tu dois
t'assurer que tu as sélectionné la plage de cellules où tu veux
appliquer la macro avant de la lancer. Tu dois aussi t'assurer
que chaque cellule contient une valeur numérique. Si une cellule
a une valeur Texte, la macro comme elle est écrite va se planter !

Voici une amélioration de la procédure :
'-----------------------------
Private Sub Commentaire()
Dim vTVA As Single
Dim vMontant As Single
Dim vCellule As Range 'Modifier le type objet pour Range
vTVA = 0.206

'D'abord s'assurer que la sélection dans la feuille représente
'une plage de cellules et non un tout autre objet
If TypeName(Selection) = "Range" Then
For Each vCellule In Selection
'La ligne suivante efface le commentaire de la cellule
's'il y en a 1, cela empêche la macro de planter si tu
'essaies d'ajouter un commentaire à une cellule qui en
'contient déjà un.
vCellule.ClearComments
vCellule.AddComment
'La ligne suivante teste si chaque cellule de la sélection
'est une valeur numérique, sinon la procédure se plante !
'Si tu es certain -> valeur numérique -> tu peux passer outre !
If IsNumeric(vCellule.Value) Then
vMontant = Round(vCellule.Value * (1 + vTVA), 2)
' c'est là que ça bloque
vCellule.Comment.Text vMontant & " euros TTC"
End If
Next
End If
End Sub
'-----------------------------
Au lieu d'utiliser l'expression Selection, utilise une variable Objet
de type range

Dim Rg as Range
set Rg = Worksheets("Feuil1").range("A1:A5")
for each c in Rg
if isnumeric(c.value) = True then
'le reste du code

Ceci t'évite de devoir sélectionner ladite plage de cellules
à chaque fois que tu appelles la macro...!



"Joseph B." a écrit dans le message de groupe de discussion :
1j4wz0r.1yiynbg1xvzg1iN%
Bonjour,

je vais encore poser une question que je ne voudrais pas voir tourner en
dérision ou polémique stérile, merci d'avance.
Je rappelle que je suis avec Excel 2008 pour Mac

Acheté pour m'exercer pas à pas un bouquin chez Micro-Application "Excel
2007 /VBA pour Excel 2007"

page 518, il y a ce code qui bloque à l'exécution

Private Sub Commentaire()
Dim vTVA As Single
Dim vMontant As Single
Dim vCellule As Object
vTVA = 0.206
For Each vCellule In Selection
vCellule.AddComment
vMontant = Round(vCellule.Value * (1 + vTVA), 2)
' c'est là que ça bloque
vCellule.Comment.Text vMontant & " euros TTC"
Next
End Sub

Si je corrige par
< vMontant = Application.Round(vCellule.Value * (1 + vTVA), 2) >

ça marche.

Je voudrais savoir si d'après vous il s'agit
* d'une anomalie de "mon" logiciel ?
* d'une syntaxe plus récente que mon Excel 98 Mac ne reconnaît pas ?
* d'un oubli de l'imprimeur en recopiant la routine ?


Merci de vos avis


--
J. B.
Avatar
Misange
Bonjour,
Il y a une erreur quelque part dans les références de version citées par
Joseph. Il ne peut pas avoir testé un code VBA avec excel 2008 pour
mac vu qu'il n'y a tout simplement pas de VBA dans cette version
d'office (pas plus sur word que sur excel). Microsoft s'est justifié en
disant qu'il n'avait pas le temps pour cette version de tout modifier
(le ruban + VBA) pour la version mac car les changements de systèmes de
mac le contraignaient à de nombreuses modifications. Ils ont donc choisi
de supprimer VBA de cette version en laissant entendre qu'il serait
rétabli dans la prochaine (2011 pour mac donc). Cela dit qu'en sera-t-il
? Il faudra attendre encore un bon moment pour le savoir.

Ceci a fait très peur à beaucoup de gens qui y ont vu les prémisses
d'une suppression complète du VBA des macs d'abord puis des PC. En tous
cas pour les PC, le VBA est toujours bien présent, et heureusement, dans
la version 2010. Il faut espérer que MS ait compris que la suppression
du VBA rendrait OOo carrément très compétitif et surtout que beaucoup
beaucoup d'utilisateurs de VBA seraient très peu enclins à dépenser des
sous pour perdre un outil fondamental dans beaucoup d'entreprises !

On parle donc ici soit de excel 2007 pour PC soit d'excel 2004 pour mac
en ce qui concerne le VBA.

Misange migrateuse
http://www.excelabo.net : Participez à un travail collaboratif sur excel !


FS a écrit :
Bonjour,

Je n'arrive pas à trouver sur le net quelle est la version de VBA
qu'Excel 2008 utilise. Il me semble que jusqu'à Excel 2004 c'était la
version 5, qui n'inclut pas de fonction Round native. Il fallait alors
utiliser celle d'Excel avec la syntaxe Application.Round.
Comme c'est exactement ce que tu rapportes, je me demande si Office pour
Mac n'est pas resté au VBA5 alors que les versions Windows utilisent
VBA6 depuis Office 2000.
C'est juste une hypothèse en passant :)

FS


Avatar
FS
Merci de ces précisions Florence.
Il faudrait en effet que "Joseph B." vérifie un peu ce qu'il a sur sa
machine.
J'avais entendu parler de ce risque de suppression de VBA sur Mac et PC
mais je n'avais pas "imprimé" que c'était chose faite (provisoirement
j'espère) pour Mac.
Cordialement,

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

Misange a écrit :
Bonjour,
Il y a une erreur quelque part dans les références de version citées par
Joseph. Il ne peut pas avoir testé un code VBA avec excel 2008 pour mac
vu qu'il n'y a tout simplement pas de VBA dans cette version d'office
(pas plus sur word que sur excel). Microsoft s'est justifié en disant
qu'il n'avait pas le temps pour cette version de tout modifier (le ruban
+ VBA) pour la version mac car les changements de systèmes de mac le
contraignaient à de nombreuses modifications. Ils ont donc choisi de
supprimer VBA de cette version en laissant entendre qu'il serait rétabli
dans la prochaine (2011 pour mac donc). Cela dit qu'en sera-t-il ? Il
faudra attendre encore un bon moment pour le savoir.

Ceci a fait très peur à beaucoup de gens qui y ont vu les prémisses
d'une suppression complète du VBA des macs d'abord puis des PC. En tous
cas pour les PC, le VBA est toujours bien présent, et heureusement, dans
la version 2010. Il faut espérer que MS ait compris que la suppression
du VBA rendrait OOo carrément très compétitif et surtout que beaucoup
beaucoup d'utilisateurs de VBA seraient très peu enclins à dépenser des
sous pour perdre un outil fondamental dans beaucoup d'entreprises !

On parle donc ici soit de excel 2007 pour PC soit d'excel 2004 pour mac
en ce qui concerne le VBA.

Misange migrateuse
http://www.excelabo.net : Participez à un travail collaboratif sur excel !


FS a écrit :
Bonjour,

Je n'arrive pas à trouver sur le net quelle est la version de VBA
qu'Excel 2008 utilise. Il me semble que jusqu'à Excel 2004 c'était la
version 5, qui n'inclut pas de fonction Round native. Il fallait alors
utiliser celle d'Excel avec la syntaxe Application.Round.
Comme c'est exactement ce que tu rapportes, je me demande si Office
pour Mac n'est pas resté au VBA5 alors que les versions Windows
utilisent VBA6 depuis Office 2000.
C'est juste une hypothèse en passant :)

FS




Avatar
josephb
Si au moins je m'étais relu "attentivement" avant de poster :-((

J'utilise Excel 98 pour Mac !!
et non une version "2008" comme vous l'avez tous deviné.

je vais encore poser une question que je ne voudrais pas voir tourner en
dérision ou polémique stérile, merci d'avance.
Je rappelle que je suis avec Excel 2008 pour Mac



Pour le coup ça aurait été justifié de crier "impossible" ;-)


Merci pour les conseils de Michdenis, à propos de l'enregistreur de
macros.
Et je regarde avec intérêt ses propositions d'amélioration du code.
En effet, lors de mes petits tests divers et variés de cette macro j'ai
bien rencontré des plantages là où il les avait prévus !

Bien que je suive de très loin les nouveautés MAC (c'est rien de le
dire) ça avait en effet fait grand bruit, comme le rappelle Misange,
quand Microsoft n'a pas implémenté VBA dans la dernière version Mac.

Quant à l'hypothèse de FS, une fois revenu à ma version 98, c'est
probablement la bonne, la fonction native VBA "Round" ne doit pas être
intégrée dans mon antiquité.


Merci encore à tous les quatre de vous être penché sur mon
étourderie ;-)



--
J. B.