si je prends en B5 le chiffre, il est présent 13 fois dans la plage
ensuite il faut reprendre la variable en B5 et rechercher sur la plage - la ligne du dessus
=NB.SI($B5:$I$17;$B$5)
Ta fonction MODE() ?? n’a rien à voir dans ta demande
ou alors, j’ai rien compris (mais cela arrive de plus en plus, le cerveau ne suit plus avec les années)
Sub Comptage()
Dim i%, GV%
Sheets("Feuil1").Range("K5:L30").ClearContents 'Efface les anciens résultats
GV = Application.WorksheetFunction.Max(Range("Vals")) 'Recherche valeur Max
For i = 1 To GV 'boucle de 1 à la grande valeur
Cells(i + 4, 12) = i 'affiche en colonne L les nombres de 1 à grande valeur
' affiche en colonne K la valeur correspondante
Cells(i + 4, 11).Value = Application.WorksheetFunction.CountIf(Range("Vals"), i)
Next i
'Tri sur les valeurs les + présentes au -
Range("K4").Select
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=ActiveCell.Range _
("A1:A" & GV), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Feuil1").Sort
.SetRange ActiveCell.Offset(-1, 0).Range("A1:B" & GV + 1)
.Header = xlYes
.Apply
End With
End Sub
Re,
Cells(i + 4, 12) = i
la cellule de la ligne i (qui est égale à 1 au début de la boucle) + 4 , colonne 12 est égale à 1 soit: L5 = 1
à la boucle suivante i sera = à 2 est la cellule notera 2 soit: L6 = 2, etc
Vals est le nom (gestionnaire de noms) de la plage de travail
si i=1 au premier tour de boucle, la cellule K5 est = NB.SI(plage de travail,1)
compte le nombre de valeur = 1 dans la plage
et ensuite, un tri sur le Nombre de valeur du + grand au plus petit
Pour SUMIFS, c’est bien le nom VBA de Somme.Si.Ens()
Pour ta formule, il doit y avoir moyen de voir avec la fonction MODE() pour comptabiliser sur la plage F22:M46 sur les lignes paires
Sinon en VBA par une boucle FOR TO avec un STEP 2 pour sauter une ligne à chaque tour et un Compteur pour additionner
C’est bien pour la ligne en cours,
mais à chaque jour qui passe, il faudrait modifier la ligne de destination
alors qu’avec la recherche de la dernière ligne non vide sur plage, c’est automatique
Partie de macro à remplacer:
Dim Dl%
Dl = Range("AE18").End(xlDown).Row + 1
Range("Q41:AA41").Select
Selection.Copy
Range(Cells(Dl, "AK"), Cells(Dl, "AU")).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("U45:W45").Select
Selection.Copy
Range(Cells(Dl, "AW"), Cells(Dl, "AY")).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range(Cells(Dl, "AK"), Cells(Dl, "AY")).Select
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
.... et la suite idem