Compter des cellules

earvino

XLDnaute Nouveau
Bonjour,

Dans un tableau, je dois compter le nombre de cellules qui contiennent des minutes (sous la forme 0:05 pour 5 minutes).
Donc si je trouve 3 cellules, je souhaite avoir le chiffre 3.
Ces cellules sont sur une ligne mais les cellules sont non contiguës.

Pour résumé:
A1 = 0:05
B1 = 0:00
C1 = 0:12
Me donne dans la cellule D1 = 3

Actuellement mon code est sous la forme:
Cells(1, 4).value = cells(1, 4).value + cells(1, c)
La variable c me permet d'avancer sur chaque colonne.

J'ai essayé les fonctions de conversion CDbl, CInt...
Et aussi CountA.
Ma ligne de code ressemble a ca:
Cells(1, 4).value = cells(1, 4).value + CDbl(cells(1, c))

Mais je n'ai pas le résultat attendu.
Avez-vous une idée ?

Merci
 

VDAVID

XLDnaute Impliqué
Re : Compter des cellules

Bonjour Earvino,

Peut-être comme ceci, mais il faut adapter en fonction de ton tableau.
Il faut aussi faire attention au fait que la macro toutes les cellules au format numérique.

Il faudra affiner si ce n'est pas assez précis

Code:
Sub CompteCel()
    
    Dim Ws As Worksheet
    Dim Ligne As Long, i As Integer, Valo As Integer
    
    'Feuille où effectuer la macro
    Set Ws = ThisWorkbook.Sheets("Feuil1")
    
    'Numéro de la ligne où se trouve les données
    Ligne = 1
    
    For i = 1 To Ws.Cells(Ligne, 287).End(xlToLeft).Column
        
        'On compte les cellules au format numérique
        If IsNumeric(Ws.Cells(Ligne, i).Value) = True Then Valo = Valo + 1
    
    Next i
    
    Ws.Cells(Ligne, Ws.Cells(Ligne, 287).End(xlToLeft).Column + 1).Value = Valo
    
    
End Sub

A+
 

vgendron

XLDnaute Barbatruc
Re : Compter des cellules

Bonjour
en D3 tu peux écrire
=SOMME(QUOTIENT(MINUTE(A1:A3);5))
avec validation matricielle! Ctrl+Shift+ Entrée

j'imagine qu'avec des durées en heures: genre 1:21.. ca ne va pas marcher..
faudra donc juste adapter avec Heure....
 

earvino

XLDnaute Nouveau
Re : Compter des cellules

Merci Vdavid.
Je vais creuser ta piste.

Par contre ca m'a donné une idée avec Not IsEmpty.
Ca marche mais avec un résultat négatif; au lieu de 3 j'ai -3

Est ce que c'est dû au fait que je pars de la colonne la plus éloignée et je décrémente ma variable c ?
 

VDAVID

XLDnaute Impliqué
Re : Compter des cellules

Bonjour Vgendron, earvino,

La méthode Not IsEmpty permet de compter les cellules non vides, d'où le résultat logique si tu as soit des cellules contenant des minutes soit des cellules contenant rien.
Par contre si dans ta ligne, une cellule est suspectible de renfermer autre chose que ces deux possibilités alors tu n'obtiendras pas un nombre exact.

Il faudrait que je vois ton code pour expliquer la raison du -1
 

vgendron

XLDnaute Barbatruc
Re : Compter des cellules

ah oui pardon. j'ai mal lu. les données sont sur une ligne;.
donc; si ta ligne 1 contient les heures minutes..
en A2:
Code:
=SOMME(QUOTIENT(MINUTE(DECALER($A$1;;;;NBVAL(1:1)));5))+12*SOMME(HEURE(DECALER($A$1;;;;NBVAL(1:1))))

toujours avec validation matricielle
Ctrl+shift+entree
 

earvino

XLDnaute Nouveau
Re : Compter des cellules

@vgendron
je vois ton idée. Mais cela m'obligerait à mettre en vba un FormulaArray
Si je peux l'éviter, je préfère.
Je garde ton idée sous le coude quand même.

j'essaye de trouver, dans la mesure du possible, le code qui va bien sous cette forme:
Cells(1, 4).value = cells(1, 4).value + Not IsEmpty(cells(1, c))


