Sous-total dans un userform

avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 - 18 juin 2007 à 01:04
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 18 juin 2007 à 03:03
Bonjour à tous,
je cherche à avoir le sous total d'une colone ("R") selon la valeur du TextBox1 et / ou TextBox2 et / ou TextBox3 et cela, sans avoir à placer un filtre dans ma feuille excel comme dans le script que j'ai en se moment. TextBox1 données dans la colone W , TextBox2 colone X et TextBox3 = Y
<hr size ="2" width="100%" />
Private Sub CommandButton1_Click()
Range("W2:Y65536").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:=TextBox1.Text
    Selection.AutoFilter Field:=2, Criteria1:=TextBox2.Text
    Selection.AutoFilter Field:=3, Criteria1:=TextBox3.Text
    TextBox5.Value = Range("R1")
End Sub
<hr size="2" width="100%" />Range ("R1") = à la celule qui contient la formule: =SOUS.TOTAL(9,R11:R65536).

Je ne veux pas de formule dans la feuille pour éviter que la feuille soit trop lourd pour rien.

Comment y parvenir sans filtres et sans formule dans la feuille?

Merci

3 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
18 juin 2007 à 02:02
Je ne vois la raison d'utiliser un SOUS-total sachant que tu ne filtres pas la feuille. Une simple somme devrait suffire, non ?
Et je ne comprends pas les conditions des textbox 1, 2 et/ou 3

Pour avoir la somme de la colonne W, essaie ceci
textbox1 = [Sum(W1:W65536)]

MPi
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
18 juin 2007 à 02:09
Salut MPI,

La raison est que dans le TextBox1,2 et 3, je met des valeurs.

Exemple:
TextBox1 = 56      'période (colone W)
TextBox2 = 2        'semaine (colone X)
TextBox3 = 2007   'année (colone Y)

et la, il calcul les valeurs qui correspond selond ses valeurs dans les textbox.

ps: les valeurs sons dans la colone R.

La valeur de la colone R selon les spécifications des 3 autres texbox dois aller dans le texbox 4.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
18 juin 2007 à 03:03
Change les valeurs des Range au besoin. L'important avec SommeProd, c'est que les plages soient "identiques"... Elles doivent commencer à la même ligne et finir à la même ligne.

    TextBox4 = [SumProduct((W1:W65535=56)*(X1:X65535=2)*(Y1:Y65535=2007)*(R1:R65535))]

explication: si W 56 et X 2 et Y = 2007, alors la somme de R

Mais comme tu as besoin de variables qui sont les textbox, tu pourrais créer une formule dans une cellule, le temps d'alimenter ta textbox puis effacer cette formule encombrante
    Range("R65536").Formula = "=SumProduct" & _
                            "((W1:W65530=" & TextBox1 & ")" & _
                            "*(X1:X65530=" & TextBox2 & ")" & _
                            "*(Y1:Y65530=" & TextBox3 & ")" & _
                            "*(R1:R65530))"
    TextBox4 = Range("R65536")
    Range("R65536") = ""

Une autre méthode serait d'utiliser une colonne vide et concaténer les 3 valeurs des colonnes W, X et Y
Disons, en Z1, tu mets
=W1 & X1 & Y1
et tu copies cette formule jusqu'en bas.
Ensuite, il ne te reste qu'à faire un SOMME.SI

MPi
0