[VBA] Convertir format texte en nombre sans boucle ?

Int0x

XLDnaute Occasionnel
Bonjour à tous,

Je cherche à convertir, via VBA, la range

Code:
Range("C2:C" & Range("D65536").End(xlUp).Row)

de format texte en format nombre.

J'avais trouvé une formule

Code:
Range("C2:C" & Range("D65536").End(xlUp).Row).select
For Each c In Selection
x = Val(c)
Range(c.Address) = CDbl(x)
Next
mais depuis ce matin, celle-ci est devenue très longue.
Jusqu'à présent, c'était fait presque "instantanément" (cela prennait 2-3s pour tout convertir) alors que maintenant, cela descend sur chaque cellule puis fait la conversion. A coup de 0.5s par cellule, c'est impossible de tenir comme ça.

D'où ma question. Existe-t-il une formule permettant de convertir une range de texte en nombre, sans passer par une boucle ? Si je poussais le vice plus loin, je chercherai à comprendre pourquoi un tel changement dans le déroulement de ctte opération, mais je dois reconnaitre que la flemme vient se greffer à mon incompétence en la matière :eek:

Par avance merci ;)
 

PMO2

XLDnaute Accro
Re : [VBA] Convertir format texte en nombre sans boucle ?

Bonjour,

Peut-être avec le code suivant

Code:
Sub aa()
Dim S As Worksheet
Dim R As Range
Dim var
Dim i&
Dim x
Set S = ActiveSheet
Set R = S.Range("C2:C" & S.Range("D65536").End(xlUp).Row)
var = R
For i& = 1 To UBound(var, 1)
  If Not IsDate(x) Then x = Val(var(i&, 1))
  If x <> 0 Then var(i&, 1) = CDbl(x)
Next i&
R = var
End Sub

Cordialement.

PMO
Patrick Morange
 

fluidz91

XLDnaute Nouveau
Re : [VBA] Convertir format texte en nombre sans boucle ?

Bonjour à tous

peut être ceci, fonction des données à convertir....
Code:
Columns(3).TextToColumns FieldInfo:=Array(1, 1)

bon après midi
@+

Bonjour,

Je cherche désespérement à convertir une range TEXTE contenant des nombres X,XX en une range NUMERIQUE. De tout ce que j'ai lu ici, la méthode de parcourir chaque cellule de la range est celle qui fonctionne mais est vraiment trop lente. Je me demande si cette autre technique ne serait pas plus rapide mais je ne la comprends pas... :confused:
Voici le code que j'utilise actuellement:
Code:
Public Sub Macro1()
    Set rngXVal = Range("I9:" & Range("I9").End(xlDown).Address)
    changeFormat rngXVal
    
    Set rngXVal = Range("J9:" & Range("J9").End(xlDown).Address)
    changeFormat rngXVal
End Sub

Sub changeFormat(rng)
    For Each cel In rng
        cel.Value = CDbl(cel.Value)
        cel.NumberFormat = "0.00"
    Next cel
End Sub

Merci d'avance pour votre aide.
 

MJ13

XLDnaute Barbatruc
Re : [VBA] Convertir format texte en nombre sans boucle ?

Bonjour àtous


De tout ce que j'ai lu ici, la méthode de parcourir chaque cellule de la range est celle qui fonctionne mais est vraiment trop lente. Je me demande si cette autre technique ne serait pas plus rapide mais je ne la comprends pas... :confused:

Fluidz91: Avec un fcihier, il y aura surement quelqu'un pour t'aider :confused:.
 

fluidz91

XLDnaute Nouveau
Re : [VBA] Convertir format texte en nombre sans boucle ?

Merci du conseil.
Voici un court extrait du fichier dans lequel j'ai changé le texte, mais les colonnes textes à convertir en numérique sont intacts.
Merci.
 

Pièces jointes

  • ExempleText2Numeric.xls
    40.5 KB · Affichages: 577

MJ13

