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 :

Problème macro vérification TVA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Par défaut Problème macro vérification TVA
    Bonjour à tous,

    J'ai une macro qui utilise deux fichiers. Chaque fichier comporte 3 onglets. Son but est de détecter si le calcul de la TVA est bien effectué. Si oui, elle passe à la ligne suivante. Si non, elle met le chiffre en gras et en rouge et va repéré dans l'autre fichier le même chiffre et fait la même manip (gras et rouge).
    La macro s'éxécute parfaitement.
    CEPENDANT, de nombreuses lignes sont mises en gras et rouge, alors que le calcul est juste. Quelqu'un peut-il m'expliquer à quoi cela est dû? Peut-être au type de variable. Mes variables sont initialisées en Variant, or le contenu des cellules excel est en Variant/Double si je ne me trompe pas.

    Voici mon code:

    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
    'Identification des écarts de TVA pour IE
     
    Sheets("Analyse Erreurs").Activate
    For m = 6 To ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
     
    net = ActiveSheet.Range("B" & m).Value
    tva = 1.196
    brut = net * tva
     
    ActiveSheet.Range("D" & m).Select
    If ActiveCell.Value = brut Then
    error4 = False
     
    ElseIf ActiveCell.Value <> brut Then
     
    Select Case brut
    Case IsError(brut)
    error4 = True
    Case Else
    ActiveSheet.Range("D" & m).Select
    Selection.Font.Bold = True
        With Selection.Font
            .Color = -16776961
            .TintAndShade = 0
        End With
        Application.CutCopyMode = False
    Windows("221012_Export_PCCD_E2SDiesel_MY13_C05.xls").Activate
    Sheets("IndividualEquipmentsC05").Activate
    ActiveSheet.Range("N" & m).Select
     Selection.Font.Bold = True
     With Selection.Font
            .Color = -16776961
            .TintAndShade = 0
        End With
    Windows("Automatic_prix.xls").Activate
    Sheets("Analyse Erreurs").Activate
    End Select
    End If
    Next m
     
    'Identification des écarts de TVA pour EE
     
    For m = 6 To Range("G" & Rows.Count).End(xlUp).Row
    Range("J" & m).Select
     
    net = Range("H" & m).Value
    tva = 1.196
    brut = net * tva
     
    If ActiveCell.Value = brut Then
    error4 = False
     
    ElseIf ActiveCell.Value <> brut Then
     
    Select Case brut
    Case IsError(brut)
    error4 = True
    Case Else
    ActiveSheet.Range("J" & m).Select
    Selection.Font.Bold = True
        With Selection.Font
            .Color = -16776961
            .TintAndShade = 0
        End With
        Application.CutCopyMode = False
    Windows("221012_Export_PCCD_E2SDiesel_MY13_C05.xls").Activate
    Sheets("ExclusiveEquipmentsC05").Activate
    Range("N" & m).Select
     Selection.Font.Bold = True
     With Selection.Font
            .Color = -16776961
            .TintAndShade = 0
        End With
    Windows("Automatic_prix.xls").Activate
    Sheets("Analyse Erreurs").Activate
    End Select
    End If
    Next m
     
    'Identification des écarts de TVA pour ZE
     
    Sheets("Analyse Erreurs").Activate
    For m = 6 To Range("M" & Rows.Count).End(xlUp).Row
    Range("P" & m).Select
     
    net = Range("N" & m).Value
    tva = 1.196
    brut = net * tva
     
    If ActiveCell.Value = brut Then
    error4 = False
     
    ElseIf ActiveCell.Value <> brut Then
     
    Select Case brut
    Case IsError(brut)
    error4 = True
    Case Else
    ActiveSheet.Range("P" & m).Select
    Selection.Font.Bold = True
        With Selection.Font
            .Color = -16776961
            .TintAndShade = 0
        End With
        Application.CutCopyMode = False
    Windows("221012_Export_PCCD_E2SDiesel_MY13_C05.xls").Activate
    Sheets("ZAntragEquipmentsC05").Activate
    Range("N" & m).Select
     Selection.Font.Bold = True
     With Selection.Font
            .Color = -16776961
            .TintAndShade = 0
        End With
    Windows("Automatic_prix.xls").Activate
    Sheets("Analyse Erreurs").Activate
    End Select
    End If
    Next m

    IE, EE et ZE sont 3 onglets de l'un des deux fichiers.

    Quelqu'un connaitrait-il la raison de ce dysfonctionnement?

    Merci beaucoup d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 38
    Par défaut
    Bonjour,

    j'ai pas regardé trop en profondeur mais quelques pistes :

    Tu n'arrondis pas le résultat ? je pense que c'est mieux d'arrondir (au centimme par exemple) c'est vital même pour faire une comparaison avec des doubles car si c'est une erreur de moins d'un centime tu ne la verra pas sous excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Round(ActiveCell.Value, 2) = Round(brut, 2) Then
    Si tu arrondis, vérifie bien que c'est la même méthode que comment tu as obtenu la valeur dans la cellule excel (au cas ou il y aurait déjà un arrondis de fait), entre arrondir au plus près, au supérieur ou à l'inférieur. (et donc choisir entre round, roundDown, roundUp)

    Sinon je suis pas fan des variants.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Par défaut
    Mes valeurs étaient arrondies au centième déjà justement, donc la formule n'a rien changé. Et j'ai aussi essayé de passer mes variables en Double au lieu de Variant, cela ne change rien.

    Merci quand même.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 38
    Par défaut
    Non, je parle des deux partie de la comparaison.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    brut = net * tva
     
    ActiveSheet.Range("D" & m).Select
    If ActiveCell.Value = brut Then
    ici la variable brut n'est pas du tout arrondie au centième.

    Par contre ce type d'erreur peut expliquer que des cellule soient testées fausse alors qu'elle sont vrais, mais très très rarement l'inverse. Faut trouver autre chose.
    Pourrait tu donner un exemple de quand la macro se plante ? avec le contenu de la cellule, et ce que la macro trouve. Il faudrait localiser l'erreur plus précisément.

    En attendant, admettons que les calculs et la comparaison soient corrects, faut alors regarder plutôt du coté gestion des résultats de la macro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                Select Case brut
                Case IsError(brut)
    Ce truc me taraude.. "brut" est un numérique, et "IsError" renvoie un booléen. Ce case ne marchera jamais. Il se peut qu'en cas d'erreur sur le calcul de brut, alors un résultat vrai peut être considéré comme faux (ce que nous cherchons justement).

    net = ActiveSheet.Range("B" & m).Value
    tva = 1.196
    brut = net * tva
    très clairement ici, le seul truc qui peut cafouiller c'est la valeur de la cellule récupéré.

    Au fait il est bizarre ce code, y a des bout en dehors des "with" et qui devraient être à l'intérieur. Je te met le code avec des modifications (case -> if, me parait plus adapté), regarde si ça change quelque chose, j'ai rajouté un msgbox pour tester les valeur.

    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
        Sheets("Analyse Erreurs").Activate
     
        For m = 6 To ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
     
            net = ActiveSheet.Range("B" & m).Value
            tva = 1.196
            brut = net * tva
     
            ActiveSheet.Range("D" & m).Select
     
            MsgBox "net = " & net & ", brut = " & brut & " et cellule = " & ActiveCell.Value
     
            If Round(ActiveCell.Value, 2) = Round(brut, 2) Then
                error4 = False
            Else
                If IsError(brut) Then
                    error4 = True
                Else
                    ActiveSheet.Range("D" & m).Select
     
                    With Selection.Font
                        .Bold = True
                        .Color = -16776961
                        .TintAndShade = 0
                    End With
     
                    Application.CutCopyMode = False
                    Windows("221012_Export_PCCD_E2SDiesel_MY13_C05.xls").Activate
                    Sheets("IndividualEquipmentsC05").Activate
                    ActiveSheet.Range("N" & m).Select
     
                    With Selection.Font
                        .Bold = True
                        .Color = -16776961
                        .TintAndShade = 0
                    End With
     
                    Windows("Automatic_prix.xls").Activate
                    Sheets("Analyse Erreurs").Activate
                End If
            End If
        Next m

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je te conseille la lecture de ce tutoriel Formation VBA pour débutant. Tout ton code est à revoir.
    Regarde entre autre la page 44 sur la structure Select Case parce-que le test que tu fais est complètement farfelu.
    [EDIT]
    Désolé pour ma mauvaise analyse du Select Case, j'ai du mal lire du fait que le code n'est pas indenté.
    Il faut dire que je ne laisse jamais de cellules avec un code erreur, je le gère par des fonctions d'excel.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Par défaut
    Merci KekeStreet ! Effectivement ça marche très bien maintenant, et je comprends la logique de l'arrondi dont tu parlais.
    Pour revenir au code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select Case brut
    Case IsError(brut)
    J'ai en fait dans mon fichier source dans cellules vides ou avec erreurs et donc le calcul, qui les utilise, renvoi parfois des erreurs et c'est pour cela que je l'ai structuré ainsi. As-tu une meilleure proposition pour résoudre ce cas particuliers des erreurs?

    De plus l'idée de la msgbox était bonne. J'ai essayé de vérifié les valeurs prises par net et brut en mode débug hier mais j'ai bcp de valeurs...

    Et Corona en effet, je suis débutant, j'apprends encore pas mal de chose.

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

Discussions similaires

  1. Problème Macro Excel - vérification liste de mails via mailtester.com
    Par beenosse dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/02/2019, 16h51
  2. problème macro 'vérification'
    Par rider18 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 23/11/2009, 14h08
  3. problème de vérification formulaire (non bloquante)
    Par Florent08800 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/05/2006, 12h02
  4. [VBA-E] Problème macro excel
    Par pontus21 dans le forum Macros et VBA Excel
    Réponses: 32
    Dernier message: 19/05/2006, 18h38
  5. problème de vérification formulaire
    Par Le Rebel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/03/2006, 13h10

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