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.

13libro1.zip (7.30 Ko)

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 !

Rechercher des sujets similaires à "calcul colonnes categories"