Microsoft 365 VBA excel calcul pourcentage sur colonnes

Piment

XLDnaute Occasionnel
Bonjour le Forum, Job75,
Avant tout, merci à tous ceux qui m'ont aidé sur ce Forum.
J'ai découvert VBA il y a quelques mois, et je suis très loin de maitriser, mais j'ai beaucoup appris grâce à vous.
Je fais de nouveau appel à vous afin de me permettre de finaliser mon projet.
J'aimerais faire le calcul des pourcentages du "Consommé" par agent (R8) et du "Reste à consommer" ( S8), puis le calcul du pourcentage de la "Cellule" R7 et S7, puis R6 et S6 et enfin R5 et S5.
Pour Job75, dans votre dernier message vous m'avez dit qu'il n'était pas judicieux de déplacer la borne 14 à la borne 17 de la boucle: pourquoi? il y aurait un potentiel beug à venir?
J'ai étendu la boucle jusqu'à 17 (Q) car les modes de calculs sont les mêmes que ceux appliqués aux colonnes 3 à 14 pour les "Cellule", "Service" et "Direction".
La colonne "O7" fait le total des conso des agents dans la cellule, "O6" fait le total des totaux des cellules dans le Service, et "O5" lui il fait le total des Services dans la Direction, et "O4" fait la somme de C3 à C14.
Les colonnes "P" et "Q" font les mêmes calculs: "P7" fait le total des Droits alloués aux agents dans la cellule, "P6" fait la somme des totaux des cellules.... "Q7 fait le total du consommé par agent, "Q6" pour le service....
Le montant des "Droits Ouverts" est saisi par le biais de l'USF "Nouveau Contact", donc dès le départ, lorsque l'on intègre l'agent dans la flotte.
Voila pourquoi j'ai étendu la boucle à 17. Mon raisonnement est-il bon?
Merci de m'éclairer.
Les calculs de pourcentage doivent se faire sur ces 2 cellules ( "P" et "Q") sur les lignes Cellule, Service et Direction.
Merci pour votre aide.
 

Pièces jointes

  • 2022 Contrôle Fact Calcul par Texte (2) - Copie.xlsm
    447.2 KB · Affichages: 4
Solution
Bonsoir Piment,

