Compter Colonnes contenant valeur numérique

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 !

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
 

Pièces jointes

Solution
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 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
 
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
 
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:
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
 
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+
 

Pièces jointes

Dernière édition:
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
 
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.
 

Pièces jointes

Dernière édition:
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.
 
- 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
4
Affichages
719
Retour