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 :

Tester si une valeur est numérique


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 291
    Points
    291
    Billets dans le blog
    1
    Par défaut Tester si une valeur est numérique
    Bonjour

    Pour tester si une valeur est numérique j'utilise ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsNumeric(Sheets("Feuil1").Cells(5, 2).Value) Then
    Debug.Print "numerique"
    Else
    Debug.Print "pas numerique"
    End If
    mais j'ai observé quelque de bizarre: si j'ai dans ma cellule 1000 2 (un espace séparant 1000 et 2), le code me renvoie "numerique" !? et je peux mettre autant d'espaces que je veux, c'est toujours numerique!!

    Y a t il une explication?

    merci

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu...
    Bonjour

    bonjour peut etre parce que il y a que des chiffres et vba l'interprète comme tel

    tu pourrais essayé avec la fonction like sur la série de chiffre [0-9] avec un 2 eme sous test sur [a-z] ainsi que des caractères spéciaux
    voir avec la fonction vb "instr" aussi en 2 eme sous test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If IsNumeric(Sheets("Feuil1").Cells(5, 2).Value) and instr (Sheets("Feuil1").Cells(5, 2).Value," ")<1 then 
    Debug.Print "numerique"
    Else
    Debug.Print "pas numerique"
    End If
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  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 677
    Points
    18 677
    Par défaut

    Bonjour,

    peut-être IsNumeric fonctionne comme Val

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function IsNum(Rg As Range) As Boolean
             IsNum = StrComp(Rg.Value2, Val(Rg.Value2), 0) = 0
    End Function

    __________________________________________________________________________________________

    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
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    joli Marc
    petite fonction d'aide a la compréhension ca j'aime
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    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 damalaan Voir le message
    mais j'ai observé quelque de bizarre: si j'ai dans ma cellule 1000 2 (un espace séparant 1000 et 2), le code me renvoie "numerique" !? et je peux mettre autant d'espaces que je veux, c'est toujours numerique!!

    Y a t il une explication?
    La fonction IsNumeric indique si la valeur est utilisable comme une numérique, ce qui est le cas avec l'exemple que tu donnes, malgré l'espace.
    Fais le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Test()
    Dim Y as Integer
    Y = Sheets("Feuil1").Cells(5, 2)
    Debug.Print Y
    End Sub
    Tu verras que Y récupère la valeur numérique utilisable comme tel.

    Si, dans ton cas, c'est l'espace qui te gêne, il vaudrait peut-être mieux que tu utilises une fonction qui vérifie la présence d'espace. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InStr(Sheets("Feuil1").Cells(5, 2)," ")
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour menhir
    cela a déjà été dit en POST#2
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    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 677
    Points
    18 677
    Par défaut




    Loïc,

    pas besoin de chercher forcément la présence d'une espace, teste la fonction du post #3 !

    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)

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ou en utilisant Excel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function IsNum(ByVal Tmp) As Boolean
     
    IsNum = Application.IsNumber(Tmp)
    End Function
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    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 677
    Points
    18 677
    Par défaut




    C'est encore mieux ! Comme quoi il faut d'abord penser Excel avant VBA !

    Il s'agit de la fonction de feuille de calculs ESTNUM dans la version française d'Excel …
    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)

  10. #10
    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 Marc-L Voir le message
    pas besoin de chercher forcément la présence d'une espace, teste la fonction du post #3
    Tu as raison. Je n'avais pas regardé ta solution en détail mais c'est vrai qu'elle est très élégante.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    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 677
    Points
    18 677
    Par défaut




    Merci mais c'est Mercatog qui monte sur la première marche du podium !

    Mais j'ai le mérite de vous faire méfier aussi de la fonction Val

    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)

  12. #12
    Invité
    Invité(e)
    Par défaut Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsNumeric(Trim("" & Sheets("Feuil1").Cells(5, 2).Value)) Then
    Debug.Print "numerique"
    Else
    Debug.Print "pas numerique"
    End If
    Dernière modification par AlainTech ; 04/09/2014 à 06h49. Motif: Suppression de la citation inutile

  13. #13
    Invité
    Invité(e)
    Par défaut L’indécision dans les notes

  14. #14
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub LePourquoi()
     
    Sheets("Feuil1").Cells(5, 2).Value = "1000 2"
    If IsNumeric(Trim("" & Sheets("Feuil1").Cells(5, 2).Value)) Then
        Debug.Print Sheets("Feuil1").Cells(5, 2).Value & " est numerique"
    Else
        Debug.Print Sheets("Feuil1").Cells(5, 2).Value & " n'est pas numerique"
    End If
    End Sub
    PS. Je n'ai pas encore voté ni + ni - car je suis certain que c'est une coquille d'appréciation (lequel de nous est épargné)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Ok vue je mérite le -1
    Dernière modification par AlainTech ; 04/09/2014 à 06h50. Motif: Suppression de la citation inutile

  16. #16
    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 677
    Points
    18 677
    Par défaut



    J'ai voté pour compenser le sans aucune explication …

    C'est vrai qu'un Replace aurait été plus judicieux que le Trim !

    Et puis sachant Robert se prenant la tête dans d'autres discussions n'en finissant pas, pour une fois que c'était simple !
    J'en ai fait une belle hier aussi …
    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)

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour a tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub LePourquoi_parce_que()
     
    Sheets("Feuil1").Cells(5, 2).Value = "1000 2"
    if len(replace(Sheets("Feuil1").Cells(5, 2).Value)," ","")=len(Sheets("Feuil1").Cells(5, 2).Value )Then
        Debug.Print Sheets("Feuil1").Cells(5, 2).Value & " est numerique"
    Else
        Debug.Print Sheets("Feuil1").Cells(5, 2).Value & " n'est pas numerique"
    End If
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  18. #18
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Un peux de sérieux patrick
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  19. #19
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    oui je deconne mais ca marche

    - 1 tu es dur

    ne pourrait-on pas faire avec la fonction de marc?

    elle me plait celle la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub test()
    Debug.Print IsNum(Cells(5, 2))
    End Sub
     
    Function IsNum(Rg As Range) As Variant
             IsNum = IIf(StrComp(Rg.Value2, Val(Rg.Value2), 0) = 0, "numerique", "pas numerique")
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  20. #20
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Le -1 est mérité puisque tu cherches à voir que c'est du numérique ou bien ne contient pas d'espace. "Patricktoulon" est pour ton code sera considéré numérique puisqu'il ne contient pas d'espace. N'en parlons pas des parenthèses à replacer

    D'autant plus qu'on peut induire autrui en erreur.

    Pour moi, ta dernière intervention et loin d'être sérieuse. Voilà.

    Dans l'attente que Marc vienne compenser le vote vu son grand cœur
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/12/2009, 13h58
  2. Comment tester qu'une valeur est dans un tableau ?
    Par Pierrot92320 dans le forum MATLAB
    Réponses: 3
    Dernier message: 18/04/2009, 18h59
  3. Tester si une valeur est numérique dès la saisie
    Par sandrine49 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/06/2008, 17h23
  4. fonction qui vérifie si une valeur est numérique?
    Par ryadh.naouar dans le forum C
    Réponses: 16
    Dernier message: 05/07/2007, 17h33
  5. vérifier qu'une valeur est numérique
    Par kopofb dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/11/2005, 14h02

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