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 :

Supprimer un espace dans un nombre qui n'en est pas un ! [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 77
    Points : 39
    Points
    39
    Par défaut Supprimer un espace dans un nombre qui n'en est pas un !
    Bonjour,

    Voici un petit moment que je tourne en rond sans trouver de solution malgré mes recherches

    Dans un fichier, je récupère des nombres qui se présentent par exemple sous la forme 1 016. Or il n'est pas reconnu comme un nombre, même si je le convertis, et j'ai besoin de le transformer en nombre pour m'en servir dans des calculs.
    Pour cela, j'ai essayer de supprimer cet espace qui me gêne => pas de résultat avec la fonction Replace
    J'ai donc essayer de contourner le problème en recherchant cet espace pour le supprimer. J'ai par exemple essayé avec les codes suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test = InStr(Range("P4").Value, " ")
    me renvoie la valeur 0, l'espace est donc introuvable alors qu'il est considéré comme un caractère puisque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test = Len(Range("P4"))
    me donne 5 en réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test = Left(Right(Range("P4").Value, 4), 1)
    m'indique que Test = " ", mais impossible d'exploiter cette réponse. J'ai simplement testé avec le code ci-dessous qui ne m'affiche rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Test = " " Then MsgBox "Espace"
    Auriez-vous une solution à me proposer pour supprimer automatiquement ces espaces et me permettre ainsi d'utiliser ces nombres dans mes calculs ? Merci d'avance

    Bonne journée
    Bruno

  2. #2
    Membre régulier
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Points : 96
    Points
    96
    Par défaut
    Salut,

    Essaye ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test = Replace(Test, " ", "")
    Test est ton nombre en variable string
    Tu y remplaces l'espace " " par rien ""

    Après tu pourras le convertir en un nombre suivant le format que tu souhaites
    (tu peux le faire sur la même ligne)

    Dis moi si cela fonctionne

  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,

    en fait ce n'est tout simplement pas un espace ! C'est comme cela quand on joue avec le net …

    La fonction Asc va permettre de trouver le code exact du caractère et la fonction Chr sera utile pour le remplacement,
    consulter l'aide VBA intégrée de chacune …

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Est-ce que tu as essayé simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim test2 as integer
    test2=val(Range("P4").Value)
    Que se passe-t-il si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim test2 as integer
    test2=Range("P4").Value + 1
    Et que renvoie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i as integer
    For i=1 to len(Range("P4").Value)
       debug.print asc((mid(Range("P4"),i,1))
    next i
    Avec le nombre que tu as donné, tu devrais obtenir :
    49
    32
    48
    49
    54
    Si le second nombre n'est pas 32, alors ce n'est pas un espace.

  5. #5
    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

    Comme ce n'est pas un espace au sens du code ASCII #32,
    la fonction Val renvoie uniquement la partie à gauche du caractère …

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Effectivement parce qu'un "vrai" espace n'empêcherait pas la fonction Val de convertir cette chaîne en valeur numérique.

  7. #7
    Membre régulier
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Points : 96
    Points
    96
    Par défaut
    en fait ce n'est tout simplement pas un espace ! C'est comme cela quand on joue avec le net …
    Autant pour moi, désolé d'avoir induit en erreur.
    Toujours suivre les conseils des plus anciens

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 77
    Points : 39
    Points
    39
    Par défaut
    Merci pour votre aide

    Menhir, Marc-L a donné la réponse. Je ne connaissais pas cette fonction VAL.

    GoFio, comme indiqué dans mon 1er message, j'avais d'abord essayé cette fonction ... en vain mais elle va tout de même me servir, voir le code ci-dessous

    Marc-L, merci beaucoup ça marche avec le code suivant, Asc(Test) renvoyant la valeur 160. Je n'avais jamais utilisé ces fonctions, et je n'ai absolument pas eu l'idée de les utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Test As String
    Test = Replace(Range("P4"), Chr(160), "")
    Range("P4").Value = Test
    Pour info, les "nombres" sont issus d'une application intranet qui me permet d'exporter des résultats de requêtes au format Excel ... mais il semble que ces exportations soient perfectibles puisque ça ne marche pas dans certains cas

    Edit : code simplifié

  9. #9
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par brunop3165 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test = Left(Right(Range("P4").Value, 4), 1)
    Tu devrais jeter un oeil sur la fonction Mid() dans l'aide VBA. Ca va te simplifier la vie.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Salut,

    Ça m'étais arrivais aussi sur Excel. La fonction SUPPRESPACE ne marchait pas parce que le caractère Unicode était différent de celui d'un espace standard. Il faut utiliser UNICAR/UNICODE sur EXCEL ou ChrW & AscW sur VBA. Le codage est effectué sur 16 bit plutôt que 8 bit avec UNICAR/UNICODE/ChrW/AscW.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 77
    Points : 39
    Points
    39
    Par défaut
    Menhir, j'utilise ponctuellement Mid, mais je ne pouvais pas l'utiliser précédemment puisque je ne savais pas quel caractère je cherchais
    J'ai édité mon message précédent pour simplifier le code.

  12. #12
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par brunop3165 Voir le message
    J'ai édité mon message précédent pour simplifier le code.
    Encore plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("P4").Value = Replace(Range("P4"), Chr(160), "")

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 77
    Points : 39
    Points
    39
    Par défaut
    Exact, merci

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

Discussions similaires

  1. [AJAX] Nombre qui n'en est pas un
    Par fred1270 dans le forum AJAX
    Réponses: 8
    Dernier message: 06/07/2010, 09h33
  2. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  3. supprimer les espaces dans une chaîne de caratères.
    Par Empty_body dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2006, 18h43
  4. [String] supprimer un espace dans un String
    Par Zanton dans le forum Langage
    Réponses: 5
    Dernier message: 13/07/2006, 15h33
  5. Réponses: 5
    Dernier message: 20/05/2005, 11h33

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