XL 2010 Compter Colonnes contenant valeur numérique

r3dkross

XLDnaute Nouveau
Bonjour à tous, bonjour le forum,

Je reviens à nouveau vers vous pour tenter de solutionner un problème qui a priori semble simple mais que je n'arrive pas à résoudre :)

J'aimerais compter les colonnes qui ne contiennent pas de valeurs numériques dans leur colonne.

J'arrive à compter le nombre de colonne avec NB.SI(A8:AM8;"*"), mais je ne vois pas comment insérer une condition "SI colonne contient valeur numérique, compter, sinon ne pas compter" :)

Je joins un exemple en pièce jointe.

Merci beaucoup pour votre aide!

Bien cordialement,

rk
 

Fichiers joints

r3dkross

XLDnaute Nouveau
Bonjour Staple et merci,

Malheureusement il me compte l'ensemble des valeurs présentes, hors je recherche à compter le nombre de colonnes n'ayant pas de valeurs numériques en dessous du jour.

Est-il possible via un code vba de supprimer les colonnes ne comprenant que du texte en dessous des jours, dès lors je pourrais les compter avec NB.SI?

Merci encore pour votre aide.

rk
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, r3dkross

r3dkross
Je ne suis pas d'accord
La formule fonctionne
Faire ce petit test pour s'en convraincre ;)
Lancer la macro ci-dessous sur une feuille vierge
VB:
Sub test()
[A1:H1] = Array(1, "a", 2, "b", "=TODAY()", 3, "Staple", 1600)
[J1] = "=SUMPRODUCT(--ISNUMBER(RC[-9]:RC[-2]))": [K1] = "'<- Valeur numérique"
[J2] = "=COUNTIF(R[-1]C[-9]:R[-1]C[-2],""*"")": [K2] = "'<- Valeur texte"
[A1,C1,E1:F1,H1,J1].Interior.Color = vbYellow
[B1,D1,G1,J2].Interior.Color = vbGreen
End Sub
Et regarder les formules en J1 et J2
 

job75

XLDnaute Barbatruc
Bonsoir r3dkross, Edit : JM,

Je ne comprends pas, on parle ici de "compter le nombre de colonnes" et dans le fichier de "compter le nombre de jours ouvrés" ???

Le fichier a-t-il été modifié ???

A+
 
Dernière édition:

JHA

XLDnaute Barbatruc
Bonjour à tous,

Pour compter le nombre de jour(s) non travaillé de la ligne "2" du fichier joint, tu peux essayer:
VB:
=NB.SI($A$2:$BI$2;"><")
JHA
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, job75, JHA

Mea culpa
Je n'ai lu que ceci dans le premier message
SI colonne contient valeur numérique, compter, sinon ne pas compter"
Puis j'ai proposé une formule qui fait cela
(mais je n'ai pas ouvert la PJ)
 

job75

XLDnaute Barbatruc
Bonsoir JHA, je ne comprends pas mieux, ta solution ne compte pas les jours ouvrés et encore moins les colonnes...
 

r3dkross

XLDnaute Nouveau
Bonsoir à tous,
Merci à tous pour vos retours je m’excuse si ce n’est pas très clair, je vais essayer de reprendre:

Je souhaite compter le nombre de jours ouvrés en ligne A1:BM1, qui sont en fait des colonnes. Un jour prend 2 colonnes pour ne rien arranger :)

Cependant je voudrais que lorsqu’une journée/colonne contient uniquement des « Repos » et/ou cellules vides, par Exemple « Dim 03 » en cellule E1, elle ne soit pas comptabilisée. Tout comme Dim 17 en cellule S1.

J’avais donc pensé à faire supprimer la colonne/jour si elle ne contient que du texte car si elle contient des nombres c’est que des personnes travaillent.

Voilà j’espère que c’est plus clair :)
encore merci pour votre aide précieuse!!
Bien cordialement

Rk
 

job75

XLDnaute Barbatruc
Il y a même un jour avec 3 colonnes en AS:AU !!!

Bon j'ai horreur de me prendre la tête et puisque vous parlez du nombre de colonnes voyez le fichier joint avec ces 2 fonctions VBA :
VB:
Function NbColSansNum(plage As Range)
Dim rc&, col As Range
rc = plage.Rows.Count
With Application
    For Each col In plage.Columns
        If .CountA(col) = rc Then If .Count(col) = 0 Then NbColSansNum = NbColSansNum + 1
    Next
End With
End Function

