Excel - Convertir en nombre par VBA

Asked By Sunbur on 09-Jan-09 05:52 AM
Bonjour,
je souhaite convertir en nombre la premiere colonne de mon fichier.
je m'explique.
j'ai une macro qui me demande de selectionner un fichier.
Sur ce fichier, je voudrais convertir en nombre la premiere colone, puis
faire les traitements qui sont faits par cette macro. Mais comment puis-je
faire ??

Merci de votre aide.
YANN

PS : ma macro actuelle
------
Sub ImportBal()
rep = MsgBox("Ce module va vous permettre d'importer la balance en
choisissant le fichier de votre choix." _
& vbLf & "Etes-vous sûr de vouloir continuer", vbYesNo)
If rep = vbNo Then Exit Sub
Chemin = ActiveWorkbook.path
ChDrive (Mid(ActiveWorkbook.path, 1, 1))
ChDir (Chemin)

Workbooks.Open Filename:=Application.GetOpenFilename("(*.xls),")
ActiveSheet.Range("A2",
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address).Copy
ThisWorkbook.Sheets("Balances").Range("A3").PasteSpecial Paste:=xlPasteValues
ActiveWorkbook.Close

End Sub
----




Daniel.C replied on 09-Jan-09 06:19 AM
Bonjour.

Le code suivant fait le travail, mais remplace les formules par leurs
valeurs (si une formule renvoie du texte, la conversion ne se ferait
pas). Si tu veux conserver les formules, enlèce les deux premières
lignes du code. J'ai utillisé la cellule B1, tu peux modifier.

Range("A1", [A65000].End(xlUp)).Copy
Range("A1", [A65000].End(xlUp)).PasteSpecial xlPasteValues
[B1] = 1
[B1].Copy
Range("A1", [A65000].End(xlUp)).PasteSpecial xlPasteAll, xlMultiply
[B1] = ""

Cordialement.
Daniel
michdenis replied on 09-Jan-09 06:53 AM
Ta procédure, je l'aurais écrite comme ceci :

