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

Pour le fun : Nb valeurs

  • 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
Bonjour @ tous,
Comment on peut calculer le nombre de valeurs dans une plage 😛🙄???
Je veux le nombre de valeurs dans les cellules en rouge, attention la couleur ici est juste pour vous montrer ce que je veux, mais en réalité on n'a que du blanc.
Voir PJ pour mieux comprendre.
 

Pièces jointes

Re : Pour le fun : Nb valeurs

Bonjour le Forum,
Bonjour l'ami R@chid,

une solution par sommeprod un peu cappilotractée et moi aussi juste pour le fun

Code:
=SOMMEPROD((((MOD(LIGNE(Zone);2)=0)*(MOD(COLONNE(Zone);2)=0))+((MOD(LIGNE(Zone);2)=1)*(MOD(COLONNE(Zone);2)=1)))*(ESTNUM(Zone)))

Amicalement
 
Re : Pour le fun : Nb valeurs

Bonjour R@chid.
Je te propose ce code à mettre dans un module ordinaire:
VB:
Option Explicit

Function NbValDamier(Plage As Range, Optional ByVal Impair As Long = 0) As Long
Dim T() As Variant, L As Long, C As Long
T = Plage.Value
For L = 1 To UBound(T, 1): For C = 1 To UBound(T, 2)
   If (L + C) Mod 2 = Impair Then If Not IsEmpty(T(L, C)) Then NbValDamier = NbValDamier + 1
   Next C: Next L
End Function
Ceci rend en effet 119 :
Code:
=NbValDamier(Zone)

Edit: J'aurais du me douter qu'il y aurait foule pour répondre à R@chid !
 
Dernière édition:
Re : Pour le fun : Nb valeurs

Bonjour @ tous,
Salut Dranreb...
J'aurais du me douter qu'il y aurait foule pour répondre à R@chid !
Pourquoi mon ami??? j'avais rien à faire alors j'ai décidé de jouer avec les amis...
Un bon début vers le VBA... 😛🙂
@ + +
 
Re : Pour le fun : Nb valeurs

Bonjour à tous,

autre proposition par formule :
Code:
=SOMMEPROD(((Zone*(MOD(COLONNE(Zone);2)=MOD(LIGNE(Zone);2)))>0)*1)

eric

edit: tant qu'il n'y a pas de 0 dans la plage bien sûr
 
Dernière édition:
Re : Pour le fun : Nb valeurs

Bonjour Rachid

Un essai avec fonction personnalisée

NB:Elle prend en compte la position de la zone . Si on devait généraliser reviens nous le dire
NB bis : Compte tenu de tes capacités en formule , je ne doute pas qu tu puisses la traduire en formule pure (a partir de ligne() et colonne())

Edit: Arf je suis sérieusement à la bourre sur ce coup !!!!!
 

Pièces jointes

Re : Pour le fun : Nb valeurs

Bonjour @ tous,
Salut Eriiic,
Idem sauf que j'ai fait un peu longue avec LIGNE(INDIRECT()) pour éviter le cas de suppression ou de l'ajout d'une colonne ou ligne...
@ + +
 
Re : Pour le fun : Nb valeurs

Bonjour les amis,
Je suis encore loin d'avoir tous les réflexes, ça ne m'a même pas effleuré l'esprit... ;-)
Mais du fait de la plage nommée on n'est pas un peu à l'abri ?
Je parle de l'ajout suppression au dessus ou à gauche de la zone...
tu peux insérer une ligne au dessus ou une colonne à gauche pour tester d’où l’intérêt de d'utiliser souvent LIGNE(INDIRECT("1:"&LIGNES(ZONE)))
@ + +
 
Re : Pour le fun : Nb valeurs

Bonjour R@chid, Jocelyn et les autres,

Une fonction VBA :

Code:
Function Compte(zone As Range)
Dim ncol%, i&, p As Byte, j%
ncol = zone.Columns.Count
For i = 1 To zone.Rows.Count
  p = i Mod 2
  For j = 1 To ncol
    If zone(i, j) <> "" Then Compte = Compte + IIf(p, j Mod 2, 1 - (j Mod 2))
  Next
Next
End Function
Fichier joint.

A+
 

Pièces jointes

Dernière édition:
Re : Pour le fun : Nb valeurs

Bonjour @ tous,
Merci pour vos participations,
j'ai bien aimé les propositions en VBA, mais j'ai encore du temps pour bien comprendre.
Encore pour le fun sur ce fil...
@ + +
 
Re : Pour le fun : Nb valeurs

Bonjour le Forum
Voilà ma petite contribution.
2 variantes
Résultat en "N4"

Résultat en "N7"
Bon dimanche
 

Pièces jointes

Re : Pour le fun : Nb valeurs

Re,

Ma solution VBA simplement traduite en formule Excel (matricielle) :

Code:
=SOMME((Zone<>"")*SI(MOD(LIGNE(Zone)-LIGNE(INDEX(Zone;1;1))+1;2);MOD(COLONNE(Zone)-COLONNE(INDEX(Zone;1;1))+1;2);1-MOD(COLONNE(Zone)-COLONNE(INDEX(Zone;1;1))+1;2)))
Fichier joint.

A+
 

Pièces jointes

- 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

Réponses
14
Affichages
484
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
903
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…