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

VBA Access Discussion :

Conversion champs texte en nombre


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut Conversion champs texte en nombre
    Bonjour à tous,

    J'ai une table Access que j'exporte en classeur Excel. Un de ses champs est un champs numérique avec 2 décimales.

    J'importe par la suite ce fichier via VBA dans une BD Access. La table comporte maintenant un champ texte à la place du champs numérique, par contre, la précision n'est pas perdu.

    J'aimerais savoir comment faire une fonction de conversion texte vers numérique en gardant les décimales...

    Présentement j'utilise la fonction VAL(), mais ça enlève les décimales... exemple 2,88 = 2.

    Est-ce qu'il y a une façon en vba de convertir le champs String en numérique sans perdre la précision décimale.

    A+

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 741
    Points : 14 764
    Points
    14 764
    Par défaut
    bonsoir,
    Val() convertit en entier long (sans décimales), il faut utiliser CDbl() pour obtenir un nombre de type Réel double ou CCur() pour obtenir un nombre de type monétaire (avec 4 décimales maximum)
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 450
    Points : 2 210
    Points
    2 210
    Par défaut
    bonjour,
    CDbl() converti un numérique String au format Français en Double CDbl("2,5") il tient compte du caractère décimal en fonction des paramètres régionaux ici la virgule vue que nous somme en France!

    Val() converti un numérique String au format Anglais en ​Double Val("2.5") il ne tien pas compte des paramètres régionaux!

    personnellement je préfère val qui ne tien pas compte des paramètres régionaux donc du pays!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Val(replace("2,5",",","."))

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Est-ce qu'on peut envoyer une valeur NULL ou vide à une variable de type Integer ou Long.

    Lorsque j'ai un chiffre ex.: 2,88. Ça fonctionne. Par contre, lorsque le champs est vide, ça me marque un erreur : Type incompatible. Donc, la fonction VBA ne peut pas s'exécuter.

  5. #5
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 450
    Points : 2 210
    Points
    2 210
    Par défaut
    Les variables ont peur du vide et du néant ,peut importe leur type!
    Regardes la fonction NZ()

    Notes que "" pour un sting par exemple c'est pas vide.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Donc si j'ai un code comme ça :

    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
     
    Public Col1_temp2 As String
    Public Col2_temp2 As String
    Public Col3_temp2 As Integer
    Public Col4_temp2 As Double
    Public Col5_temp2 As Double
    Public Table As String
     
    Function UploadFromDonnees_Fct2(ByVal Ligne1 As String, ByVal Ligne2 As String, ByVal Ligne3 As Integer, ByVal Ligne4 As Double, ByVal Ligne5 As Double)
     
    On Error GoTo ErrorHandler
     
     
     
    Col1_temp2 = Ligne1
    Col2_temp2 = Ligne2
    Col3_temp2 = Ligne3
    Col4_temp2 = Ligne4
    Col5_temp2 = Ligne5
     
    ErrorHandler:
     
     
    End Function
    Les paramètres de la fonction sont envoyés via un bouton dans un formulaire tabulaire. Bref, si c'est un nombre (ex.:2,88), bien ça fonctionne parfaitement. Par contre, si dans la table le champs est vide, la variable Ligne5 n'accepte pas le type...

    Que dois-je faire au code pour remédier à la situation, puisque dans cette situation un champs vide et un 0 est très différent.

  7. #7
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 450
    Points : 2 210
    Points
    2 210
    Par défaut
    Col1_temp2 = NZ(Ligne1,"")

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Toujours la même erreur...

    Nom : 2019-10-02 12-13-52.png
Affichages : 3984
Taille : 2,9 Ko

    L'erreur se fait dans l'appel de la fonction, je ne me rend même pas au code à l'intérieur...

    l'erreur provient de la déclaration de variable Byval Ligne5 as double . L'information dans la table Access comporte un null, vide.

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    Si la valeur "Null" est inévitable, il faut utiliser le type Variant.

    Cordialement.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 741
    Points : 14 764
    Points
    14 764
    Par défaut
    bonsoir,

    illustration de la réponse de madefemere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ... 
    ... ByVal Ligne5 As Variant)
    ...
    Col5_temp2 = NZ(Ligne1,0)  ' car c'est du numérique
    ...
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    n.d.
    Inscrit en
    Juin 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : n.d.

    Informations forums :
    Inscription : Juin 2018
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Merci ça fonctionne.

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

Discussions similaires

  1. [AC-2013] Conversion champ TEXTE en NUMERIQUE dans requête
    Par backx3 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 22/06/2017, 15h00
  2. [XL-2003] Conversion forme texte en nombre
    Par jackborogar dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/02/2013, 17h29
  3. Réponses: 3
    Dernier message: 27/07/2009, 11h09
  4. Réponses: 10
    Dernier message: 06/11/2008, 14h45
  5. Récupérer un nombre dans un champs texte
    Par mandou36 dans le forum Access
    Réponses: 18
    Dernier message: 05/09/2006, 19h11

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