IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Conversion texte vers nombre [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 21
    Points : 26
    Points
    26
    Par défaut Conversion texte vers nombre
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    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.
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function ConverTxtNum(v) As Double
    Dim t
    t = Replace(Trim("" & v), ".", ",")
    If IsNumeric(t) = True Then ConverTxtNum = t: Exit Function
    t = Replace(t, ",", ".")
    If IsNumeric(t) = True Then ConverTxtNum = t: Exit Function
    End Function
    Sub test()
    Dim n As Double
    n = ConverTxtNum("1.12")
    n = ConverTxtNum("150,2")
    End Sub

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour, bonjour

    le web n'est jamais la solution pour des cas spécifiques comme une feuille de calculs mal fagotée !

    Je suppose que les données n'ont pas été saisies mais importées,
    ce qui ne pose normalement pas de problème si les cellules sont au bon format avant importation …

    Donc une fois les cellules au bon format - déjà le cas du fichier joint -
    la ligne n°5 du code suivant devrait aider pour une version française d'Excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Demo()
        [B2].Copy
     
        With [K2:K33]
            .Value = .Value
            .PasteSpecial xlPasteAll, xlMultiply
        End With
    End Sub
    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 21
    Points : 26
    Points
    26
    Par défaut
    Bonjour Robert, Marc et tous les autres

    Merci beaucoup pour vos réponses

    J'ai testé ta macro, Robert, je n'arrive pas à la faire fonctionner (il ne se passe rien)
    de plus, (pour me coucher moins bête), à quoi correspond les chiffres? des 2 lignes :
    n = ConverTxtNum("1.12")
    n = ConverTxtNum("150,2")

    J'ai testé aussi ta macro, Marc
    Elle fonctionne, mais j'ai exactement les mêmes problèmes sur les mêmes cellules qu'avec ma macro.
    je ne vois pas du tout d'où viens le problème
    le pire, c'est qu' en faisant la conversion manuellement en passant par "edition / Collage spécial", ça fonctionne parfaitement !

    si vous avez une solution, elle sera la bienvenue

    Merci d'avance

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    n = ConverTxtNum("1.12")
    n = ConverTxtNum("150,2")
    permet de vérifier que la convection ce fait bien.

    passe le curseur de la sourie sur n après exécution en pas à pas touche[F8]

    la fonction ConverTxtNum permet de convertir du texte en double en tenant compte des paramètres régionaux.

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Moi de mon côté sous 2003 c'est bon !

    Mais je n'ai peut-être pas bien compris ce que tu voulais faire …

    Sinon la logique voudrait qu'avant importation les cellules soient au bon format et il n'y aurait rien à faire ‼

    Si les cellules sont au bon format avant importation et qu'il y a un souci à posteriori,
    alors le code d'importation est aux fraises !

    Mieux vaut corriger en amont, en aval c'est souvent un peu plus bâtard
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Moi de mon côté sous 2003 c'est bon !
    Vaut mieux corriger en amont, en aval c'est souvent un peu plus bâtard
    tout à fait d'accord.

    ceci dit ma solution en a rendu heureux plus d'un

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 21
    Points : 26
    Points
    26
    Par défaut
    Re-bonjour

    Je suis aussi sur Excel 2003 version française

    J'ai fait plusieurs essais : j'ai toujours le même problème
    tout se convertis et s'aligne à gauche mais j'ai toujours un petit triangle vert
    en haut, à gauche de 4 cellules (K9, K17, K20 et K31) (uniquement ces 4 cellules !)
    Si je fait une somme automatique de K19 : K20, j'obtiens 8,25 alors que je devrais avoir 15,81 : la cellule K20 n'est pas prise en compte.

    J'ai regardé si il n'y y avait pas de MFC : pas trouvé, c'est bizarre comme truc.
    Bonne soirée

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 21
    Points : 26
    Points
    26
    Par défaut
    Re bonjour
    Mon problème est résolu
    (je viens d'avoir une solution sur un autre forum)

    Pour ceux que ça intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    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
    Je n'ai plus qu'à l'adapter pour fonctionner avec mes InputBox
    Merci à tout ceux qui se sont penchés sur mon problème
    Bon week-end

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Regarde quand même ma solution suite à importation mal conçue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Demo()
        For R& = 2 To 33
            With Cells(R, 11)
                .Value = Val(Replace(.Text, ",", "."))
            End With
        Next
    End Sub
    Fonctionne bien pour les cellules n'étant pas au format texte (OK avec ton fichier joint) …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    Regarde quand même ma solution suite à importation mal conçue pour feuille de calculs aux fraises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Demo()
        For R& = 2 To 33
            With Cells(R, 11)
                .Value = Val(Replace(.Text, ",", "."))
            End With
        Next
    End Sub
    Fonctionne bien pour les cellules n'étant pas au format texte …
    j'ai testé, il y a bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print asc(mid(Cells(R, 11),i,1)) 'CHR(130) UTF8

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Oui j'ai vu (après avoir écrit ma Demo)

    mais ma Demo fonctionne bien avec son fichier joint tel quel, sur ma version 2003 (SP3) de tests en tout cas …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 21
    Points : 26
    Points
    26
    Par défaut
    Re-Bonjour

    Je testerai ça ce week-end (ne serai ce par curiosité)
    en tout cas, mon problème est résolu
    bon week-end à vous et Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PROC] Conversion texte en nombre
    Par pierreTPE57 dans le forum SAS Base
    Réponses: 3
    Dernier message: 09/11/2012, 14h29
  2. Conversion texte en nombre
    Par berapard dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/07/2008, 12h29
  3. passage de format texte vers nombre
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 07/06/2007, 16h01
  4. conversion date vers nombre
    Par hector dans le forum Framework .NET
    Réponses: 1
    Dernier message: 18/01/2007, 11h47
  5. conversion text vers integer
    Par jawad.t dans le forum Connexion aux bases de données
    Réponses: 3
    Dernier message: 10/06/2005, 20h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo