XL 2016 RÉSOLU Convertir plage texte en nombre

MASSJIPE

XLDnaute Impliqué
Bonjour Le forum
Comment convertir la plage A1 T15 en format de nombre VBA
Merci
 

Pièces jointes

  • DPU.xls
    29 KB · Affichages: 52

Dranreb

XLDnaute Barbatruc
@Staple1600 Non, C2 contient "0,321", format standard en effet.
@mapomme Oui, une fonction perso ce serait très facile à écrire, mais je n'en vois pas trop l'intérêt. Une formule qui multiplie par 1 convertit déjà le texte en nombre. Pierrejean l'a fait mais moi je n'aime pas écrire des codes qui parcourent une à une les cellules d'une plage.
 

Dranreb

XLDnaute Barbatruc
Parce que la valeur de la cellule est effectivement un texte et non un nombre. Qu'est-ce que le format d'affichage de la cellule vient faire la dedans ? Il est presque complètement indépendant du type de donnée de sa valeur, sauf pour faire la distinction entre les dates, nombres et devises qui semblent bien en réalité tous stockés en Double. C'est une chose qu'on m'a fait comprendre assez récemment, et c'est en relation avec la propriété Value2, toujours expliquée de façon obscure par Microsoft.
 
Dernière édition:

Le_Sage

XLDnaute Nouveau
Bonjour à toutes et tous.

Bien que le sujet soit ancien et marqué résolu, je me permets d'y ajouter ma contribution afin d'éviter à tout le monde de perdre du temps inutilement.

  1. Les boucles sont à proscrire dans la plupart des cas car beaucoup trop longues à s'exécuter (testez avec 1 million de lignes sur 5 colonnes et vous comprendrez)

  2. les traitements par plages sont tellement plus rapides que les boucles qu'on ne peut pas les comparer

  3. Lorsqu'on place une valeur dans la propriété Formula d'une plage, Excel en détermine automatiquement la nature.
La méthode la plus rapide et efficace consiste donc en :

VB:
Public Sub Reconvertir(ByVal Feuille as WorkSheet, _
                       ByVal Plage as Range)
    Dim shtFeuille as WorkSheet
    Dim rngPlage as Range
    
    set shtFeuille = Iif(Not Feuille is Nothing, Feuille, ActiveWorkbook.ActiveSheet)
    Set rngPlage = Iif(Not Plage is Nothing, Plage, shtFeuille.UsedRange)
    
    With rngPlage
        .Formula = .Value
    End With
End Sub

En espérant que ça pourra aider certains à progresser
 

Statistiques des forums

Discussions
312 610
Messages
2 090 208
Membres
104 452
dernier inscrit
hamzamounir