Calcul sur des colonnes par catégories
Bonjour
J'ai un projet à faire et je suis confronter à un problème que j'ai du mal à résoudre :
J'ai un tableau de plusieurs colonnes, et sous chaque colonne je dois indiquer combien de nombre se trouve au dessus de 200, entre 100 et 200, entre 40 et 100 et sous 40.
Mon début de macro me pose problème car il me calcul tous les nombres au dessus de 200 et met ce chiffre pour chaque colonne alors que je veux uniquement ceux par colonne.
Je met un exemple assez simple.
(Parce que evidemment dans le vrai fichier il y a 10 fois plus de données)
Mon principale problème c'est que je ne vois pas comment faire ca avec des boucles, j'ai l'impression d'être obligée de faire du cas par cas.
Salut,
Des formules ne suffiraient-elles pas?
- en B15
=NB.SI(B2:B13;">=200")- en B16
=SOMMEPROD((B2:B12>=100)*(B2:B12<200)*1)- en B17
=SOMMEPROD((B3:B13>=40)*(B3:B13<100)*1)- en B18
=NB.SI(B5:B16;"<40")A copier sur toutes les colonnes.
Si vba indispensable, 2 facons de voir la chose:
1 - Evaluer les formules plus haut pour remplir le tableau
2 - Faire des boucles
++
VBA m'est indispensable sur ce projet, et j'aimerais utiliser des boucles le problème c'est qu'au lieu d'agir colonne par colonne ma boucle traite toutes les colonnes en même temps et je ne vois absolument pas comment diviser ca pour que le programme traite une colonne, affiche le resultat puis ENSUITE seulement traite la deuxieme etc ...
Que veut dire "evaluer une formule" ?
EDIT = Cela revient a graver une nouvelle macro en utilisant ces formules puis a voir ce que ca donne ?
En tout cas merci pour ta réponse
Re,
2 exemples :
Public Sub blabla_Avec2Boucles()
Dim CptLig As Integer, CptCol As Byte
Dim Compteurs() As Integer
For CptCol = 2 To 4
ReDim Compteurs(1 To 4) As Integer
For CptLig = 2 To 12
Select Case Cells(CptLig, CptCol).Value
Case Is >= 200
Compteurs(1) = Compteurs(1) + 1
Case 100 To 199
Compteurs(2) = Compteurs(2) + 1
Case 40 To 99
Compteurs(3) = Compteurs(3) + 1
Case Is < 40
Compteurs(4) = Compteurs(4) + 1
End Select
Next CptLig
Cells(15, CptCol).Value = Compteurs(1)
Cells(16, CptCol).Value = Compteurs(2)
Cells(17, CptCol).Value = Compteurs(3)
Cells(18, CptCol).Value = Compteurs(4)
Next CptCol
End Sub
Public Sub blabla_Avec1BoucleEtFormules()
Dim CptCol As Byte
For CptCol = 2 To 4
Cells(15, CptCol).FormulaR1C1 = "=COUNTIF(R2C:R12C,"">=200"")"
Cells(16, CptCol).FormulaR1C1 = "=SUMPRODUCT((R2C:R12C>=100)*(R2C:R12C<200)*1)"
Cells(17, CptCol).FormulaR1C1 = "=SUMPRODUCT((R2C:R12C>=40)*(R2C:R12C<100)*1)"
Cells(18, CptCol).FormulaR1C1 = "=COUNTIF(R2C:R12C,""<40"")"
Range(Cells(15, CptCol), Cells(18, CptCol)).Value = Range(Cells(15, CptCol), Cells(18, CptCol)).Value
Next CptCol
End Sub++
Wa se sont des tueries tes programmes !
Cependant il y a deux trois petites choses qui m'echappent.
Cette ligne permet de faire quoi :
ReDim Compteurs(1 To 4) As Integer
Ca initialise les compteurs ?
Et surtout je ne vois pas pourquoi toi il te sépare parfaitement bien les colonnes, c'est grace au case ? Parce que comme moi tu survoles tout le tableau "d'un coup".
Dans tous les cas un énorme merci, je vais encore potasser un peu ces deux codes pour mieux les comprendre.
Cette ligne permet de faire quoi :
ReDim Compteurs(1 To 4) As Integer
Ca initialise les compteurs ?
C'est ca.
Dans ton code, il y avait une inversion entre tes boucles de lignes et colonnes.
Tu parcourrais les colonnes par ligne et non les lignes par colonne.
de plus tu affichais la meme valeur pour chaque colonne.
Ton code corrige pour les valeur >=200:
Public Sub blabla()
Dim compt As Integer
For i = 2 To 4
compt = 0
For j = 2 To 12
If Cells(j, i).Value >= 200 Then
compt = compt + 1
End If
Next j
Cells(15, i).Value = compt
Next i
End Sub++
Encore une fois un gros merci ca marche au top même sur mon gros tableau !