'------------------------------------------
Sub test()
Dim Fichier As String, X
Dim DerLig As Long, DerCol As Integer
Dim Chemin As String, Wk As Workbook
If MsgBox("Ce module va vous permettre " & _
Exit Sub
End If
Chemin = ActiveWorkbook.Path
If Chemin = "" Then
Chemin = Application.DefaultFilePath
End If
ChDrive (Mid(ActiveWorkbook.Path, 1, 1))
ChDir (Chemin)
Application.ScreenUpdating = False
Fichier = Application.GetOpenFilename("(*.xls),xls", , , , False)
If TypeName(Fichier) = "Boolean" Then
MsgBox "Opération annulée. Aucun fichier sélectionné"
Exit Sub
Else
Set Wk = Workbooks.Open(Fichier)
End If
With Wk.ActiveSheet
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
X = .Range(.Range("A2"), .Cells(DerLig, DerCol))
End With
With ThisWorkbook.Sheets("Feuil1")
.Range("A3").Resize(UBound(X, 1), UBound(X, 2)) = X
End With
Wk.Close

End Sub
'------------------------------------------

Pour ce qui est de transformer ce que contient la colonne A
en numérique, faudrait d'abord savoir ce qu'il y a dedans.



Bonjour,
je souhaite convertir en nombre la premiere colonne de mon fichier.
je m'explique.
j'ai une macro qui me demande de selectionner un fichier.
Sur ce fichier, je voudrais convertir en nombre la premiere colone, puis
faire les traitements qui sont faits par cette macro. Mais comment puis-je
faire ??

Merci de votre aide.
YANN

PS : ma macro actuelle
------
Sub ImportBal()
rep = MsgBox("Ce module va vous permettre d'importer la balance en
choisissant le fichier de votre choix." _
& vbLf & "Etes-vous sûr de vouloir continuer", vbYesNo)
If rep = vbNo Then Exit Sub
Chemin = ActiveWorkbook.path
ChDrive (Mid(ActiveWorkbook.path, 1, 1))
ChDir (Chemin)

Workbooks.Open Filename:=Application.GetOpenFilename("(*.xls),")
ActiveSheet.Range("A2",
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address).Copy
ThisWorkbook.Sheets("Balances").Range("A3").PasteSpecial
Paste:=xlPasteValues
ActiveWorkbook.Close

End Sub
----
Sunbur replied on 09-Jan-09 07:24 AM
Bonjour,
alors, dans ma première colonne, ce sont uniquement des chiffres.
mais il y a le petit triangle vert qui me propose de les convertir en nombre.
C'est cette opération que je souhaite faire.

Merci
YANN
Sunbur replied on 09-Jan-09 07:30 AM
Euh, en fait, la colonne A ne contient pas de formule. ce sont des chiffres.
mais j'ai un petit onglet vert qui me propose de les convertir en nombre.
c'est cette opération que je souhaite réaliser.
Merci.
YANN
PS : j'en ai parlé aussi à michdenis qui m'aide sur ce post.
Daniel.C replied on 09-Jan-09 07:33 AM
Alors :

[B1] = 1
[B1].Copy
Range("A1", [A65000].End(xlUp)).PasteSpecial xlPasteAll, xlMultiply
[B1] = ""
Daniel.j replied on 09-Jan-09 08:21 AM
Pour convertir du texte

Sub TexteEnChiffre()
Dim maZone As Range
Set maZone = Range("A1:" & Range("A100").End(xlUp).Address) 'Définit plage
maZone.Select
Dim unecellule As Object
For Each unecellule In Selection
valeur = ActiveCell.Value
If valeur = "" Then 'Saute cellules vides
GoTo suite
End If
valnum = CDbl(valeur) 'convertit texte en chiffre
unecellule.Value = valnum
suite:
ActiveCell.Offset(1, 0).Select
Next
End Sub

Daniel
--
FAQ MPFE
http://dj.joss.free.fr/faq.htm
VBAXL
http://dj.joss.free.fr/
michdenis replied on 09-Jan-09 08:55 AM
Cette procédure devrait aussi transformer tes cellules en texte
en colonne A:A

'-------------------------------------------
Sub test()
Dim Fichier As String, X
Dim DerLig As Long, DerCol As Integer
Dim Chemin As String, Wk As Workbook
If MsgBox("Ce module va vous permettre " & _
Exit Sub
End If
Chemin = ActiveWorkbook.Path
If Chemin = "" Then
Chemin = Application.DefaultFilePath
End If
ChDrive (Mid(ActiveWorkbook.Path, 1, 1))
ChDir (Chemin)
Application.ScreenUpdating = False
Fichier = Application.GetOpenFilename("(*.xls),xls", , , , False)
If TypeName(Fichier) = "Boolean" Then
MsgBox "Opération annulée. Aucun fichier sélectionné"
Exit Sub
Else
Set Wk = Workbooks.Open(Fichier)
End If
With Wk.ActiveSheet
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
X = .Range(.Range("A2"), .Cells(DerLig, DerCol))
End With
With ThisWorkbook.Sheets("Balances")
.Range("A3").Resize(UBound(X, 1)).ClearContents
.Range("A3").Resize(UBound(X, 1)).NumberFormat = "General"
.Range("A3").Resize(UBound(X, 1), UBound(X, 2)) = X
End With
Wk.Close False
End Sub
'-------------------------------------------



Bonjour,
alors, dans ma première colonne, ce sont uniquement des chiffres.
mais il y a le petit triangle vert qui me propose de les convertir en
nombre.
C'est cette opération que je souhaite faire.

Merci
YANN
Sunbur replied on 09-Jan-09 09:13 AM
Re,
je viens d'essayer : il me met "erreur d'execution 13 : incompatibilité de
type"
??
Merci
Daniel.j replied on 09-Jan-09 09:35 AM
essaie en ajoutant
On Error Resume Next
avant cette ligne
valnum = CDbl(valeur) 'convertit texte en chiffre

Daniel
Sunbur replied on 09-Jan-09 09:49 AM
C'est impecable, magnifique, ça fonctionne du toner !!!
Merci encore.
YANN