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
 

Pièces jointes

  • Compter jours ouvrés.xlsx
    19.2 KB · Affichages: 14
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+

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:

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+
 

Pièces jointes

  • Nombre de colonnes(1).xlsm
    29 KB · Affichages: 7
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
 

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.
 

Pièces jointes

  • Nombre de colonnes par formules(1).xlsx
    21.6 KB · Affichages: 6
Dernière édition:

micheldu52

XLDnaute Occasionnel
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.
 

Discussions similaires

Réponses
2
Affichages
140