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 :

Format de nombre (String/Single)


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Par défaut Format de nombre (String/Single)
    Bonjour,

    Je suit mes comptes bancaire via un petit fichier excel et j'ai débuté un ensemble de macro permettant de mettre à jour mon fichier.

    Je pars d'un copier/coller de ma page internet, ensuite je fait un « collage spécial » option « texte unicode » de tou ça sur une feuille de calcul.
    J'ai donc l'ensemble de mes données au format « texte » qu'il ne me reste plus qu'à traiter à l'aide des fonctions de gestion de chaine Rtrim, Ltrim, Mid et autres.

    Tout cela fonctionne à merveille à un détail près...

    Mes date de valeur ainsi que mes valeur sont stockés dans mes cellules sous format « texte », excel renvois d'ailleurs une erreur sur chaque cellule « nombre stocké au format texte ».

    Je ne me suis pas encore penché sur les dates, mais pour les nombres déjà ça coince...

    J'ai tenté plusieurs choses :

    conversion String/Single => « a (single) = b (string) »
    conversion avec val() avec formatage de la chaine avec un séparateur « . » au lieu de « , »
    conversion avec CDbl()

    Tous mes essais ont eu la même conséquence. Les valeurs sont bonne (dans la fenêtre d'éxécution) mais excel s'obstine à fausser mes valeurs.
    Cf image ci-dessous.

    Quelqu'un a une piste ?
    Images attachées Images attachées  

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Par défaut
    Probablement un problème de formatage des données. Essaie l'arrondi à deux décimales. Sinon si tu passe par des variables en VB, selon le type choisi pour les nombres, tu peux avoir ce problème de virgule flottante. Essaie alors de passer tes données en Single si le type Double ne fonctionne pas (ou montre nous ton code pour une réponse plus précise).

  3. #3
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    En effet, as-tu essayé de simplement changer le format des cellules? Pour les montants, je te conseille vivement un format monétaire.

    Cordialement,

    PGZ

  4. #4
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    obtenu en modifiant légèrement une macro (suppression du mot Selection).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Feuil1!"B4:F9").NumberFormat = "#,##0.00 [$€-1]_-;#,##0.00 [$€-1]-"
    Tu y mets l'adresse du Range qui t'intéresse...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Par défaut
    Bonjour,

    merci pour vos réponses.

    Les solutions que vous me proposez concerne le "visuel" de la valeur, aucun problème pour moi à ce niveau là.

    Mon problème est que mes valeurs sont modifié dans la cellule...
    Voici ce que j'ai avec la proposition de zaza :


    Notez que la mise en forme est très jolie
    Mais ma valeur n'est pas correct, alors que dans la fenêtre d'exécution j'ai bien la même valeur celle au format texte dans les cellules de gauche.

    D'une part ça me contrarie de ne pas avoir la bonne valeur, d'autre part au final cela fausse mon calcul final (ce n'est pas grand chose mais sur 1000 lignes d'opérations...).

    Voici le bout de code que j'utilise pour mes essais.
    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
    Sub test()
     
    Dim a As String
    Dim b As Single
     
    Range("o35:o36").NumberFormat = "#,##0.00 [$€-1]_-;#,##0.00 [$€-1]-"
     
    a = Cells(35, 12).Value         'une valeur au format texte
     
    b = a
     
    Debug.Print a, b                   'me donne les bonnes valeur
     
    Cells(35, 14).Value = a
    Cells(35, 15).Value = b
     
    b = Val(a)
     
    Debug.Print b
     
    b = CDbl(a)
     
    Debug.Print b
     
    Cells(36, 14).Value = a
    Cells(36, 15).Value = b
     
    End Sub
    D'autres idées ?

    Edit : comme je l'avais dit, mes valeurs sont mises dans les cellules au format texte et Excel me notifie une erreur ("Nombre stocké sous forme de texte").
    Évidemment je peu en manuel venir cliquer sur le point d'exclamation et cliquer sur "Convertir en nombre"
    et à ce moment là mes valeurs sont bonne.

    Peut être une idée pour faire cette opération en auto ?

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Par défaut
    Et si tu utilisais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a = CSng(Cells(35, 12).Value)
    Tes variables sont des Single, donc il vaut mieux utiliser une conversion en single... Sinon change tes variables en Double et utilise alors Cdbl.
    Je n'ai pas compris pourquoi le format texte posait problème...

  7. #7
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    As-tu essayé de placer le format monétaire dans les cellules au format texte, en colonne N?

    PGZ

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Par défaut
    Citation Envoyé par pgz Voir le message
    Bonjour.

    As-tu essayé de placer le format monétaire dans les cellules au format texte, en colonne N?

    PGZ
    Oui, déjà testé sans succès...

    Citation Envoyé par Psychopathe Voir le message
    Et si tu utilisais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a = CSng(Cells(35, 12).Value)
    Tes variables sont des Single, donc il vaut mieux utiliser une conversion en single... Sinon change tes variables en Double et utilise alors Cdbl.
    Je n'ai pas compris pourquoi le format texte posait problème...
    J'ai tenté, mais non...
    Le format texte pose problème car excel ne peu pas faire de calcul avec du texte, il lui faut des nombres pour ses formules.

    Info supplémentaire : le problème s'est posé sur office 2003.
    Sur office 2007 je n'ai pas le problème car le "collage spécial" est mieux géré.

  9. #9
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Il y a un truc que tu ne nous a pas montré : quand tu sélectionnes une cellule au format texte, comme celles que tu nous as montré en colonne N, qu'y a-t-il d'affiché dans la barre de formule?

    PGZ

  10. #10
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 324
    Par défaut
    Citation Envoyé par Sinn le Sage Voir le message
    Bonjour,

    Edit : comme je l'avais dit, mes valeurs sont mises dans les cellules au format texte et Excel me notifie une erreur ("Nombre stocké sous forme de texte").
    Évidemment je peu en manuel venir cliquer sur le point d'exclamation et cliquer sur "Convertir en nombre"
    et à ce moment là mes valeurs sont bonne.

    Peut être une idée pour faire cette opération en auto ?
    Heu oui en effet c'est la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub convertir()
     
    Dim feuille As Worksheet
     
    'Si les données sont sur la feuille "Feuil1"
    Set feuille = Worksheets("Feuil1")
     
    'Si la donnée à convertir est dans la cellule A2
    feuille.Range("A2").TextToColumns feuille.Range("A2")
     
    Set feuille = Nothing
     
    End Sub

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Par défaut
    Citation Envoyé par pgz Voir le message
    Bonsoir.

    Il y a un truc que tu ne nous a pas montré : quand tu sélectionnes une cellule au format texte, comme celles que tu nous as montré en colonne N, qu'y a-t-il d'affiché dans la barre de formule?

    PGZ
    Bonjour,

    Il y a la même chose que dans ma fenêtre d'éxécution :



    Citation Envoyé par Psychopathe Voir le message
    Heu oui en effet c'est la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub convertir()
     
    Dim feuille As Worksheet
     
    'Si les données sont sur la feuille "Feuil1"
    Set feuille = Worksheets("Feuil1")
     
    'Si la donnée à convertir est dans la cellule A2
    feuille.Range("A2").TextToColumns feuille.Range("A2")
     
    Set feuille = Nothing
     
    End Sub
    Chapeau bas !!
    En effet, ça fonctionne.
    Je ne connaissais pas cette fonction.

    Merci beaucoup.

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

Discussions similaires

  1. Formater avec String.Format un nombre ou une date
    Par bubulemaster dans le forum Débuter
    Réponses: 2
    Dernier message: 29/06/2008, 19h00
  2. [Nombre]formater le nombre de décimal après une virgule.
    Par PascalCmoa dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 09/03/2007, 10h40
  3. formater un nombre en format "monétaire"
    Par jm6570 dans le forum Access
    Réponses: 2
    Dernier message: 14/09/2005, 10h06
  4. Formater un nombre avec Crystal Reports
    Par Soph70 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 05/07/2005, 19h27
  5. Format de nombre
    Par shawinnigan dans le forum Oracle
    Réponses: 12
    Dernier message: 23/08/2004, 12h37

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