tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

cathodique

XLDnaute Barbatruc
Bonjour,

Après maintes consultations de discussion, je ne suis pas parvenu à trouver une solution.

Je sollicite vos compétences pour y parvenir. Voilà, j'ai monté le fichier joint en le simplifiant considérablement.

Je voudrai faire une macro afin de faire un tableau récapitulatif à partir d'une BD (feuille "BD"),

sur cette feuille il y a 3 colonnes renseignées (A,B et C) en A il y a des intitulés en doublon et en C des valeurs.

La macro devra récupérer les intitulées sans doublons, les transférer sur la feuille txbord à partir de A2.

Puis dans les colonnes adjacentes, récupérer la moyenne de la colonne C pour le même intitulé,

ensuite le nombre de valeurs col C (NbVal "C") et la suivante Nb.Si col C (NB.BI "C").

J'ai commencé (sur mon fichier original) à le faire en utilisant les auto-filtres mais sans y parvenir.

Je sais que certain maitrise parfaitement les "Array". Est-ce possible de traiter ce problème avec les tableaux?

En vous remerciant beaucoup.

Cordialement,
 

Pièces jointes

  • Calcul lignes filtrées.xls
    52.5 KB · Affichages: 62
  • Calcul lignes filtrées.xls
    52.5 KB · Affichages: 57
  • Calcul lignes filtrées.xls
    52.5 KB · Affichages: 59

Efgé

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Bonjour à toutes et tous
Une version avec un dictionnaire de tableaux
VB:
Sub test()
Dim i&, J&, N&
Dim D As Object
Dim TData As Variant, TReport As Variant, C As Variant

Set D = CreateObject("Scripting.dictionary")

With Sheets("bd")
    TData = .Range(.Cells(2, 1), .Cells(.Rows.Count, 3).End(3))
End With

For i = LBound(TData, 1) To UBound(TData, 1)
    If TData(i, 3) < > "" Then
        N = (TData(i, 3) < = -600) * -1
        If Not IsArray(D(TData(i, 1))) Then
            D(TData(i, 1)) = Array(1, TData(i, 3), N)
        Else
            D(TData(i, 1)) = Array(D(TData(i, 1))(0) + 1, _
                                   D(TData(i, 1))(1) + TData(i, 3), _
                                   D(TData(i, 1))(2) + N)
        End If
    End If
Next i

ReDim TReport(1 To D.Count, 1 To 4)
For Each C In D.Keys
    J = J + 1
    TReport(J, 1) = C
    TReport(J, 2) = CLng(D(C)(1) / D(C)(0))
    TReport(J, 3) = D(C)(0)
    TReport(J, 4) = D(C)(2)
Next C

Sheets("txbord").Cells(2, 1).Resize(D.Count, UBound(TReport, 2)) = TReport
End Sub
Cordialement
 

Pièces jointes

  • Calcul_lignes(2).xlsm
    25.3 KB · Affichages: 51
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Mesdames, Mesdemoiselles,

Je commence par présenter mes excuses aux femmes. J'ai utilisé Messieurs pour répondre à Chris (à moins que c'est un genre féminin qui se cache derrière ce pseudo). Car il m'a fait le reproche, d'avoir posté sur un autre forum le même problème.

Je suis à la recherche d'une solution à adapter au fichier sur lequel je travaille actuellement. Vous venez de démontrer qu'à un problème peut être résolu de différentes façons.

J'ajoute une chose, que je finalise ce fichier ou pas peu importe, c'est pour mon plaisir personnel. Maintenant, que j'ai du temps, je me suis au vba.

Aujourd'hui, j'ai appris beaucoup de choses, les classes, les groupes, les sous groupes et vos fichiers que je n'ai pas encore consulté (galanterie oblige! je vous tiendrai au courant). J'ai appris entre autres qu'il y avait de fins limiers parmi nous.

Je vous remercie pour tout.

Cordialement,
 

MJ13

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Bonjour à tous

En général, pour voir si c'est un homme ou une femme, on clique sur le pseudo et en général, c'est indiqué, sinon, c'est sûrement un garçon :eek:.

On peut aussi dire par exemple merci Chris :) si on ne connaît pas le genre.

Bon, après, un forum, ce n'est pas un centre de formation, quoique :eek:.
 

Efgé

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Re à toutes, tous
Une dernière pour la route.
C'est la même optimisée:
VB:
Sub test()
Dim i&, n&, Nbr&, Moy&, NbSi&, Som&, X As Variant
Dim D As Object, Nom$, Tdata As Variant

Set D = CreateObject("Scripting.dictionary")

With Sheets("bd")
    Tdata = .Range(.Cells(2, 1), .Cells(.Rows.Count, 3).End(3))
End With