Function NbColAvecNum(plage As Range)
Dim rc&, col As Range
rc = plage.Rows.Count
With Application
    For Each col In plage.Columns
        If .CountA(col) = rc Then If .Count(col) Then NbColAvecNum = NbColAvecNum + 1
    Next
End With
End Function
Elles sont utilisées dans les cellules G12 et G13.

A+
 

Fichiers joints

Dernière édition:

r3dkross

XLDnaute Nouveau
Il y a même un jour avec 3 colonnes en AS:AU !!!

Bon j'ai horreur de me prendre la tête et puisque vous parlez du nombre de colonnes voyez le fichier joint avec ces 2 fonctions VBA :
VB:
Function NbColSansNum(plage As Range)
Dim rc&, col As Range
rc = plage.Rows.Count
With Application
    For Each col In plage.Columns
        If .CountA(col) = rc Then If .Count(col) = 0 Then NbColSansNum = NbColSansNum + 1
    Next
End With
End Function

Function NbColAvecNum(plage As Range)
Dim rc&, col As Range
rc = plage.Rows.Count
With Application
    For Each col In plage.Columns
        If .CountA(col) = rc Then If .Count(col) Then NbColAvecNum = NbColAvecNum + 1
    Next
End With
End Function
Elles sont utilisées dans les cellules G12 et G13.

A+
Bonjour,

A lire le code j’ai l’impression que c’est exactement ce que je recherche!
Ma version mobile ne me permettant pas d’exécuter les macros donc je vous fais un retour un peu plus tard, en tout cas merci encore!

rk
 

r3dkross

XLDnaute Nouveau
bonsoir,

et pourquoi pas
=+NBVAL(A2:BI6)-NB.SI(A2:BI6;CONCATENER(">";0))

cordialement,
Michel
Bonjour et merci beaucoup de tenter de m’aider aussi!

Le résultat me donne 46, je cherche à obtenir 27 pour ce cas là, en sachant que les colonnes sont doublées (voir triplées :( ) j’en conclut que le résultat est à diviser par 2 ?

Merci!

rk
 

job75

XLDnaute Barbatruc
Bonjour le fil, le forum,

Une solution par formules qui font la même chose que les fonctions VBA, en G12 :
Code:
=SOMMEPROD((SOUS.TOTAL(3;DECALER(A2:A6;;COLONNE(A2:BI2)-1))=LIGNES(A2:A6))*NON(SOUS.TOTAL(2;DECALER(A2:A6;;COLONNE(A2:BI2)-1))))
Et en G13 :
Code:
=SOMMEPROD((SOUS.TOTAL(3;DECALER(A2:A6;;COLONNE(A2:BI2)-1))=LIGNES(A2:A6))*SIGNE(SOUS.TOTAL(2;DECALER(A2:A6;;COLONNE(A2:BI2)-1))))
Edit : si l'on ne se préoccupe pas de savoir si les colonnes sont pleines on peut simplifier en G13 :
Code:
=SOMMEPROD(SIGNE(SOUS.TOTAL(2;DECALER(A2:A6;;COLONNE(A2:BI2)-1))))
Bonne journée.
 

Fichiers joints

Dernière édition:

micheldu52

XLDnaute Junior
Bonjour le fil, le forum,

Une solution par formules qui font la même chose que les fonctions VBA, en G12 :
Code:
=SOMMEPROD((SOUS.TOTAL(3;DECALER(A2:A6;;COLONNE(A2:BI2)-1))=LIGNES(A2:A6))*NON(SOUS.TOTAL(2;DECALER(A2:A6;;COLONNE(A2:BI2)-1))))
Et en G13 :
Code:
=SOMMEPROD((SOUS.TOTAL(3;DECALER(A2:A6;;COLONNE(A2:BI2)-1))=LIGNES(A2:A6))*SIGNE(SOUS.TOTAL(2;DECALER(A2:A6;;COLONNE(A2:BI2)-1))))
Edit : si l'on ne se préoccupe pas de savoir si les colonnes sont pleines on peut simplifier en G13 :
Code:
=SOMMEPROD(SIGNE(SOUS.TOTAL(2;DECALER(A2:A6;;COLONNE(A2:BI2)-1))))
Bonne journée.
 

micheldu52

XLDnaute Junior
Bonsoir,

Comment trouves tu 27, je compte bien 46 cellules qui ont les valeurs suivantes :
1575410501428.png
soit le résultat de "ma" formule
Cordialement,
Michel
 

job75

XLDnaute Barbatruc
Bonsoir micheldu52,

Il ne s'agit pas de compter les cellules mais les colonnes, il y en a 27 qui contiennent des nombres.

Bonne nuit.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas