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 :

Additionner des variables


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2008
    Messages : 119
    Par défaut Additionner des variables
    Bonsoir a tous,

    Voila, j'ai un petit problème pour additionner des variables. Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If Mid(vLigne, 39, 13) = "1680544109053" Then
         brutMsa = Mid(vLigne, 89, 10)
         brutMsa = (Val(brutMsa)) + (Val(Mid(vLigne, 89, 10)))
         brutMsa = (Val(brutMsa)) + (Val(Mid(vLigne, 89, 10)))
         With rstEmploye
              .Fields("brutDernierTrimestre").Value = brutMsa
              .Update
         End With
    End If
    Je dois récupérer trois données afin des les additionner. Ce code marche lorsque les trois données sont identiques. Cependant lorsque au moins une des trois données est différentes alors la il y a un écart. Un écart important.
    Donc je viens vers vous car je ne vois pas du tout d'où peut venir le problème.

    De plus, je voulais savoir comment convertir un string en double. J'ai écrit ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    vBrutMSA = CDbl(Mid(vLigne, 88, 11))
         With rstSalaire
             .AddNew
              .Fields("idEmploye").Value = IDEmploye
             .Fields("dateSalaire").Value = Mid(vLigne, 52, 8)
             .Fields("brutMSA").Value = vBrutMSA
             .Update
             IDSalaire = .Fields("idSalaire").Value
    End With
    mais dans ma table, elle ne se transforme pas. Pour info, j'essaye de convertir ceci : +0000003456 --> + 34,56

    J'esepere avoir était assez claire.

    Cordialement.

  2. #2
    Membre émérite Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Par défaut
    Pour moi, tu mélanges allégrement les types de variable ......
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    brutMsa = Mid(vLigne, 89, 10) ' brutMSA est un string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    brutMsa = (Val(brutMsa)) + (Val(Mid(vLigne, 89, 10))) ' tu affectes un résultat numérique à un string
    Moi, je ferais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    dim brutMsa as String
    If Mid(vLigne, 39, 13) = "1680544109053" Then
         brutMsa = Mid(vLigne, 89, 10)
         RR& = (Val(brutMsa)) + (Val(Mid(vLigne, 89, 10)))
     
         With rstEmploye
              .Fields("brutDernierTrimestre").Value = RR&
              .Update
         End With
    End If

  3. #3
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Attention avec la fonction Val. Si le separateur decimal est une virgule, seule la partie entière est retournée.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2008
    Messages : 119
    Par défaut
    Il n'y as pas de séparateur.

    Le format est soit +0000000345928 ou -0000000124398. Ceci est un exemple. Il n'y a pas de point ou de virgule.

    Le résultat que j'obtiens est le suivant:
    J'obtiens par exemple (avec comme chaine en entrée +0000000345928):
    j'obtiens 345928,00 au lieu de 3459,28.

    Pour information, j'extraie les données d'un .txt

    cordialement

  5. #5
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Ben pour moi le résultat est parfaitement correct.
    La dificulté avec la programmation, c'est que les ordinateurs font ce qu'on leur dit de faire, pas forcément ce que l'on veut qu'ils fassent.
    Comment veux tu que l'ordi sache qu'il doit diviser ton resultat par 100 ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2008
    Messages : 119
    Par défaut
    Je reviens vers vous. Car je viens de tester le code de DAUDET78 et sa ne marche toujours pas.
    De plus, Le code oublie de passer par un enregistrement.

    Ma première addition fait:
    198700 + 198700 = 397400 (bon résultat)

    Mais ma deuxième addition fait:
    287400 + 287400 = 578400 (au lieu de 574800 Donc écart de 3600)

    J'ai essayé avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    dim brutMsa as String
    If Mid(vLigne, 39, 13) = "1680544109053" Then
         brutMsa = Mid(vLigne, 89, 10)
         brutMsa = (Val(brutMsa)) + (Val(Mid(vLigne, 89, 10)))
         RR& = (Val(brutMsa)) + (Val(Mid(vLigne, 89, 10)))
         With rstEmploye
              .Fields("brutDernierTrimestre").Value = RR&
              .Update
         End With
    End If
    Le programme prend bien en compte les trois enregistrements que je veux additionner. Mais il y a un écart (Même problème)

    Première ligne OK: cad
    198700 + 198700 + 198700 = 596100 (bon résultat)

    Deuxiéme ligne :
    287400 + 287400 + 289200 = 867600 (au lieu de 864000 écart de 3600)

    Avez-vous une idée?
    JE vous donne l'intégralité de mon code. Car il doit récupérer 3600 quelque part mais je ne vois pas du tout.

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    Sub importMSA2()
     
     ' déclaration des variables
    Dim rstEmploye As ADODB.Recordset
    Dim rstSalaire As ADODB.Recordset
    Dim rstCotisation As ADODB.Recordset
    Dim CType As ADODB.CursorTypeEnum
    Dim LType As ADODB.LockTypeEnum
    Dim CLocation As ADODB.CursorLocationEnum
    Dim Cnct As ADODB.Connection
     
    Dim brutMsa as String
     
    Dim IDEmploye As Integer
    Dim IDSalaire As Integer
    Dim nomFichierMSA As String
    Dim numFichier As Integer
     
    ' ouverture du fichier en entrée
    nomFichierMSA = tbMSA.Text
    numFichier = FreeFile                           'Génère un descripteur de fichier libre, Définit un numéro de fichier libre
    Open nomFichierMSA For Input As numFichier      'Ouvre le fichier (en mode lecture)
     
    CType = adOpenStatic
    LType = adLockOptimistic
    CLocation = adUseServer
     
     
    If Not EOF(numFichier) Then
        ' instanciation et ouverture de la connexion
        Set Cnct = New ADODB.Connection
        Cnct.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & tbBDD.Text & ";"
        Cnct.Open
        Line Input #numFichier, vLigne
     
        Set rstEmploye = New ADODB.Recordset
        With rstEmploye
            .CursorLocation = CLocation
            .CursorType = CType
            .LockType = LType
            Set .ActiveConnection = Cnct 'instance de ADODB.Connection
            .Open "SELECT * FROM Employes"
        End With
     
        Set rstSalaire = New ADODB.Recordset
        With rstSalaire
            .CursorLocation = CLocation
            .CursorType = CType
            .LockType = LType
            Set .ActiveConnection = Cnct ' instance de ADODB.Connection
            .Open "SELECT * FROM Salaires"
        End With
     
        Set rstCotisation = New ADODB.Recordset
        With rstCotisation
            .CursorLocation = CLocation
            .CursorType = CType
            .LockType = LType
            Set .ActiveConnection = Cnct
            .Open "SELECT * FROM Cotisations"
        End With
    End If
    While Not EOF(numFichier)
        Line Input #numFichier, vLigne              'Lit une ligne
        If Mid(vLigne, 60, 2) = "10" Then
            With rstEmploye
                .AddNew
                .Fields("numSS").Value = Mid(vLigne, 39, 13)
                .Fields("nom").Value = Mid(vLigne, 62, 25)
                .Update
                IDEmploye = .Fields("idEmploye").Value
            End With
        End If
        If Mid(vLigne, 60, 2) = "20" Then
            If Mid(vLigne, 39, 13) = "1680544109053" Then
                    brutMsa = Mid(vLigne, 89, 10)
                    brutMsa = (Val(brutMsa)) + (Val(Mid(vLigne, 89, 10)))
                    &&R = (Val(brutMsa)) + (Val(Mid(vLigne, 89, 10)))
                   MsgBox brutMsa
                With rstEmploye
                    .Fields("brutDernierTrimestre").Value = &&R
                    .Update
                End With
            End If
            vBrutMSA = CDbl(Mid(vLigne, 88, 11))
            With rstSalaire
                .AddNew
                .Fields("idEmploye").Value = IDEmploye
                .Fields("dateSalaire").Value = Mid(vLigne, 52, 8)
                .Fields("brutMSA").Value = vBrutMSA
                .Update
                IDSalaire = .Fields("idSalaire").Value
            End With
        End If
        If Mid(vLigne, 60, 2) = "30" Then
            vMontant = CDbl(Mid(vLigne, 87, 12))
            With rstCotisation
                .AddNew
                .Fields("idSalaire").Value = IDSalaire
                .Fields("typeCotisation").Value = Mid(vLigne, 62, 5)
                .Fields("montant").Value = vMontant
                .Update
            End With
        End If
        ProgressBar1.Min = 0
        ProgressBar1.Max = rstEmploye.RecordCount
        ProgressBar1.Value = 0
        ProgressBar1.Value = ProgressBar1.Value + 1
        lblPourcentage.Caption = Int((ProgressBar1.Max / ProgressBar1.Value * 100) / 100) & " %"
        lblPourcentage.Refresh
    Wend
    If Not (Cnct Is Nothing) Then
        rstEmploye.Close
        rstSalaire.Close
        rstCotisation.Close
        Cnct.Close
        Set rstEmploye = Nothing
        Set rstSalaire = Nothing
        Set rstCotisation = Nothing
        Set Cnct = Nothing 'Pour être sur que l'instance de la connexion est bien "libérée" (ce qui est différent de "fermée", la fermeture se faisant via le close)
    End If
    MsgBox "           L'importation MSA est términée"
    End Sub
    Cordialement

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

Discussions similaires

  1. [WD18] Additionner des variables
    Par gwendoline-bricout dans le forum WinDev
    Réponses: 2
    Dernier message: 21/06/2013, 09h52
  2. [RegEx] Additionner des "variables regex" + "variable php"
    Par Seb33300 dans le forum Langage
    Réponses: 6
    Dernier message: 10/12/2009, 10h25
  3. [Batch] additionner/ multiplier des variables
    Par vbcasimir dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 17/09/2009, 12h39
  4. Additionner des variables
    Par nebule dans le forum Struts 1
    Réponses: 1
    Dernier message: 18/01/2007, 16h48
  5. Réponses: 8
    Dernier message: 07/09/2006, 14h41

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