For i = LBound(Tdata, 1) To UBound(Tdata, 1)
    X = Tdata(i, 3)
    If X < > "" Then
        n = (X < = -600) * -1
        Nom = Tdata(i, 1)
        If Not IsArray(D(Nom)) Then
            D(Nom) = Array(Nom, X, 1, n, X)
        Else
            Nbr = D(Nom)(2) + 1
            Moy = CLng((D(Nom)(4) + X) / Nbr)
            NbSi = D(Nom)(3) + n
            Som = (D(Nom)(4) + X)
            D(Nom) = Array(Nom, Moy, Nbr, NbSi, Som)
        End If
    End If
Next i

Sheets("txbord").Cells(2, 1).Resize(D.Count, 4) = Application.Index(D.ITems, , 0)
End Sub
Cordialement
 

Pièces jointes

  • Calcul_lignes(3).xlsm
    24.7 KB · Affichages: 33
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Rebonjour,

Je reviens pour vous dire un grand bravo à vous tous. Voilà, encore une fois pour un même problème des approches différentes.

Laetitia90 , Efgé , Dranreb, tous mes remerciements vos codes donnent bien le résultat escompté.

Je vais essayer d'adapter l'un de vos codes à mon fichier original (celui que j'ai joint n'illustre qu'une partie du problème).

Si je ne parviens ou trouve des difficultés, je vous le soumettrai dans une autre discussion.

Pourriez-vous me dire, quel aurait été le code pour traiter ce problème, en effectuant des auto-filtres? Car c'est ainsi que j'avais abordé le problème. Récupérer via dictionary la colonne A, mise dans variable pour effectuer des auto filtres successifs. Mon problème majeur est comment désigné ou faire référence aux lignes visibles de la colonne concernée et utiliser la fonction "subtotal". En vous remerciant.

Bien à vous, Bravo et tous mes remerciements.

Cordialement,
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Re

Je ne suis pas très doué en tableau, désolé :eek:.

Mais avec un peu d'expérience, cela ressemble beaucoup aux extractions de bases de données :).

Après, il suffit de faire une petite macro pour copier avec for each cell in selection et le tour est joué. Tiens, cela ferait un bon TP :eek:.
 

Pièces jointes

  • Calcul lignes filtrées_MJ.xls
    69 KB · Affichages: 31

cathodique

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Bonjour MJ13,

Je te remercie beaucoup, mais désolé les TCD ne font pas mon affaire. Ce n'est pas bien de se moquer. Mais bon, les tp, td et même la carrière sont derrière moi. Je m'occupe comme je peux.

Pourquoi les TCD ne m'arrange, je ne manipule pas des sous ou des stocks. Je manipule des mesures électriques que j'extrais d'une bdd pour réaliser des récapitulatifs. Les données de ces récapitulaltifs sont extraites ou calculées à partir de valeurs de la bdd.

Moi aussi je ne maitrise pas les tableaux et c'est pour ainsi dire la raison qui m'a poussé à utiliser des auto-filtres, je suis parvenu à faire quelque chose mais étant limité en programmation, je bloque pour la suite.

J'ai monté ce fichier exemple pour au moins trouver un exemple à adapter à mon fichier. Sur mon fichier original, la bd est constituée de 27 colonnes et X lignes. J'ai donc simplifié au maximum mon problème.

Je doute qu'on m'aurait répondu si j'avais posé mon problème dans sa globalité. Une question des réponses mais pas des questions. et j'aurai récolté des bribes de code inexploitable par un novice comme moi.

Je sais que tu es un bon gars (oups! j'ai vérifié que t'es un garçon). Merci quand même de m'avoir répondu.

Cordialement,
 

MJ13

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Re

Mais je ne me moque pas, mais comme ce sujet est intéressant, j'essaie d'y contribuer :).

Après il faut toujours analyser un problème dans sa globalité et je trouvais intéressant de pouvoir utiliser les formules de BD. Le TCD ne sert qu'à vérifier ce qui est vérifiable.

Voici la version 2 avec la macro for each cell. Par contre j'ai pas trouvé pour copier directement avec Copy source destination en valeur en une seule ligne (pourtant, il me semblait l'avoir déjà fait :eek:).
 

Pièces jointes

  • Calcul lignes filtrées_MJ2.xls
    80 KB · Affichages: 39

cathodique

XLDnaute Barbatruc
[RESOLU] : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Re MJ13,

Mais je ne me moque pas, mais comme ce sujet est intéressant, j'essaie d'y contribuer .
Plus que tu trouves le sujet intéressant, je vais clore cette discussion. Et ouvrir une autre, avec cette fois-ci le problème dans son ensemble. Je sais que ça va faire râler certains.

Mais de grâce ne me parler plus des TCD (du moins pour ce problème), déjà pour le nombre de cellules dont la valeur est inférieure ou égale à -600 est fausse et je ne veux rajouter aucune autre feuille dans mon fichier.

Bon alors le Rendez-vous est pris pour la prochaine discussion.

Merci et à bientôt.

Cordialement,
 

