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 :

VBA question de calcul


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut VBA question de calcul
    Bonjour à tous,

    J'ai une question concernant la réalisation d'une fiche de paie.
    Je dois appliquer un taux situé dans une feuille appelée "TAXE" qui diffère en fonction de la qualité du salarié, à savoir s'il est cadre ou non ainsi que de ses revenus.
    La qualité du salarié est dans la feuille "PERSONNEL".
    J'ai essayé de réaliser la macro, cependant elle ne marche pas, pourriez vous m'aider ?

    En vous remerciant d'avance.

    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
    'RETRAITE
    'calcul retraite complementaire - salarie non cadre
    If Sheets("PERSONNEL").Cells(2, 12) <> "oui" And Cells(21, 3).Value <= "6618" Then
    Cells(33, 3).Value = Cells(21, 3).Value
    Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(16, 4)
    Cells(33, 5).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(16, 3)
    Else
    Cells(33, 3).Value = "6618"
    Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(16, 4)
    Cells(33, 5).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(16, 3)
    End If
    'calcul retraite complementaire - TRANCHE A
    If Sheets("PERSONNEL").Cells(num_ligne, 12) = "oui" And Cells(21, 3).Value <= "2206" Then
    Cells(33, 3).Value = Cells(21, 3).Value
    Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(18, 4)
    Cells(33, 5).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(18, 3)
    Else
    Cells(33, 3).Value = "2206"
    Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(18, 4)
    Cells(33, 5).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(18, 3)
    End If
    'calcul retraite complementaire - TRANCHE B
    If Sheets("PERSONNEL").Cells(num_ligne, 12) = "oui" And Cells(21, 3).Value > "2206" And Cells(21, 3).Value <= "8824" Then
    Cells(33, 3).Value = Cells(21, 3).Value
    Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(20, 4)
    Cells(33, 5).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(20, 3)
    Else
    Cells(33, 3).Value = "0"
    Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(20, 4)
    Cells(33, 5).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(20, 3)
    End If
     
     
    'calcul retraite complementaire - TRANCHE C
    If Sheets("PERSONNEL").Cells(num_ligne, 12) = "oui" And (Cells(21, 3).Value >= 8824 And Cells(21, 3).Value <= 17648) Then
    Cells(33, 3).Value = Cells(21, 3).Value
    Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(22, 4)
    Cells(33, 5).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(22, 3)
    Else
    Cells(33, 3).Value = "0"
    Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(22, 4)
    Cells(33, 5).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(22, 3)
    End If

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,

    sans aller plus loin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ....Cells(21, 3).Value <= "6618" Then...
    ne serait pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(21, 3).Value <= 6618 Then
    et ainsi de suite
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut
    Malheureusement non...

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Pourtant il s'agit de montants (plafonds) j'imagine ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut
    Tout à fait, mais cette formule ne m'affiche pas d'erreur, elle ne fonctionne juste pas :s

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,

    si ta suite d'if/else agit sur la même zone il semble que ton organisation est mauvaise... seule ton dernier if/else et pris en compte.. puisque ton dernier "else" couvre tout est autres conditions...

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Mais elle ne t'affichera pas d'erreur, c'est sur, elle considère tes chiffres comme du texte donc ça ne fonctionne pas, mais as-tu essayé au moins d'enlever tous les "" ?

    Excuses-moi Bbil, pas vu ta réponse, mais je pense que j'ai raison, plus ce que tu constates

    Bonne soirée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par casefayere Voir le message
    Excuses-moi Bbil, pas vu ta réponse, mais je pense que j'ai raison, plus ce que tu constates

    Bonne soirée


    en simplifiant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    IF  A = 1 THEN
         B= 1
    ELSE 
         B=  2
    ENDIF 
     
    IF A = 3 THEN
       B=  3
      ELSE
       B =  4
    ENDIF
     
     AFFICHE B
    quelque soit la valeur de A Afficheras toujours 3 ou 4

    A = 3 B= 3
    A = 4 B= 4
    A = 1 B= 4
    A = 2 B= 4
    A différent 3 B= 4

  9. #9
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonsoir lenoble09, casefeyre, le forum
    difficille de répondre sans savoir à quoi correspondent les cellules.

    LEs guillements pour des nombres.

    J'ajouterais le "oui" est-il bien en minuscule dans les feuilles...

    La valeur de num_ligne est-elle bien définie ? num_ligne peut-il valoir 2 ?

    1) Le test < 6618 avec les deux solutions oui/ non
    2) le test < 2206 avec les deux solutions oui/non

    Le programme peut faire le test 1 puis le test2 si num_ligne=2

    A méditer.


    ESVBA

  10. #10
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Sans aller plus loin non plus et j'avoue que je ne sais pas ce que représente 6618
    . Un code ou une valeur ?
    Mais dans une partie de ton code, je vois déjà des lignes inutiles.
    Dans ta condition If Sheets("PERSONNEL").Cells(2, 12) <> "oui" And Cells(21, 3).Value <= "6618" ou <=6618
    Je lis que la seule chose différente est que si la condition est vrai Cells(33, 3).Value = Cells(21, 3).Value et si elle est fausse Cells(33, 3).Value = "6618" ou =6618
    Donc, la partie de code ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'RETRAITE
    'calcul retraite complementaire - salarie non cadre
    If Sheets("PERSONNEL").Cells(2, 12) <> "oui" And Cells(21, 3).Value <= "6618" Then
     Cells(33, 3).Value = Cells(21, 3).Value
     Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(16, 4)
     Cells(33, 5).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(16, 3)
    Else
     Cells(33, 3).Value = "6618"
     Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(16, 4)
     Cells(33, 5).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(16, 3)
    End If
    Pourrait être réduite à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'RETRAITE
    'calcul retraite complementaire - salarie non cadre
    If Sheets("PERSONNEL").Cells(2, 12) <> "oui" And Cells(21, 3).Value <= "6618" Then
     Cells(33, 3).Value = Cells(21, 3).Value
    Else
     Cells(33, 3).Value = "6618"
    End If
    Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(16, 4)
    Cells(33, 5).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(16, 3)
    Tu peux aussi enlever les .Value cela ne change rien, Value étant la propriété par défaut de l'objet Cells
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(33, 7).Value = Cells(33, 3).Value * Sheets("TAXES").Cells(16, 4)
    Et
    Cells(33, 7) = Cells(33, 3) * Sheets("TAXES").Cells(16, 4)C'est du pareil au même.
    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

  11. #11
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonsoir à tous,
    Désolé si ma réponse tombe mal mais entre le moment où j'ai commencé à répondre, il n'y avait qu'une seule réponse, et après l'envoi un nombre plus important est apparu.
    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

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Par défaut
    Merci à tous pour vos réponses,

    Celle qui se rapproche le plus de mon problème est la réponse de Bbil.

    En effet, il faudrait que j'arrive à concentrer les formules de mes retraites TRANCHE A, B et C, dans une seule formule IF afin que ne soit pas pris en compte, uniquement la dernière formule TRANCHE C.

    Comment puis je faire ?

    En vous remerciant pour vos conseils très pros !

  13. #13
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En effet, il faudrait que j'arrive à concentrer les formules de mes retraites TRANCHE A, B et C, dans une seule formule IF afin que ne soit pas pris en compte, uniquement la dernière formule TRANCHE C.
    Le plus simple serait que tu expliques la manière de calculer les retraites.
    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

  14. #14
    Membre chevronné
    Avatar de bifconsult
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 189
    Par défaut
    Bonjour,

    J'espère ne pas être hors sujet, mais pour imbriquer plusieurs IF (donc coller à la remarque de bbil):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If [condition1] then
    formules
    Elseif [condition2] then
    formules
    elseif [condition3] then
    formules
    ...
    End if

  15. #15
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Je trouve qu'il y a des incohérences dans les comparaisons mais bon voilà ce que j'en ai plus ou moins déduit :
    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
     
    Sub Retraite()
     
        Dim I As Integer 'évite la répétition des lignes
     
        Cells(33, 3).Value = 0 '<-- pourquoi ???
     
        'si c'est un salarié non cadre
        If Sheets("PERSONNEL").Cells(2, 12) <> "oui" Then
     
            I = 16
     
            Select Case Cells(21, 3)
     
                Case Is <= 6618
     
                    Cells(33, 3) = Cells(21, 3)
     
                Case Else
     
                    Cells(33, 3) = 6618 '<-- pourquoi ???
     
            End Select
     
        'si c'est un salarié cadre
        '(elsif permet de contrôler que "oui" est bien entrée dans la cellule)
        ElseIf Sheets("PERSONNEL").Cells(num_ligne, 12) = "oui" Then
     
            Select Case Cells(21, 3)
     
                Case Is <= 2206 'calcul retraite complementaire - TRANCHE A
                    I = 18
     
                Case Is <= 8824 'calcul retraite complementaire - TRANCHE B
                    I = 20
     
                Case Is <= 17648 'calcul retraite complementaire - TRANCHE C
                    I = 22
     
                Case Else
                    'Ici, dans le cas ou le salaire est supérieur à 17648...
     
            End Select
     
            Cells(33, 3) = Cells(21, 3)
     
        End If
     
        Cells(33, 7) = Cells(33, 3) * Sheets("TAXES").Cells(I, 4)
        Cells(33, 5) = Cells(33, 3) * Sheets("TAXES").Cells(I, 3)
     
    End Sub
    Hervé.

  16. #16
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu devrais pouvoir traduire le code avec ce logigramme :
    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
     
    Si CADRE alors
              Si R >= "17648" alors  (non défini dans ta procédure) ’ TRANCHE D ?
                       ActionA1
              Sinon, si R >="8824" alors	 ’ TRANCHE C
                       ActionA2
              Sinon, si R >= "2206" alors	’ TRANCHE B
                       ActionA3
              Sinon (cas où R < "2206") alors	’ TRANCHE A
                       ActionA4
              Fin si
    Sinon (NON CADRE) alors 
              Si R <= "6618" alors
                       ActionA5
    	  Sinon 
                       ActionA6
    	  Fin si
    Fin si
    Cordialement.

Discussions similaires

  1. [VBA-E]Ligne calculée en fin de tableau dynamique
    Par AliochaBada dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 07/10/2006, 22h23
  2. [Excel][VBA] Questions sur la hiérarchie des objets
    Par cladsam dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/08/2006, 14h59
  3. [VBA] question sur le Db.execute
    Par dyree dans le forum Access
    Réponses: 1
    Dernier message: 14/08/2006, 13h34
  4. Réponses: 10
    Dernier message: 10/08/2006, 15h44
  5. Réponses: 10
    Dernier message: 13/06/2006, 17h59

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