Il est bien plus simple de traiter les colonnes Q R S en fin de macro Worksheet_Change :
VB:
'---colonnes Q R S---
Range("Q5:Q" & nlig) = "=IFERROR(1/(1/RC[-2]),"""")" 'élimine les valeurs zéro
Range("R5:R" & nlig) = "=IFERROR(RC[-1]/RC[-2],"""")"
Range("S5:S" & nlig) = "=IFERROR(1-RC[-1],"""")"
Du coup les boucles j vont maintenant de 3 à 16, il est inutile de traiter la colonne Q avant.

Edit : ajouté les Application.Calculation = xlCalculationManual/xlCalculationAutomatic

pour éviter les recalculs des formules.

Chez moi la macro Worksheet_Change s'exécute en 4 centièmes de seconde.

Bonne nuit

Piment

XLDnaute Occasionnel
Job75 merci continuer à me suivre. J'ai eu un souci en voulant ouvrir le fichier joint: Excel-Downloads me dit que je ne suis pas autoriser ouvrir et tout à disparu, votre post y compris.
Auriez vous l'obligeance de me retourner votre Post. Merci.
 

job75

XLDnaute Barbatruc
Bonjour Piment,

Je n'avais pas compris que les colonnes P Q R S étaient renseignées via un UserForm.

Vous avez donc très bien fait de faire les boucles j de 3 à 17 pour inclure les colonnes O P Q.

Dans le fichier joint j'ai juste un peu modifié ce qui concerne le tableau TOTAL.

Quant aux formules en colonnes R et S demandez à celui qui a écrit le code de l'UserForm de les modifier.

Car il est quand même plus propre d'entrer par exemple :

- en R8 =Q8/P8

- en S8 =1-R8

A+
 

Pièces jointes

  • 2022 Contrôle Fact Calcul par Texte(2).xlsm
    475.4 KB · Affichages: 6

Piment

XLDnaute Occasionnel
C'est bon j'ai bien reçu votre post. Je vous réponds avant d'ouvrir le fichier.
Les colonnes R et S ne sont pas remplies par l'USF:
Les formules en R et S ont été bidouillées par moi-même, et sont dans les codes du bouton "Valider" dans l'USF "Nouveau Numéro". Lors de la validation il va chercher le montant entré dans la colonne "Droits Ouverts Annuels" et effectue l'opération et cela dans "Cellule, "Service" et "Direction".
J'aurais aimé que ces calculs se fasse aussi sur la feuille comme pour les autres, et c'est ce que je tente de faire en m'appuyant sur vos codes. Je cherche donc à transposer ces formules dans la feuille "VentilationCouts" sur la base de ce que vous avez faits, à la suite de vos codes. Mais très compliqué pour moi.
Je récupère votre fichier et je vous fait un retour.
Merci encore
 

job75

XLDnaute Barbatruc
Je n'ai pas épluché votre macro AjouterNuméro() mais elle me paraît bien trop compliquée.

Il faudra sûrement la revoir et en outre :

- utiliser les Application.EnableEvents = False/True pour neutraliser la macro Worksheet_Change

- après avoir entré la valeur en colonne P, entrer les formules en colonnes Q R S, comme ceci :
VB:
        Cells(indexNouvelleLigne, "P").Value = CDbl(DroitsOuverts)
        Cells(indexNouvelleLigne, "Q").Formula = "=SUM(C" & indexNouvelleLigne & ":N" & indexNouvelleLigne & ")"
        Cells(indexNouvelleLigne, "R").FormulaR1C1 = "=RC[-1]/RC[-2]"
        Cells(indexNouvelleLigne, "S").FormulaR1C1 = "=1-RC[-1]"
 

job75

XLDnaute Barbatruc
Bonsoir Piment,

Il est bien plus simple de traiter les colonnes Q R S en fin de macro Worksheet_Change :
VB:
'---colonnes Q R S---
Range("Q5:Q" & nlig) = "=IFERROR(1/(1/RC[-2]),"""")" 'élimine les valeurs zéro
Range("R5:R" & nlig) = "=IFERROR(RC[-1]/RC[-2],"""")"
Range("S5:S" & nlig) = "=IFERROR(1-RC[-1],"""")"
Du coup les boucles j vont maintenant de 3 à 16, il est inutile de traiter la colonne Q avant.

Edit : ajouté les Application.Calculation = xlCalculationManual/xlCalculationAutomatic

pour éviter les recalculs des formules.

Chez moi la macro Worksheet_Change s'exécute en 4 centièmes de seconde.

Bonne nuit
 

Pièces jointes

  • 2022 Contrôle Fact Calcul par Texte(3).xlsm
    477.6 KB · Affichages: 5
Dernière édition:

Piment

XLDnaute Occasionnel
Bonjour Job75,
Merci beaucoup pour l'attention que vous portez mon projet. C'est exactement ce que je souhaitais. Du coup, tous les calculs se font sur la feuille, et cela me permet d'alléger les codes du bouton "Valider" de l'USF "Nouveau Numéro".
Très bon régime d'amaigrissement!
Par contre je ne comprends pas le code pour la colonne Q. La colonne Q doit faire la somme des cellules C:N, or si j'ai bien compris votre code la formule de calcul de Q est une Division.
J'ai effectué un test en supprimant la ligne de code : Range("Q5:Q" & nlig) = "=IFERROR(1/(1/RC[-2]),"""")" 'élimine les valeurs zéro, et pourtant tous les calculs se font normalement. D'où mon interrogation.
L'exécution de Worksheet_Change est effectivement très rapide, et c'est géniale.
Dans l'attente d'un retour, Merci encore et bonne journée à vous.
 

Piment

XLDnaute Occasionnel
Bonjour Job75,
Effectivement je n'avais rien compris! Je ne connaissais pas cette formule. Il est vrai que j'aurais dû chercher mais dès que j'ai vu le signe / j'ai déduit hâtivement que c'était une division.
Autant pour moi.
Merci encore pour votre aide précieuse.
Je vais continuer à faire évoluer mon fichier, puisque mon but est de limiter au maximum les interventions directes de l'utilisateur. On rentre les données et tout est traité derrière.
Je marque votre réponse comme résolue.
Très bonne journée à vous.
 

Membres actuellement en ligne

Statistiques des forums

Discussions
314 486
Messages
2 110 107
Membres
110 666
dernier inscrit
Yaya123