Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Pour le fun : Nb de lignes

  • Initiateur de la discussion Initiateur de la discussion R@chid
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

R@chid

XLDnaute Barbatruc
Supporter XLD
Bonsoir @ tous,
J'ai rien à faire ce Week-End alors pourquoi pas jouer avec mes amis 😛🙂??
Sur une plage nommée Zone d'une hauteur de 10.000 de lignes et 10 colonnes de largeur, compter le nombre de lignes dont la valeur minimale est supérieure à 3. (Sans aucune colonne intermédiaire)
Qui vont être rapide est-ce les formules ou les codes???

J'ai prévu 1.000.000 de lignes mais le fichier a fait 47Mo...
Donc on peut donner un exemple de 10.000 lignes et vous pouvez faire les tests chez vous sur une base de 1.000.000 de lignes si vous voulez.

@ + +
 

Pièces jointes

Re : Pour le fun : Nb de lignes

Bonjour à tous.


Une formule matricielle ?​
Code:
=-SOMME(-(NB.SI(DECALER(A1:J1;LIGNE(1:1000000););">3")=10))



ROGER2327
#6677


Mardi 17 Gidouille 140 (Sainte Femelle, technicienne - fête Suprême Quarte)
13 Messidor An CCXXI, 0,2399h - giroflée
2013-W27-1T00:34:33Z
 
Re : Pour le fun : Nb de lignes

Suite...


...toujours matricielle :​
Code:
=-SOMME(-(NB.SI(DECALER(INDEX(Zone;1;1);LIGNE(Zone)-LIGNE(INDEX(Zone;1;1));;1;10);">3")=10))



ROGER2327
#6678


Mardi 17 Gidouille 140 (Sainte Femelle, technicienne - fête Suprême Quarte)
13 Messidor An CCXXI, 0,3870h - giroflée
2013-W27-1T00:55:43Z
 
Re : Pour le fun : Nb de lignes

Bonjour,
@ Roger,
Je préfère ta première formule avec cette écriture,
Code:
=NB(1/(NB.SI(DECALER(Zone;LIGNE(INDIRECT("1:"&LIGNES(Zone)));;1);">3")=10))

Ou bien, comme j'ai procédé, toujours matricielle,
Code:
=NB(1/(SOUS.TOTAL(5;DECALER(Zone;LIGNE(INDIRECT("1:"&LIGNES(Zone)));;1))>3))

@ + +
 
Re : Pour le fun : Nb de lignes

Re...


Malheureusement, ces formules sont fausses car elles ne prennent pas en compte la première ligne. Proposition :​
Code:
=NB(1/(NB.SI(DECALER(Zone;LIGNE(INDIRECT("1:"&LIGNES(Zone)))-1;;1);">3")=10))

=NB(1/(SOUS.TOTAL(5;DECALER(Zone;LIGNE(INDIRECT("1:"&LIGNES(Zone)))-1;;1))>3))



ROGER2327
#6679


Mardi 17 Gidouille 140 (Sainte Femelle, technicienne - fête Suprême Quarte)
13 Messidor An CCXXI, 0,5094h - giroflée
2013-W27-1T01:13:22Z
 
Re : Pour le fun : Nb de lignes

Bonjour à tous,

Comme R@chid exprime le désir de se mettre à VBA, j'ai pondu une fonction (commentée) :

Function MinSup_N(xZone As Range, SupA As Long) avec deux paramètres:

  • xZone => la zone des données
  • SupA => la valeur à laquelle le minimum de chaque ligne doit être strictement supérieur

Le code de la fonction dans module1:
VB:
Option Explicit

Function MinSup_N(xZone As Range, SupA As Long)

' on traite le tableau par paquet de ParPaquetDe nombre de lignes
' pour éviter des PB de mémoire saturée
Const ParPaquetDe = 20000
Dim derlig As Long, tablo As Variant, i As Long, k As Long
Dim prem As Long, der As Long, aux As Long, largeur As Long

' (avec le range xZone en paramètre)
With xZone
' nombre de colonnes de xzone : nombre de lignes de xZone
largeur = .Columns.Count: derlig = .Rows.Count
' on traite le tableau par paquet de ParPaquetDe lignes
' pour éviter des PB de mémoire saturée
prem = 1
der = prem + ParPaquetDe
' si la dernière ligne à traiter est supérieure à
' la dernière ligne des données (derlig), alors la dernière
' ligne à traiter = derlig
If der > derlig Then der = derlig

Do
  ' transfert des lignes de données dans le table tablo
  tablo = .Offset(prem - 1).Resize(der - prem + 1).Value
  For i = LBound(tablo) To UBound(tablo)
  ' boucle sur chaque ligne du tablo
    For k = 1 To largeur
      ' dès qu'un élément dela ligne est inf ou égal à 3
      ' on quitte la boucle
      If tablo(i, k) <= SupA Then Exit For
    Next k
    ' si l'indice k est égal à 11, alors on a parcouru toute la boucle
    ' sans trouver de valeur <= à SupA: Le min est donc > à SupA
    ' on incrémente le compteur
    If k = largeur + 1 Then MinSup_N = MinSup_N + 1
  Next i
  ' préparation de la boucle suivante
  prem = der + 1: der = prem + ParPaquetDe
  If der > derlig Then der = derlig
  ' si la première ligne suivante à traiter est sup. à derlig
  ' alors on sort de la boucle Do...Loop
Loop Until prem > derlig
End With
End Function
 

Pièces jointes

Dernière édition:
Re : Pour le fun : Nb de lignes

Suite...


...avec une autre fonction personnalisée.​
VB:
Function Compte&(Zone As Range, Seuil#)
Dim n&, c&, Ligne As Range, Cellule As Range
    c = Zone.Columns.Count
    For Each Ligne In Zone.Rows
        For Each Cellule In Ligne.Columns
            If Cellule.Value <= Seuil Then Exit For
            n = n + 1
        Next Cellule
        If n = c Then Compte = Compte + 1
        n = 0
    Next Ligne
End Function
Pour l'exemple proposé par R@chid, on obtient le résultat par​
Code:
=Compte(Zone;3)


ROGER2327
#6680


Mardi 17 Gidouille 140 (Sainte Femelle, technicienne - fête Suprême Quarte)
13 Messidor An CCXXI, 0,9637h - giroflée
2013-W27-1T02:18:46Z
 
Re : Pour le fun : Nb de lignes

Bonjour à tous

Très largement inspirée de la macro de ROGER et qui me semble un peu plus rapide

Code:
Function cpte(zone, seuil)
Dim tablo
Dim n As Long
Dim m As Long
Dim c As Long
Dim p As Long
tablo = zone
For n = LBound(tablo, 1) To UBound(tablo, 1)
  For m = LBound(tablo, 2) To UBound(tablo, 2)
    If tablo(n, m) <= seuil Then Exit For
    p = p + 1
  Next
  If p = UBound(tablo, 2) Then c = c + 1
  p = 0
Next
cpte = c
End Function
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

S
Réponses
2
Affichages
3 K
S
L
Réponses
28
Affichages
3 K
Ludovic56
L
M
Réponses
8
Affichages
2 K
P
Réponses
2
Affichages
2 K
pommedapi
P
B
Réponses
2
Affichages
1 K
bastiense
B
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…