Misange

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Bon alors le coup de grace quand même :)
Les TCD ce n'est pas un outil de torture ! le mot est repoussant je te l'accorde mais franchement tu as ta réponse en quelques clics de souris.
J'ai fait une série de tutos (que je suis en train de reprendre complètement mais ce sera pour dans quelques lurettes car c'est vraiment difficile de sélectionner ce qui doit être dedans ou pas) sur ce sujet justement pour ceux qui n'ont jamais osé se lancer dans la création d'un TCD.
Ce lien n'existe plus

J'ai vu beaucoup de gens dire "tout sauf les TCD" et puis changer complètement d'avis après avoir vraiment manipulé eux même cette bête sauvage. Ce n'est pas un outil pour les super doués d'excel c'est tout le contraire ! Au lieu de passer des plombes à pondre une macro qui est bien plus longue qu'un TCD, et qui sera à refaire le jour où tu auras envie de déplacer ton tableau de résultat, tu as un outil puissant et souple.

Je connais un monsieur de 85 ans à qui j'ai montré ça et qui depuis fait tous ses comptes bancaires par catégorie, date... avec ça. Il n'y a aps d'age pour apprendre, surtout quand l'outil est bien fait.

Idem avec les formules. On peut calculer plein de trucs sur des BDD avec des formules, notamment avec des sommeprod. Et puis quand la bdd augmente ça commence à ramer à ramer à ramer et un jour on se retrouve... sur le sable ! Si c'est en Polynésie c'est bien on peu au moins profiter du paysage tu me diras.

Sinon pour la petite histoire, Chris aussi c'est une femme (et Misange également, et Laetitia aussi mais ça tu t'en serais douté je pense).

Essaie... tu ne regretteras pas l'investissement :)
 

cathodique

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Re, Misange

je te remercie de m'encourager à plonger dans les TCD, ça ne me répugne pas:eek:, pas sur ce fichier je suis trop avancé pour faire marche arrière. Comme je l'ai dit à MJ13, je vais ouvrir une discussion dans laquelle je vais exposé mon problème dans son ensemble.

Merci encore pour ta gentillesse.

Bonne soirée.

Cordialement,
 

Staple1600

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Bonsoir à tous

Mais ce que je ne comprends aujourd'hui, c'est qu'en quelque sorte on me reproche de poser le même problème sur des forums différents. Est-ce interdit?
cathodique
Ce n'est pas interdit mais l'usage veut on signale (avec un lien vers l'autre forum) que la question est posée à plusieurs endroits.

pour comprendre d'ou vient cet usage:
https://groups.google.com/forum/#!topic/fr.comp.usenet.lecteurs-de-news/6ybHdqblf8w

PS: Misange, ton avatar n'indique pas que tu sois femme ;)
Pour chris , un papillon et une fleur, comment savoir ? ;)
Pour Laetitia, effectivement là normalement c'est explicite ;)
 

cathodique

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Bonsoir Staple1600,

Ne m'en veuillez pas trop, je ne suis pas au courant de tous les usages. Étant donné, que j'ai clôturé cette discussion dans laquelle, je n'ai posé mon problème qu'en partie, donc ce n'est pas exactement la même chose.

J'ai ouvert une autre dans laquelle j'ai exposé mon problème dans son ensemble. Je vais mettre le lien sur cette dernière.

J'ai bien lu compris de quoi il s'agit. Merci beaucoup pour l'info.

Bonne soirée.

Cordialement,
 

Misange

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Bonsoir à tous


cathodique
Ce n'est pas interdit mais l'usage veut on signale (avec un lien vers l'autre forum) que la question est posée à plusieurs endroits.

pour comprendre d'ou vient cet usage:
https://groups.google.com/forum/#!topic/fr.comp.usenet.lecteurs-de-news/6ybHdqblf8w

PS: Misange, ton avatar n'indique pas que tu sois femme ;)
Pour chris , un papillon et une fleur, comment savoir ? ;)
Pour Laetitia, effectivement là normalement c'est explicite ;)

Et UNE agrafe alors ? :) Même 1600 agrafes, ca fait un troupeau d'agrafes mais ça reste toujours féminin :p
M'enfin ! :D
MAis face à des pseudos ambigus, sur un forum traitant de bébés on imagine facilement s'adresser à une femme, et sur un forum informatique à un homme :(
 

Staple1600

XLDnaute Barbatruc
Re : tableau récap (moyenne, nbval, nbsi) avec autofiltre ou array

Re

Misange
Je ne voudrais pas relancer la guerre de la théorie du genre ;)
Mais on dit un tableur ;)
Ah mais on dit une macro
Certes mais un bug !
Pfff , et une formule, nah !
Bref tous les fous de la Cellule Sacrée peuvent tâter la Grande Grille Celeste plus de 65536 fois, et peu importe leurs chromosomes. ;)

PS: chez mes amis d'outre-atlantique, c'est masculin l'agrafeuse ;)

cathodique:
Il ne s'agit pas de t'en vouloir.
Tu te posais une question. J'ai juste éclairer ta lanterne tout en taquinant innocemment la gent féminine. ;)