Déchiffrage d'un code VBA

melba

XLDnaute Occasionnel
Bonjour,

Pourriez-vous me "traduire" le code ci-dessous que vous m'aviez donné il y a déjà quelque temps déjà pour un de mes tableurs.

Je dois travailler à nouveau sur ce tableur et souhaiterais ré-utiliser ce code avec quelques adaptations.
Je n'ai pas conservé le décodage que vous m'aviez sans doute fourni à l'époque.
Je crois comprendre qu'il s'agit de l'écriture d'une formule qui s'appelle SALAIRE.
J'ai vu dans mon tableur que plusieurs formules font référence à cette formule "SALAIRE" :

exemples :
-SI((E14>$A12)+ESTERR(Salaire($E14:E21;E39))+ENT(ALEA());"";E14)
-SI((O14>$A12)+ESTERR(Salaire($E14:O21;O39));"";O14)
-SI(E46="";"";TRONQUE(Salaire($E14:E21;E39+E30);2)+ENT(ALEA()))
-SI(P46="";"";TRONQUE(Salaire($E14:p21;P39+P30);2))

Voici le code à déchiffrer :

Function Salaire!(P As Range, prime!)
Dim derlig&, i%, n As Byte, an%, w As Worksheet
derlig = P.Rows.Count
For i = P.Columns.Count - 1 To 1 Step -1
n = n + 1
Salaire = Salaire + P(derlig, i)
If n = 3 Then GoTo 1
Next
an = Year(P(1)) - 1 'année précédente
For Each w In Worksheets
If Year(w.Range(P(1).Address)) = an Then Exit For
Next
If w Is Nothing Then End
For i = n + 10 To 12 'complément d'octobre à décembre
Salaire = Salaire + w.Range(P(derlig, i).Address)
Next
1 Salaire = Salaire / 3 + prime
End Function

Votre aide me serait à nouveau précieuse;
Merci par avance pour votre réponse

A bientôt
 

melba

XLDnaute Occasionnel
Re : Déchiffrage d'un code VBA

Bonjour,

la honte est sur moi!

J'avoue que j'ai bien un peu cherché en ouvrant quelques unes des discussions que j'avais eues sur le forum mais n'avais pas retrouvé le sujet qui m'intéressait.
Je n'ai pas eu l'idée de faire une recherche sur Google et ne savais même pas que c'était possible... pas douée.
Je vais consulter de ce pas le fil d'origine.

Mille excuses
 

melba

XLDnaute Occasionnel
Re : Déchiffrage d'un code VBA

Bonsoir,

J'ai consulté l'historique de mes discussions sur le forum et ai donc trouvé trace de mes tentatives pour comprendre le code VBA en question.

Aujourd'hui je souhaite conserver les résultats figurant sur la ligne 47 du tableur à savoir :

SI(E46="";"";TRONQUE(Salaire($E14:E21;E39+E30);2)+ENT(ALEA())) etc....

mais j'ai besoin maintenant de détailler les calculs :

-En ligne 47 je dois avoir le même résultat qu'actuellement mais en faisant abstraction de ce qui figure en ligne 30 ou 39, soit une formule qui ressemblerait à :

SI(E46="";"";TRONQUE(Salaire($E14:E21);2)+ENT(ALEA()));

Or quand j'enlève E39 +E30 de la formule ci-dessus figurant en E47 et ainsi de suite sur toutes les cellules en ligne 47, le code ne fonctionne plus.

Cela a donc un rapport avec le code VBA mais là je suis incapable de le modifier toute seule.

Par ailleurs, subsiste depuis l'origine un problème de tronquage dans le code dont j'avais déjà parlé le 13/12/2013 dans le fil 29 , mais pour le moment ce n'est pas le problème majeur quoique cela ait une importance dans les résultats que je dois obtenir.

Pour résumer je souhaiterais :

- garder les mêmes formules en ligne 47 mais en faisant abstraction du contenu des cellules de la ligne 30 et 39

- en ligne 48 avoir le report des cellules de la ligne 30

- en ligne 49 avoir le report des cellules de la ligne 39

-pour finir en ligne 50 je dois avoir ce qui figure actuellement en ligne 47

Ainsi j'aurai tous les détails.

J'ai donc absolument besoin de votre aide pour modifier le code VBA car là je suis impuissante.

L'exemple que j'ai mis sur le fichier en pièce jointe sera peut-être plus clair.

J'espère que vous ne resterez pas sourds à mon appel.

A bientôt
 

Pièces jointes

  • Test 2015 salaires .xlsm
    72.9 KB · Affichages: 39
Dernière édition:

job75

XLDnaute Barbatruc
Re : Déchiffrage d'un code VBA

Bonsoir melba,

Par ailleurs, subsiste depuis l'origine un problème de tronquage dans le code dont j'avais déjà parlé le 13/12/2013 dans le fil 29 , mais pour le moment ce n'est pas le problème majeur quoique cela ait une importance dans les résultats que je dois obtenir.

Au post #31 du fil mis en lien par Patrick, je vous avais dit de remplacer ;

Function Salaire!(P As Range, prime!)

par :

Function Salaire#(P As Range, prime#)

Aujourd'hui je n'irai pas plus loin car trop compliqué.

A+
 

job75

XLDnaute Barbatruc
Re : Déchiffrage d'un code VBA

Bonjour melba,

Tout le monde aura remarqué que le VBA est protégé dans votre fichier :rolleyes:

Si vous voulez vous passer du 2ème argument de la fonction Salaire, rendez-le facultatif :

Code:
Function Salaire#(P As Range, Optional prime# = 0)
A+
 

job75

XLDnaute Barbatruc
Re : Déchiffrage d'un code VBA

Re,

Au diable votre protection VBA (qui en plus ne sert vraiment à rien).

Voyez si le fichier joint correspond à ce que vous souhaitez.

Edit : remarquez qu'en feuille "3" il n'y a rien à partir de novembre vu les années en ligne 14...

A+
 

Pièces jointes

  • Test 2015 salaires(1).xlsm
    81 KB · Affichages: 33
Dernière édition:

melba

XLDnaute Occasionnel
Re : Déchiffrage d'un code VBA

Bonsoir,

Je ne reviens que ce soir sur le forum et vois vos remarques sur ma protection;
Veuillez m'excuser ,j'avais complètement oublié que je l'avais mise.
Je vais l'enlever et regarder le fichier du fil 7.

Je vous tiens au courant.

Merci pour vos réponses
 

melba

XLDnaute Occasionnel
Re : Déchiffrage d'un code VBA

Bonsoir,

Hier je n'avais pas compris le message de Job75 au fil 5 quand il disait de remplacer :
Function Salaire!(P As Range, prime!)
par :
Function Salaire#(P As Range, prime#)

Il me l'avait déjà dit en 2013!
Je crois que lorsqu'il s'agit d'un code VBA mon cerveau doit se fermer complètement.
Aujourd'hui je vois le" prime#" au lieu du "prime!" qui visiblement règle mon problème de tronquage .
Que ne l'avais-je vu plus tôt!
C'est merveilleux, on dirait que mon problème est réglé.
Par ailleurs le fichier du fil 7 semble correspondre parfaitement à ce que je recherchais.
Je vous confirme cela dans un prochain message.
Pour ma gouverne, pouvez-vous m'expliquer pourquoi cela ne fonctionnait pas quand j'enlevai "+E39 +E30" de la formule?
Cela viendrait du : "Optional prime# = 0"?
Je ne le dirai jamais assez : vous êtes formidables.

Encore un très grand merci
 

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 396
Membres
103 537
dernier inscrit
alisafred974