[Résolu] Conversion texte vers nombre

Toine45

XLDnaute Junior
Bonjour à tous
Pratiquant le VBA depuis peut, Je sollicite votre aide pour la correction d’une macro pour Excel 2003
Voici ce que je désire effectuer :
J’ai des tableaux où j’importe des données avec des colonnes de chiffres dans ceux-ci les formats sont parfois en « Texte » or, pour additionner le tout, il me les faut tous au format « nombres »
Si je passe par « Collage spécial en multipliant par 1, ça fonctionne » mais je désire passer par une macro, et là, ça ne fonctionne qu’à moitié ???? (Même si j’enregistre la manip qui marche avec l’enregistreur de macro) je ne comprends pas pourquoi.

Auriez-vous une solution à me proposer pour faire fonctionner ma macro ?

Example avec la colonne K, si on additionne K19 et K20, le résultat est erroné : K20 n’est pas comptabilisé.

Code avec enregistreur :
Code:
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 10/01/2014
'

'
    Range("B2").Select
    Selection.Copy
    Range("K2:K33").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
        SkipBlanks:=False, Transpose:=False
    Range("B2").Select
End Sub


Code fonctionnant à moitié (Même problèmes qu’avec le code enregistré, aux mêmes cellules
(K9, K17, K20, K30)

Code:
Option Explicit
Sub Multiplication_par_x()     
    Dim y As Integer 'Valeur de multiplication
    Dim x As Range 'cellule temporaire pour variable de multiplication
    Dim z As Range 'Selection à multiplier
    Dim ongl As String 'Feuille
    Dim col As String 'Colonne
    Dim derli As Integer 'Dernière ligne de la colonne
    
    On Error GoTo erreurfeuille
    ongl = InputBox("Saisir le nom de la feuille de travail.", _
    Title:="Onglet à traiter", Default:="1")
    
    Sheets(ongl).Select
        col = InputBox("Saisir la colonne à modifier.", _
    Title:="Colonne à convertir", Default:="K")
    
        derli = Cells(Rows.Count, col).End(xlUp).Row
        
    Set z = Range(col & "2 :" & col & derli)
    'Set z = Selection

    z.NumberFormat = "0.00"
    y = Application.InputBox("Entrer le chiffre multiplicateur:", _
    Title:="Selection multiplier", Default:=1, Type:=1)
    Set x = Range("A65536").End(xlUp).Offset(1)
   
    If y = 0 Then Exit Sub
    If x <> "" Then
    
    'ajouter : si cellule vide : garder la cellule vide (pas 0)
    'ajouter : effacement des caractères invisibles et remplacement des points par des virgules

        Exit Sub
        If y <> "" Then y = ""
    Else: x.Value = y
        x.Copy
        z.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
    End If
    x.ClearContents 'efface la cellule temporaire en fin de colonne A
    Exit Sub
erreurfeuille:
MsgBox ("Ce nom n'existe pas !"), vbCritical
End Sub

De plus, je désirerais que si une cellule de la colonne à convertir est vide, qu’après convertion, elle soit toujours vide (qu’il n’y ait pas « 0 »)

Question subsidiaire pour les pros d’Excel :
Je cherche un moyen de convertir une partie du texte (surlignée à la souris) d’une cellule, de minuscule à majuscule (ou l’inverse)
example : DISTRIBUTEUR NOGREN V62 - G3/8 5/3 CF 24VCC V62C611A-A313J
deviendrait : Distributeur norgren V62 G3/8 - 5/3 CF 24VCC V62C611A-A313J

Je n’ai rien trouvé sur le web : est-ce réalisable par macro ?

Merci beaucoup par avance.
 

Pièces jointes

  • Texte_Vers_Nombres.xls
    72 KB · Affichages: 53
Dernière édition:

gilbert_RGI

XLDnaute Barbatruc
Re : Conversion texte vers nombre

Bonjour

le contenu de vos cellules provient sans doute d'un fichier txt
donc les virgules de certaines ne correspondent pas au séparateur excel

pour modifier ceci passez la colonne en revue avec ce code

Code:
Sub test()
    Sheets(1).Select
    For i = 2 To 32
        rep = Replace(Cells(i, 11), Chr(130), Chr(44))
        If rep = "" Then GoTo suite
        With Cells(i, 11)
        .Value = CDbl(rep)
        .Font.Name = "arial"
        .Font.Size = 10
        End With
suite:
        'Debug.Print Cells(i, 11)
    Next
End Sub

pour le 0 il suffit de modifier dans les options excel / options avancées / afficher les options pour cette feuille de calcul
décocher afficher un zero pour valeur nulle

pour la Question subsidiaire

Est-ce toujours le même intitulé , sur quoi peut-on se baser pour connaître (ex: V62)
 
Dernière édition:

jp14

XLDnaute Barbatruc
Re : Conversion texte vers nombre

Bonjour

Ci dessous une macro évènementielle qui permet de transformer les nombres.
Pour trouver la solution il faut utiliser les codes ASCII, en particulier trouver le code de la virgule.

Code à coller dans la feuille sauvegarde.
Un double click sur la colonne lance la procédure

Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Count > 1 Then Exit Sub
With ActiveSheet.Name


Call travdemande(Target.Row, Target.Column, Target.Worksheet.Name, Target.Address)



End With
End Sub


Sub travdemande(ligne1 As Long, colonne1 As Long, feuille1 As String, Colonne As String)

Dim i As Long


Dim Col1 As String
Dim Cellule As Range




Colonne = Replace(Colonne, "$", "")
For i = 1 To Len(Colonne)
If IsNumeric(Mid(Colonne, i, 1)) Then
Exit For
Else
Col1 = Col1 & Mid(Colonne, i, 1)
End If
Next i


With Sheets(feuille1)
For Each Cellule In .Range(Col1 & 2 & ":" & Col1 & .Range(Col1 & "65536").End(xlUp).Row)
Cellule = Replace(Cellule, Chr(130), Chr(44))
If IsNumeric(Cellule) Then
Cellule = CDbl(Cellule)
End If

Next Cellule

End With

End Sub


A tester

JP
 

Toine45

XLDnaute Junior
Re : Conversion texte vers nombre

Bonjour Jp14 - Bonjour à tous
Je viens de tester ta solution (par double clic dans la colonne)
ça fonctionne très bien également
Merci beaucoup
Avec ces 2 solutions, je passe en "Résolu"
Bonne journée à tous
 

Discussions similaires

Réponses
2
Affichages
140

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa