XL 2016 Erreur d'exécution 13 Incompatibilité de type

Aldonanou

XLDnaute Junior
Bonjour,

Dans le cadre du traitement de données j’avais réalisé un programme me permettant de récupérer une encaisse si le code réponse était égal à 0.

Or il s’avère que le fournisseur a modifié son fichier et j’ai maintenant une erreur d’exécution ‘13’ Incompatibilité de type car dans ma fonction j'ai précisé que ma donnée devait être égale à 0 pour être vrai (j'ai d'autres codes réponses dans le fichier 51;97 ...) et normalement cette donnée ne devrait jamais être à blanc.

Si une personne pouvez m’aider ....

VB:
'   si la chaine contient 1ère ligne on initialise "Nom court"
        ccession = getDot(chaine)
        cessionCur = ccession
        DTransaction = dateTransaction(chaine)
        HTransaction = heureTransaction(chaine)
        montant1 = getMontant(chaine) 'montant de l'opération
        CodeReponse = getcodeReponse(chaine)
        encaisse = getEncaisse(chaine) 'tempArray(12)
        cTraitement = codeTraitement(chaine)

    Else
        DTransaction = dateTransaction(chaine)
        HTransaction = heureTransaction(chaine)
        montant1 = getMontant(chaine)
        CodeReponse = getcodeReponse(chaine)
        cTraitement = codeTraitement(chaine)
    End If

Function getcodeReponse(ByVal chaine As String) As Boolean
    Dim tempArray() As String
    Dim taille As Integer
    tempArray = Split(chaine, ";")
    taille = UBound(tempArray)
    If (CInt(tempArray(7)) = 0) Then
        getcodeReponse = True
    Else
        getcodeReponse = False
    End If
End Function

Vous en remerciant

Cordialement
 

Pièces jointes

  • Essai.xlsx
    20.6 KB · Affichages: 5

Aldonanou

XLDnaute Junior
Re,

Je ne peux pas utiliser cette possibilité (je pense) car sinon je ne peux plus appliquer les conditions ci-dessous :

Mon code réponse doit être à zéro et mon code Traitement doit être différent de vide et de traitement pour que je puisse récupérer la valeur de l'encaisse. Le code réponse est identique pour un retrait ou un traitement, mais seule la ligne correspondante au retrait dispose d'une encaisse.

VB:
        If ((CodeReponse = True) And (StrComp(cTraitement, "TRAITEMENT") <> 0)) Then
            montantGlobal = montantGlobal + montant1
        End If

j'ai dû mail m'y prendre dans la rédaction de mon projet, mais le cahier des charges a changé 3 fois !

Merci
 

Dranreb

XLDnaute Barbatruc
Non, ça c'est après il ne semble. Votre CodeRéponse est obtenu par une Function retournant un Boolean.
Il ne peut donc pas être à 0, il est True ou False. Inutile d'ajouter = True derrière un Boolean car la nouvelle expression Boolean ainsi inutilement formée est forcément toujours du même état qu'elle.
Comme vous l'expliquez c'est :
VB:
        If CodeReponse And cTraitement <> "" Then
            montantGlobal = montantGlobal + montant1
        End If
 

Aldonanou

XLDnaute Junior
Re,

j'ai corrigé mon programme en mettant :

VB:
Function getcodeReponse(ByVal chaine As String) As Boolean
    Dim tempArray() As String
    Dim taille As Integer
    tempArray = Split(chaine, ";")

    taille = UBound(tempArray)
    
    If IsEmpty(tempArray(7)) Then
    GoTo suite
    End If
    
    If (tempArray(7) = "00") Then
        getcodeReponse = True
    Else
        getcodeReponse = False
    End If
    
suite:
    
End Function

et du coup cela fonctionne comme je le souhaite. Merci pour votre aide.

Cordialement
 

Discussions similaires

Réponses
1
Affichages
282

Statistiques des forums

Discussions
315 096
Messages
2 116 175
Membres
112 677
dernier inscrit
Justine11