XLDnaute Barbatruc
Re : [VBA] Convertir format texte en nombre sans boucle ?

Re

Voici ce que Henry t'aurait dit :eek::

Code:
Sub Macro3()
'
' Macro3 Macro
'
'
    'Range("D29").Select
    'Application.Run "Macro1"
    Range("I9:I17").Select
    Selection.NumberFormat = "0.00"
End Sub
 

fluidz91

XLDnaute Nouveau
Re : [VBA] Convertir format texte en nombre sans boucle ?

J'ai déjà testé cette solution, bien que cela modifie le nombre de décimales pour les cellules, j'ai toujours le marqueur (point d'exclamation dans un losange) indiquant que le nombre est au format texte et je ne peux toujours pas faire de calculs à partir de ces cellules.
J'ai essayé le 'PasteSpecial', une méthode trouvée qui consiste à faire range = range *1 (incompatibilité de type) et d'autres choses encore dont je ne me souviens plus, mais rien de concluant.
 

fluidz91

XLDnaute Nouveau
Re : [VBA] Convertir format texte en nombre sans boucle ?

Je pense avoir trouvé une solution satisfaisante sur le site suivant:



Voici mon code adapté:
Code:
Public Sub Macro1()
    Set rngXVal = Range("I9:" & Range("I9").End(xlDown).Address)
    changeFormat rngXVal
    
    Set rngXVal = Range("J9:" & Range("J9").End(xlDown).Address)
    changeFormat rngXVal
End Sub

Sub changeFormat(rng)
    'For Each cel In rng
    '    cel.Value = CDbl(cel.Value)
    '    cel.NumberFormat = "0.00"
    'Next cel
    Dim arrData() As Variant
    Dim arrReturnData() As Variant
    Dim lRows As Long
    Dim lCols As Long
    Dim i As Long, j As Long

    Range("I9:I17").Select
    
    lRows = Selection.Rows.Count
    lCols = Selection.Columns.Count
    
    ReDim arrData(1 To lRows, 1 To lCols)
    ReDim arrReturnData(1 To lRows, 1 To lCols)
    
    Selection.NumberFormat = "0.00"
    arrData() = rng.Value
        
    For j = 1 To lCols
        For i = 1 To lRows
            If IsNumeric(arrData(i, j)) Then ' convert to number
                arrReturnData(i, j) = CLng(arrData(i, j))
            Else ' leave it alone
                arrReturnData(i, j) = arrData(i, j)
            End If
        Next i
  Next j

  rng.Value = arrReturnData
    
End Sub
 

PMO2

XLDnaute Accro
Re : [VBA] Convertir format texte en nombre sans boucle ?

Bonjour,

Sélectionnez la plage à traiter et essayez le code suivant

Code:
Sub TXT2NUM()
Dim R As Range
Dim var
Dim i&
Dim j&
Set R = Selection
var = R
For i& = 1 To UBound(var, 1)
  For j& = 1 To UBound(var, 2)
    If IsNumeric(var(i&, j&)) Then
      var(i&, j&) = CDbl(var(i&, j&))
    End If
  Next j&
Next i&
R = var
End Sub

Cordialement.

PMO
Patrick Morange
 

MJ13

XLDnaute Barbatruc
Re : [VBA] Convertir format texte en nombre sans boucle ?

Re , Bonjour Patrick

fluidz91: En effet, j'avais lancer l'enregistreur après avoir fait ta macro. Sinon, ton fichier est long et il doit avoir un problème (plus rapide si tu copies ta feuille sur un autre fichier). Mais cela doit venir de ton import de données. Et merci pour ton code :).

Patrick: merci pour ce code :), je me disais bien qu'il fallait passer par un tableau mais je ne suis toujours pas au point sur ce sujet et bien d'autres (en 2012 , j'essaierai :eek:).
 

Discussions similaires

Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
312 069
Messages
2 085 039
Membres
102 763
dernier inscrit
NICO26