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

VB 6 et antérieur Discussion :

Format de données dans MSHFlexGrid


Sujet :

VB 6 et antérieur

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut Format de données dans MSHFlexGrid
    Bonjour a tous.

    Dans une appli VB6 construite sur la base de tables temporaires SQL2000, j'utilise des MSHFlexGrid.
    Je voudrais savoir s'il est possible de définir le format d'affichage des données dans les MSHFlexGrid, le but étant d'avoir les numériques avec 2 décimales.

    A+
    (PS: Je ne crois pas que le code soit nécessaire pour ce poste, mais comme l'erreure est humaine ..... si besoin, vous dite .... mais pas trops fort.)

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut Complément d'info.
    Re

    J'utilise un DatEnvironment pour ma connection.
    J'ais essayé d'arrondir les valeurs au niveaux de l'import dans mes table temporaire : résultat, les valeurs sont à deux decimales dans la table mais pas à l'affichage dans vb.
    ne perdant pas courrage j'ai effectué la même opération au niveaux du DataEnvironment avec le même résultat.
    Pour ce fair j'utilise un Round().
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Round(Champ1, 2) AS Champ, ... From Table
    A+

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    il peut s'agir tout simplement d'une question de . (point) ou de , (virgule) suivant l'entrée des données dans le grid.
    A+
    PS: tu est dans le bon forum.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Bonjour

    et merci LeForestier pour ta réponse.
    J'ai un petit peu progressé dans ma recherche, j'utilise la propriété TextMatrix() pour la mise en forme de mes données dans un bloc With
    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
    With MSHCde1
        'Mise en forme
        .BandIndent(1) = 4
        .BackColorIndent(1) = vbYellow
        'Définition des entête de colonne
        .ColHeader(0) = flexColHeaderOn
        .ColHeaderCaption(0, 1) = "C.AF."
        .ColHeaderCaption(0, 2) = "Total Année"
        .ColHeaderCaption(0, 3) = "% Année"
        .ColHeader(1) = flexColHeaderOn
        .ColHeaderCaption(1, 0) = "Mois"
        .ColHeaderCaption(1, 1) = "Total Mois"
        .ColHeaderCaption(1, 2) = "% mois"
        .ColWidth(0, 0) = 300
        'Suppression de la ligne d'entête par défaut
        .FixedRows = 0
        'Définition du format d'affichage des valeurs
        .TextMatrix(1, 2) = Round(MSHCde1.TextMatrix(1, 2), 2)
    End With
    Mais à l'exécution j'ai le message "Erreur d'exécution 13 : Type incompatible"
    pour la création de ma table j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEnv1.Cnn1.Execute ("SELECT A.ID, A.Representant, A.AnneeCde, ROUND(A.SumAnnee, 2) AS SumAnnee, Round((A.SumAnnee/B.TotalAnnee)*100, 2) AS PAnneeCde INTO ABStatCde12 FROM ABStatCde10 AS A INNER JOIN ABStatCde11 AS B ON A.AnneeCde=B.AnneeCde GROUP BY A.ID, A.Representant, A.AnneeCde, A.SumAnnee, B.TotalAnnee")
    les champs numérique sont créés au format Float et arrondi à 2 décimals (ex : 12,15)
    J'ai bien essayé des conversions aux différents formats numérique, mais sans résultat.
    Le problème vient peut être de la création de ma table temporaire ?
    Mais là, j'avoue que je sèche un peut.

    A+

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    bonjour,
    Comme dit plus haut il est probable que c'est à cause de la virgule, j'ai déjà eu ce problème et je doit dire que j'ai sècher dur pour y remédier.
    Pour dire à VB d'écrire que c'est un nombre il faut l'envoyer sous forme 12.15, bien qu'il l'écrive 12,15 cela dépend des options windows. Je me suis fait une fonction qui remplacait la virgule par un point. Et ça fonctionnait.
    Bon, ton problème est peut-être ailleur mais personnellement je ne vois rien d'autre
    A+

    Edit: en relisant ton ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .TextMatrix(1, 2) = Round(MSHCde1.TextMatrix(1, 2), 2)
    La fontion TextMatrix renvoi au format texte et la fonction Round travaille sur des nombres...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .TextMatrix(1, 2) = Cstr(Round(val(MSHCde1.TextMatrix(1, 2)), 2))
    J'ai pas testé mais c'est une autre piste

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Re

    J'ai déjas essayé cette solution mais sans résultat.
    j'ai aussi essayé le Format.Number="###0.00#" mais toujour pareil.
    En ce qui concerne le problème des . ou , je ne vois pas trops comment procéder, autrement dit à quel moment intervenir et sur tout comment.
    Si je peu abuser ... ... juste un conseil ou deux ? ....

    a+

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Essayons d'un peu cerner le problème, quand tu exécute ta routine en debbug, sur quel ligne il plante ? et si l'erreur est toujours 13
    Tu à tester avec ma ligne ?

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Re

    désolé j'ai répondu un peu vite.
    J'ai déjas testé cette solution ce week end à la maison. le résultat est qu'il n'y a pas de message d'erreur mais les nombres sont toujour affichés xx.xxxxxxxxx et le débug me donne aucune info.
    A vrais dire j'ai tellement essayé de truc que je commence sérieusement à m'embrouiller les neuronnes et je me demande très sérieusement si je ne vais pas abandonner la MsHflexGrid.

    En tout cas merci de ton coup de main, je me sens un peu moin seul dans ce monde de brut ...

    A+

    Edit : la solution est peut être avec Format.Number mais je ne la connais pas trop car jamais utilisé.

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    dim e
    e = Format(MyVar,"### ###,#0") par exemple
    Tu doit mettre le 'format' suivant ton besoin.
    Mais aussi dans l'IDE sélectionné le mot Format et tape F1 pour plus d'explications.
    A+
    Edit: je vient de faire un test avec Round et celà fonctionne mais il ne faut pas mettre la fonction Val
    Et si cela ne fonctionne pas encore peut-être passer par une variable de transition ? à la place de TextMatrix

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a$=textMatrix(1,2)
    textMatrix(1,2)=CStr(Round(a$, 2))
    Je n'ai pas créer de grid mais avec une variable cela fonctionne

    Edit 2: différence entre Format et round
    Round COUPE les décimales exédantes.
    Format ARRONDI la dernière décimale

    EDIT3: en fait j'en arrive a ta conclusion, j'ai fait l'essais avec un grid et je ne comprend pas où se situe le problème car... j'ai mis 3,33333333333333
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Grid1.TextMatrix(2, 2) = Round(Grid1.TextMatrix(2, 2), 2)
    fontionne parfaitement, résultat 3,33 j'ignorais que VB fait les conversions nécessaires, conclusion, il y a une autre cause

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    J'en ai marre des édit, mais je crois que j'ai compris, tu pense que la fonction TextMatrix définit l'affichage de TOUTES les cellules ?
    Si c'est ton optique elle est fausse, chaques cellule doit êtres traitées.
    A moins d'une commande générale que je ne connais pas.
    Il te faut alors faire une boucle qui balaye toutes les cellules.

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Re

    Désolé de te faire perdre ton temps mais après plusieurs essais je panse que le problème est bien au niveau du MSHFlexGrid car :

    1- les données s'affiche correctement dans un datagrid sans aucun formatage
    2- SQL prend bien les données en numérique

    Pour info dans le datagrid les données sont au format 12,5 et dans le MSHFlexGrid elles sont au formats 12.50000000001

    Pour répondre à ton poste je ne veut traiter que les colonnes qui sont en numérique (dans l'exemple fourni je me suis arreté a une colonne).
    L'aide et les infos que j'ai eu par mes différentes recherches me donne toujour TextMatrix pour la mise en forme des données.

    Je panse que le problème vient des propriétés de mon MSHFlexgrid, ... mais la ou lesquelles ?

    A+

  12. #12
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Un peu tard, mais mieux vaut tard que jamais, sur ce
    Bonsoir,
    Je ne sais pas où tu à vu ça sur l'aide mais chez moi elle renvoi..

    Renvoie ou définit le contenu de texte d'une cellule arbitraire.

    Syntaxe
    object.TextMatrix(rowindex, colindex) [=string]
    Cela permet de lire/écrire dans une cellule sans être obligé de déplacer le curseur, mais bon.. comme apparement tu à un peu la tête dure...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim i as integer
       For i=NomGrid.FixedRows to NomGrid.Rows -1
          NomGrid.textMatrix(i,NuméroColonne)= Round(NomGrid.TextMatrix(i, NuméroColonne), 2)
       Next i
    Et tu doit bien sur répéter celà sur toutes les colonnes que tu veux traiter.
    Et ce APRES AVOIR ENTRER LES DONNEES et pas avant comme tu montre dans ton code.
    A+

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 301
    Par défaut
    Bonjour

    Je vois que tu ne lache pas le morceau (03H48), tu est plus courrageux que moi ....
    J'ai déjas essayé ce code que j'ai trouvé sur le forum mais ... "Type Incompatible"
    Désolé de te tenir en éveille avec mon problème.
    Je t'avoue que je baisse les bras ... je jette l'éponge ... bref, j'abandonne le MSHFlexGrid ... pour l'instant. Je suis bloqué depuis 6 jours sur ce problème et maintenant je coince au niveau temps.
    Je te remercie sincèrement de ton aide. Je me pencherais a nouveau sur le problème un peu plus tard. Je reprendrais le prog de A jusqu'a Z pour essayer de comprendre la ou sa bug.
    En tout cas MERCI !!!!

    A+

    Edit: je clos le post car je crois que mon problème ne se trouve pas forcément au niveau du MSFlexGrid. Si il y a lieu je reviendrais dessus ou j'en créerais un nouveau.

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

Discussions similaires

  1. [AC-2010] Format de données dans une requête appliqué à l'entête de la colonne
    Par Humanisto dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/08/2014, 11h43
  2. [AC-2003] Format de données dans zone de texte
    Par stargates01 dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/02/2012, 17h52
  3. Format de données dans userform
    Par _Nimy_ dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/03/2008, 11h16
  4. Formater une donnée dans une requête
    Par elkhy dans le forum Oracle
    Réponses: 1
    Dernier message: 06/08/2006, 17h21
  5. Format de données dans Access
    Par delcroixf dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/02/2006, 23h34

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