XL 2016 UTILISATION SOMME SI ENS par code VBA EXCEL

Panda Tsoa

XLDnaute Junior
Bonjour à tous,
J’ai un petit problème sur VBA. Un fichier en attaché contient les détails des problèmes et la solution attendue car je suis nul en VBA.
Merci pour ceux qui peut consacrer leur temps pour moi.
 

Pièces jointes

  • Suivi point.xlsx
    43.7 KB · Affichages: 8

James007

XLDnaute Barbatruc
Bonjour,

Dans ton fichier test ... pas de chiffres ... mais, si mes yeux ne me trompent pas ... pas de calculs ( ni somme, ni autre chose) entre tes deux feuilles ...

On dirait qu'il ne s'agit que de présentation ... donc purement cosmétique ...

Me trompe-je ?
 

job75

XLDnaute Barbatruc
Bonjour Panda Tsoa, James007, Dudu2,

Voyez le fichier joint et cette macro dans le code de la 1ère feuille (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Change(ByVal R As Range)
Dim P As Range, F As Worksheet, Q As Range, lig As Variant, col As Variant
Set P = [C5].CurrentRegion
Set R = Intersect(R, P)
If R Is Nothing Then Exit Sub
Set F = Sheets("Suivi")
For Each R In R.EntireRow 'si entrées/effacements multiples
    Set Q = Intersect(R, P)
    lig = Application.Match(Q(3), F.Columns(2), 0)
    col = Application.Match(Q(1), F.Rows(2), 0)
    If IsNumeric(lig) And IsNumeric(col) Then F.Cells(lig, col) = Application.SumIfs(P.Columns(9), P.Columns(1), Q(1), P.Columns(3), Q(3))
Next
End Sub
La macro s'exécute quand on valide ou modifie des cellules du tableau source.

Pour renseigner entièrement la 2ème feuille copier-coller une colonne entière de ce tableau sur elle-même.

Edit : j'ai testé sur les 366 jours de 2020, le copier-coller d'une colonne entière prend 17 secondes chez moi, c'est acceptable.

A+
 

Pièces jointes

  • Suivi point(1).xlsm
    53.7 KB · Affichages: 4
Dernière édition:

job75

XLDnaute Barbatruc
Tu as parfaitement raison James007 puisque normalement un employé ne pointe qu'une fois par jour.

Donc il est inutile d'utiliser SOMME.SI.ENS (SumIfs dans ma macro).

Mais les INDEX/EQUIV dans toutes les cellules de la 2ème feuille prendront quand même trop de temps de calcul sur 366 jours, donc utilisez cette macro du fichier (2) :
VB:
Private Sub Worksheet_Change(ByVal R As Range)
Dim P As Range, F As Worksheet, Q As Range, lig As Variant, col As Variant
Set P = [C5].CurrentRegion
Set R = Intersect(R, P)
If R Is Nothing Then Exit Sub
Set F = Sheets("Suivi")
For Each R In R.EntireRow 'si entrées/effacements multiples
    Set Q = Intersect(R, P)
    lig = Application.Match(Q(3), F.Columns(2), 0)
    col = Application.Match(Q(1), F.Rows(2), 0)
    If IsNumeric(lig) And IsNumeric(col) Then F.Cells(lig, col) = Q(9)
Next
End Sub
Avec 366 jours le copier-coller d'une colonne prend environ 1 seconde.
 

Pièces jointes

  • Suivi point(2).xlsm
    53.6 KB · Affichages: 10

job75

XLDnaute Barbatruc
Si l'on veut une solution par formules on entrera en D4 de la 2ème feuille :
Code:
=RECHERCHEV($B4;DECALER('Données sources'!$E$5;EQUIV(D$2;'Données sources'!$C$6:$C$16841;0);;NB.SI('Données sources'!$C$6:$C$16841;D$2);7);7;0)
Avec 366 jours la validation d'une cellule dans l'une des feuilles prend de 3 à 4 secondes.
 

Panda Tsoa

XLDnaute Junior
job75, James007,Dudu2, bonjour,
Je vous remercie pour votre assistance. Vous avez raison sur l'utilisation de la formule index-equiv, Décaler.
J'ai un petit soucis car si dans l'onglet 'Suivi" on rempli des formules par employé jusqu'au 31 Décembre 2020, le traitement dans le fichier lorsqu'on saisie dans l'onglet "Données sources" devient lent et c'est ça mon soucis.
Je suis désolé car je suis presque débutant en excel les amis!
Merci à vous!
 

James007

XLDnaute Barbatruc
Bonjour à tous,

Au risque de me répéter ... pas de calculs ( ni somme, ni autre chose) entre tes deux feuilles ...
On dirait qu'il ne s'agit que d'une mise en forme ... donc purement cosmétique ...

As-tu vraiment de cette seconde feuille ?

Si tu veux éviter toutes les lourdeurs et si tu as le souci de la rapidité ...
As-tu insérer un Tableau Croisé Dynamique ?
 

Statistiques des forums

Discussions
285 211
Messages
1 866 679
Membres
156 790
dernier inscrit
Diediene
Haut Bas