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 :

Diviser un champ montant par 100


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Points : 44
    Points
    44
    Par défaut Diviser un champ montant par 100
    Bonjour,

    J'ai trouvé dans le forum un beau programme qui marche parfaitement pour transférer une table vers un fichier excel.

    Le souci, c'est que dans ma table les montants sont en texte, et le patron voudrait bien qu'il apparraisse en décimal sous excel.

    Quel fonction je pourrais utiliser pour effectuer cette demande ?
    ET ou dans ce programme dois je l'insérer ?

    Merci

    Voici le programme :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    Function TransfertExcelMATABLE()
    Dim xlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
        Dim I As Long, J As Long
        Dim t0 As Long, t1 As Long
     
        t0 = Timer
        Dim rec As Recordset
     
        'ouvre les enregistrements qui se trouvent dans la table mATABLE
        Set rec = CurrentDb.OpenRecordset("MATABLE", dbOpenSnapshot)
     
        'Initialisations
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Add
     
        'Ajouter une feuille de calcul
        Set xlSheet = xlBook.Worksheets.Add
        'renomme la feuille de calcul
        xlSheet.Name = "table"
     
        ' le titre
        '  écriture dans la cellule de ligne 1 et de colonne 1
        xlSheet.Cells(1, 1) = "Export ma table"
     
     
        ' les entetes
        '  .Fields(Index).Name renvoie le nom du champ
        For J = 0 To rec.Fields.Count - 1
            xlSheet.Cells(2, J + 1) = rec.Fields(J).Name
            ' Nous appliquons des enrichissements de format aux cellules
            With xlSheet.Cells(2, J + 1)
                .Interior.ColorIndex = 15
                .Interior.Pattern = xlSolid
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
                .Borders(xlEdgeBottom).Weight = xlThin
                .Borders(xlEdgeBottom).ColorIndex = xlAutomatic
                .HorizontalAlignment = xlCenter
            End With
        Next J
     
        ' recopie des données à partir de la ligne 3
        I = 3
        Do While Not rec.EOF
            For J = 0 To rec.Fields.Count - 1
                ' .Fields(Index).Type renvoie le type du champ
                '   si c'est un Texte (dbText) nous insérons "'" pour
                '   qu'il soit reconnu par Excel comme du Texte
                If rec.Fields(J).Type = dbText Then
                    xlSheet.Cells(I, J + 1) = "'" & rec.Fields(J)
                Else
                    xlSheet.Cells(I, J + 1) = rec.Fields(J)
                End If
            Next J
            I = I + 1
            rec.MoveNext
        Loop
     
        ' code de fermeture et libération des objets
        xlBook.SaveAs "C:\Emplacement\essai.xls"
        xlApp.Quit
        rec.Close
        Set rec = Nothing
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
        t1 = Timer
        Debug.Print I & " enregistrements", Format(t1 - t0, "0") & " secondes"
    End Function

  2. #2
    Membre actif Avatar de Gary_Stoupy
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 244
    Points : 232
    Points
    232
    Par défaut
    Bonjour,

    a ma connaissance, tu ne peux pas "transformer" du texte en numérique pendant le transfert. Il faut le faire avant.
    tu récupères tes données grâce à "rec.Fields(J)"...
    Ce qui est faisable, c'est mettre ces données dans une variable et modifier le type de cette variable (ou de diviser la variable par 100) avant de le transférer et le tour est joué...
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 596
    Points : 34 282
    Points
    34 282
    Par défaut
    salut,
    d'autre part, si tu mets un apostrophe avant la valeur dans la cellule, ca indique que tu y mets du texte.

    J'aurais privilégié plutôt la fonction copyfromrecordset pour recopier tout d'un coup dans un fichier excel...
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Gary_Stoupy Voir le message
    Bonjour,

    a ma connaissance, tu ne peux pas "transformer" du texte en numérique pendant le transfert. Il faut le faire avant.
    tu récupères tes données grâce à "rec.Fields(J)"...
    Ce qui est faisable, c'est mettre ces données dans une variable et modifier le type de cette variable (ou de diviser la variable par 100) avant de le transférer et le tour est joué...

    Bonjour merci pour ta réponse, pourrais-tu m'expliquer un peu plus en me donnant un exemple stp ? car je ne vois pas exactement la procédure


    Merci

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par jpcheck Voir le message
    salut,
    d'autre part, si tu mets un apostrophe avant la valeur dans la cellule, ca indique que tu y mets du texte.

    J'aurais privilégié plutôt la fonction copyfromrecordset pour recopier tout d'un coup dans un fichier excel...
    Est ce que la fonction copyfromrecordset recopie les entetes des champs ? et si j'enlève l'apostrophe, puis je mets quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Si monchamp = [Montant] ALors
           Montant = Montant / 100
    FSI

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 596
    Points : 34 282
    Points
    34 282
    Par défaut
    salut,
    donc si tu essaies tu verras,
    pour le test, on repart sur ce qu'a proposé Gary, et tu traites une requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'les définitions des variables toussa
    strSQL = "SELECT A, B, C/100 FROM MaTable;"
    set RS = Db.OpenrecordSet(strSQL)
    Range("A2").CopyFromRecordSet RS
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par jpcheck Voir le message
    salut,
    donc si tu essaies tu verras,
    pour le test, on repart sur ce qu'a proposé Gary, et tu traites une requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'les définitions des variables toussa
    strSQL = "SELECT A, B, C/100 FROM MaTable;"
    set RS = Db.OpenrecordSet(strSQL)
    Range("A2").CopyFromRecordSet RS
    OK j'ai plus l'apostrophe devant cest déjà un premier pas.

    Je vais essayer pour l'exmple que tu m'as passé

    Merci

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Points : 44
    Points
    44
    Par défaut
    Mille merci

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set strSQL = CurrentDb.QueryDefs("Montant/100")
       Set RS = strSQL.OpenRecordset
       Range("A3").CopyFromRecordset RS
    J'ai mis à partir de la ligne 3 pour qu'il puisse quand meme garder mon entete des champs

    Merci beaucoup à vous deux

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

Discussions similaires

  1. valeur numérique divisée par 100.
    Par vince2005 dans le forum Unix
    Réponses: 8
    Dernier message: 18/02/2014, 17h20
  2. [XL-97] MACRO - division par 100
    Par HINDI58 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/03/2013, 09h31
  3. [AC-2007] ADO rajout/modif champ dans MySQL montant valeur * par 100
    Par jj4822 dans le forum VBA Access
    Réponses: 1
    Dernier message: 28/01/2011, 19h11
  4. problème de division par 100
    Par trent94 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/11/2005, 22h08
  5. [CR8-ORACLE9] entiers divisés par 100 et autres bizarreries
    Par Seb des Monts dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 29/09/2004, 10h49

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