Microsoft 365 VBA - Est-ce que 'D' a une signification spéciale ?

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

danielco

XLDnaute Barbatruc
Bonjour,

Je viens de retrouver ce problème pour lequel je n'ai toujours pas de solution :

Dans la cellule, j'ai "3D2".

J'exécute ce code :

VB:
Sub test()
  Dim cellule As Double
  cellule = ActiveCell.Value
  Debug.Print ActiveCell.Value
  Debug.Print cellule
End Sub

J'obtiens comme résultat dans la fenêtre d'exécution:

3D2
300

Quelqu'un a-t-il une explication ?

Merci d'avance.
 
bonjour @danielco
dans votre macro si vous mettez directement
cellule = 3D2
cellule = 3D3
la valeur est automatiquement transformée en
cellule = 300#
cellule = 3000#
et dans la fenêtre d'exécution
300
3000.
En conclusion, D est interprété comme puissance de 10.
Une surprise pour moi aussi
si Cellule n'est pas déclarée en format numérique (Integer, Double ...)
par exemple Dim Cellule (considérée alors comme variant) , le debug affiche 3d2
 
Bonsoir.
J'ai de vagues souvenirs où D était utilisé en Fortran au lieu de E pour éditer des nombres en précision étendue.
Pour accepter des textes venant de telles sources, son interprétation comme annonciateur d'un tel exposant aurait toujours été conservée.
 
bonjour @danielco
dans votre macro si vous mettez directement
cellule = 3D2
cellule = 3D3
la valeur est automatiquement transformée en
cellule = 300#
cellule = 3000#
et dans la fenêtre d'exécution
300
3000.
En conclusion, D est interprété comme puissance de 10.
Une surprise pour moi aussi
si Cellule n'est pas déclarée en format numérique (Integer, Double ...)
par exemple Dim Cellule (considérée alors comme variant) , le debug affiche 3d2
Bonjour,
Merci pour ta réponse.
Daniel
 
Hi,
Excel se réserve des zones de confort...
Essayez de nommer une plage de cellule commençant par C suivi immédiatement par un chiffre (ex : C124klm) ou R comme (r1de9)
Bon courage
PS, "C" est vu par Xcel comme "Column", et "R" comme "Row", donc univers protégé
 
Une variable déclarée As Double ne peut recevoir qu'un nombre binaire virgule flottante double précision (64 bits dont 1 pour le signe, 11 pour l'exposant de puissance de 2, et 52 pour la mantisse). Si on tente de lui affecter une donnée d'un autre type il s'efforcera de la convertir en une donnée Double avant de l'y affecter. Forcément si c'est un String, diverses conventions connues et méconnues seront appliquées …
 
Dernière édition:
J'ai de vagues souvenirs où D était utilisé en Fortran au lieu de E pour éditer des nombres en précision étendue.
Pour accepter des textes venant de telles sources, son interprétation comme annonciateur d'un tel exposant aurait toujours été conservée.
Bonjour @Dranreb😉

Le Fortran: ça me rappelle d'anciens souvenirs ensevelis bien profondément. Une petite cure de jouvence en quelque sorte. pour ma pomme.
 
Bonjour,


Une solution serait peut-être de ne pas déclarer en Double une variable devant recevoir du texte.
Bonjour,
C'est bien sûr un cas d'école. En réalité, "cellule" représente successivement les cellules d'une colonne censée être numérique. La question n'est pas tant de rappeler les bonnes pratiques (même si ça peut être utile) que d'expliquer le résultat.
Daniel
 
Vous l'avez là, l'explication, n'est ce pas ?
Pour éviter de prendre des String qui, à défaut de significations spéciales de certains caractères, pourraient donner lieu à une incompatibilité de type, faites :
VB:
If VarType(ActiveCell.Value) = vbDouble Then cellule = ActiveCell.Value
 
Dernière édition:
La question n'est pas tant de rappeler les bonnes pratiques (même si ça peut être utile) que d'expliquer le résultat.
Il ne s'agit pas de "bonnes pratiques", mais de simple logique.


En réalité, "cellule" représente successivement les cellules d'une colonne censée être numérique.
Comme quoi, on n'est jamais assez prudent lors de la vérification des saisies : une bonne vérification aurait évité d'avoir du texte dans la colonne.



Sur ce, bonne soirée à tous.
🖖
 
Que n'avez vous encore compris ?
VB:
Sub test()
   MsgBox CDbl("123456789D-6")
   End Sub
Affiche 123,456789
De toute évidence "D" est considéré comme annonçant une puissance de 10 au même titre que "E".
Que voulez vous savoir de plus ?
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
33
Affichages
3 K
Réponses
12
Affichages
1 K
D
Réponses
4
Affichages
1 K
T
Réponses
4
Affichages
6 K
ThomasGLT
T
C
Réponses
1
Affichages
2 K
Cekankonvaou
C
Réponses
8
Affichages
1 K
P
  • Question Question
Réponses
1
Affichages
3 K
Patrosso
P
N
  • Résolu(e)
Réponses
3
Affichages
1 K
ninajams
N
D
Réponses
4
Affichages
12 K
D
A
Réponses
3
Affichages
4 K
A
Retour