@vdavid
j'ai essayé ca:
Cells(1, 4).value = cells(1, 4).value + IsNumeric(cells(1, c))
Ca ne marche pas dans l'état, certainement à cause du format numérique que tu évoquais dans ton message
 

VDAVID

XLDnaute Impliqué
Re : Compter des cellules

Peut-être pourrais tu mettre un petit fichier exemple, sans données confidentielles?
Cela nous aiderais à t'aider :)

Car je ne comprends pas trop ton bout de code, c est la variable de ta boucle?

Si c'est le cas, alors tu peux écrire:

Code:
If Isnumeric(Cells(1,c).Value) = True Then Cells(1,4).Value = Cells(1,4).Value + 1
 

earvino

XLDnaute Nouveau
Re : Compter des cellules

Code:
mois = 100
c = mois
j = 2

While c <> 8

Workbooks(Thisbook).Sheets("Feuil1").Cells(j, mois + 6).Value = Workbooks(Thisbook).Sheets("Feuil1").Cells(j, mois + 6).Value + Not IsEmpty(Workbooks(Thisbook).Sheets("Feuil1").Cells(j, c).Value)

c = c -1
wend

Mon résultat s'écrit en 106 et je commence à vérifier c en 100 puis 99... jusqu'à 8
 

vgendron

XLDnaute Barbatruc
Re : Compter des cellules

je vois ton idée. Mais cela m'obligerait à mettre en vba un FormulaArray
Si je peux l'éviter, je préfère.

Je crois avoir vu ce qui t'embete dans le formulaarray par vba.. toutes ces références relatives nécessaires au lieu des références locales...
ci dessous une astuce (pas de moi) pour contourner le pb...


Code:
formule = "=SOMME(QUOTIENT(MINUTE(DECALER($A$1;;;;NBVAL(1:1)));5))+12*SOMME(HEURE(DECALER($A$1;;;;NBVAL(1:1))))"
Range("A2").FormulaLocal = formule
Range("A2").FormulaArray = Range("A2").Formula

et je viens de tester. ca fonctionne parfaitement
 

earvino

XLDnaute Nouveau
Re : Compter des cellules

Je crois avoir vu ce qui t'embete dans le formulaarray par vba..

Non cela ne m'embête pas. Dans cette macro j'utilise déjà un FormulaArray.
C'est surtout pour la personne qui devra reprendre la macro pour une modification. Il ne connait pas beaucoup vba donc j'essaye de faire des choses simples.

Et avec le Not IsEmpty ca me semblait pas mal.

Mais si je ne trouve pas, y aura un FormulaArray:)
 

earvino

XLDnaute Nouveau
Re : Compter des cellules

Je viens de tester le même code dans le sens ascendant pour ma variable c et j'obtiens aussi une valeur négative.
Si je n'ai aucune cellule avec des minutes, j'obtiens bien un 0.

Même test avec des chaines de caractères et j'ai le même phénomène.
 

VDAVID

XLDnaute Impliqué
Re : Compter des cellules

Re,

Dans ce cas là, mets un If sur le Not IsEmpty comme ceci:

Code:
   mois = 100
c = mois
j = 2

While c <> 8

If Not IsEmpty(Workbooks(Thisbook).Sheets("Feuil1").Cells(j, c).Value) = True Then Workbooks(Thisbook).Sheets("Feuil1").Cells(j, mois + 6).Value = Workbooks(Thisbook).Sheets("Feuil1").Cells(j, mois + 6).Value + 1 
c = c - 1
Wend

EDIT: Comme ceci plutôt
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Compter des cellules

Et avec un sommeprod?
=SOMMEPROD(NON(ESTNUM(A1:C1))*1)

ici, donne le nombre de cellules (dans la range A1:C1) qui sont vides ou qui contiennent du texte..

si la range n'est pas connue; suffit de la rentrer de facon "dynamique" avec un décaler.. mais attention aux cellules vides.



PS dans mes formules précédentes; en fait. je n'avais rien compris.. ;-)
je m'amusais à calculer la somme des minutes et heures et divisais le tout par 5mn.

A1 = 0:05--->il y a une fois 5mn
B1 = 0:00
C1 = 0:12--->il y a deux fois 5mn...

Me donne dans la cellule D1 = 3
 

Discussions similaires

Réponses
0
Affichages
175

Statistiques des forums

Discussions
312 440
Messages
2 088 460
Membres
103 858
dernier inscrit
Rockaway