effectuer des regroupement et des comptes (Excel VBA)

poizer

XLDnaute Nouveau
Bonjour a tous,
Je suis debutant en Excel VBA et mon pb est peut etre simple pour vous :
je veux effectuer dans une nouvelle feuille des regroupements sur plusieurs colonnes (ex : SECTION et SEXE) et en meme temps faire un comptage en utlisant Excel VBA (voir l'exemple + resultat ci-dessous ou le fichier testCopie.xls attaché (Feuil1 et Feuil2) ).
Merci d'avance

le fichier exemple :
[codetu] [NOM] [SEXE] [Ville] [SECTION]
120 Aaaaaaa M ERRACHIDIA SMAS5
142 Bbbbbbb M KHENIFRA SMPS3/S5
214 Ccccccccc M MEKNES SMPS5
220 Dddddddd F MEKNES SMPS3/S5
285 Iiiiiiiii F SMPS3/S5
322 Kkkkkk M ERRACHIDIA LPAPCES5
331 LLLLL M MEKNES LPAPCES5
518 zzzzzzz M MEKNES SMAS5
524 ttttttt F MEKNES SMAS5
528 qqqqqqq M MEKNES SMAS5
545 vvvvv M ERRACHIDIA SMIAS1/S3
557 oooo M MEKNES SMAS3/S5
570 ssss F MEKNES SMIAS1/S3


le fichier resultat :

[SECTION] [ nb total d'etudiants] [nb total de filles]
LPAPCES5 2 0
SMAS3/S5 1 0
SMAS5 4 1
SMIAS1/S3 2 1
SMPS3/S5 3 2
SMPS5 1 0
 

Pièces jointes

  • testCopie.xls
    17.5 KB · Affichages: 75
  • testCopie.xls
    17.5 KB · Affichages: 87
  • testCopie.xls
    17.5 KB · Affichages: 94
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : effectuer des regroupement et des comptes (Excel VBA)

RE

Alors mon ami
Toujours des données confidentielles dans ton premier message ;)

PS: Le week-end en général, le forum est moins fréquenté. Sois patient.

Juste pour savoir:
Qu'est ce qui ne fonctionne pas dans les différentes propositions qui ont déjà été faites dans ce fil ?
 

Staple1600

XLDnaute Barbatruc
Re : effectuer des regroupement et des comptes (Excel VBA)

Re


Commence par répondre aux questions qu'on te pose
(la mienne par exemple : celle de mon précédent message)

PS: Qu'attends-tu pour anonymiser ton premier message ?
Le patronyme d'une personne est confidentiel non ?
Sinon pourquoi avoir pris le soin d'anonymiser dans l'autre fil?

EDITION: Bonsoir JCGL
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : effectuer des regroupement et des comptes (Excel VBA)

Bonjour à tous,

Tout comme toi, je persiste...

Un essai par TCD prévu pour 1 000 000 de lignes

A + à tous
 

Pièces jointes

  • JC TCD Etudiants.xlsx
    312.7 KB · Affichages: 67

Excel-lent

XLDnaute Barbatruc
Re : effectuer des regroupement et des comptes (Excel VBA)

Hello tous le monde,

Staple1600 à dit:
Juste pour savoir:
Qu'est ce qui ne fonctionne pas dans les différentes propositions qui ont déjà été faites dans ce fil ?

Staple1600, en faite il veut ABSOLUMENT une réponse en VBA.

Or on lui a proposé pour l'instant deux solutions, mais aucune en VBA.

Pour ma part, je suis juste de passage. Je ne pourrais lui donner une réponse "en VBA" qu'en toute fin de soirée.

Poizer,
Pour obtenir des réponses plus rapidement, l'idéal est de répondre aux questions qu'on te pose ;) En particulier celles de STAPLE1600
C'est pas pour t'emmerd... c'est pour mieux comprendre tes besoins et tes contraintes, pour ainsi pouvoir te proposer la solution la plus optimum.

De plus, lorsque la personne nous indique ces compétences en Excel, cela nous permet d'adapter notre réponse à son niveau de connaissance :
-> soit en proposant une réponse plus complexe
-> et/ou en détaillant plus ou moins notre réponse

Ainsi, cela t'aideras à mieux comprendre la réponse, et plus tard être à même de la ré-utiliser et/ou la conseiller à un autre internaute.

Pour information :
1/ STAPLE1600 maîtrise bien le VBA et il semblait dispo cette après midi. Donc si tu avais répondu à ces questions, à l'heure actuel tu aurais peut-être déjà eu ta réponse ;)

2/ tout le monde est ici bénévole ("questionneurs" et "répondeurs"). Donc le temps qu'ils passent ici, c'est en plus de leurs vie professionnel et vie personnel. Donc parfois il faut attendre 1 jour pour obtenir une réponse (selon la complexité de ta question, et l'heure de "dépose" de ta question). Et encore c'est rapide. Sur certains forum "excel", bon nombre de questions restent sans réponse. Alors qu'ici c'est très rare.

PS. : comme déjà indiqué, a première vue mes maigres connaissances en VBA devrait me permettre de pouvoir te donner une réponse en VBA (à partir de ton premier fichier - car j'ai excel 2003 et ton second fichier est au format 2007-2010). Mais pas avant 1H00 du mat'.

A touteeeeee
 

JCGL

XLDnaute Barbatruc
Re : effectuer des regroupement et des comptes (Excel VBA)

Bonjour à tous,

Un essai en trichant : des formules (prévues pour 10 000 lignes) et un Coller Spécial Valeur

Des Sections peuvent être rajoutées...

VB:
Option Explicit

Sub Récap()
    Dim DerL%, Total%

    DerL = Range("A65536").End(xlUp).Row - 1
    Total = DerL + 1

    Range("B3:I" & Total).ClearContents

    Application.ScreenUpdating = 0

    Range("B3:B" & DerL).Formula = "=SUM(RC[1]:RC[3])"
    Range("C3:C" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=1))"
    Range("D3:D" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=2))"
    Range("E3:E" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=3))"
    Range("F3:F" & DerL).Formula = "=SUM(RC[1]:RC[3])"
    Range("G3:G" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=1)*(Feuil1!R2C3:R10000C3=""F""))"
    Range("H3:H" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=2)*(Feuil1!R2C3:R10000C3=""F""))"
    Range("I3:I" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=3)*(Feuil1!R2C3:R10000C3=""F""))"
    Range("B" & Total & ":I" & Total).Formula = "=SUM(R[-32]C:R[-1]C)"
    Cells.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    Range("A1").Select

    Application.ScreenUpdating = 1

End Sub

A + à tous
 

Pièces jointes

  • JC Récap.xls
    737.5 KB · Affichages: 37
  • JC Récap.xls
    737.5 KB · Affichages: 35
  • JC Récap.xls
    737.5 KB · Affichages: 56
  • JC Récap.xlsm
    265.6 KB · Affichages: 39
  • JC Récap.xlsm
    265.6 KB · Affichages: 46
  • JC Récap.xlsm
    265.6 KB · Affichages: 47

poizer

XLDnaute Nouveau
Re : effectuer des regroupement et des comptes (Excel VBA)

Bonsoir,
Je sais que je vous ai embete par mes questions. Merci comme meme pr le temps que vous nous consacrez pour repondre.
Staple1600 n'a pas posé une question precise.
Moi je cherche une une solution en VBA car j'ai une 50 ennes de pages contenant des statisitiques que je dois extraire du fichier de base. et pour ne pas vous embete je vous ai donne juste un exemple et moi je vais generaliser ca par la suite.
Dans fich2.xlsx j'ai donné un extait de la BD dans la feuille1 et le resultat souhaite dans la feuille2
Merci et desole pr le derangement
 

Pièces jointes

  • fich2.xlsx
    231 KB · Affichages: 45
  • fich2.xlsx
    231 KB · Affichages: 41
  • fich2.xlsx
    231 KB · Affichages: 51

ChTi160

XLDnaute Barbatruc
Re : effectuer des regroupement et des comptes (Excel VBA)

Bonsoir poizer
Bonsoir le Fil
Bonsoir le forum

juste pour me permettre de Saluer JC

une adaptation de son code Lol

Code:
Sub Récap()
    Dim DerL%, Total%
 Application.ScreenUpdating = False
 Application.Calculation = xlCalculationManual

With Worksheets("Feuil2")

DerL = .Range("A65536").End(xlUp).Row - 1
              Total = DerL + 1
    .Range("B3:I" & Total).ClearContents
    .Range("C3:C" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=1))"
    .Range("D3:D" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=2))"
    .Range("E3:E" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=3))"
    .Range("G3:G" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=1)*(Feuil1!R2C3:R10000C3=""F""))"
    .Range("H3:H" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=2)*(Feuil1!R2C3:R10000C3=""F""))"
    .Range("I3:I" & DerL).Formula = "=SUMPRODUCT((Feuil1!R2C6:R10000C6=RC1)*(Feuil1!R2C5:R10000C5=3)*(Feuil1!R2C3:R10000C3=""F""))"
    .Range("B3:B" & DerL).Formula = "=SUM(RC[1]:RC[3])"
    .Range("B" & Total & ":I" & Total).Formula = "=SUM(R[-32]C:R[-1]C)"
    .Range("F3:F" & DerL).Formula = "=SUM(RC[1]:RC[3])"
    .Range("B3:I" & Total).Value = .Range("B3:I" & Total).Value
End With
   Application.Calculation = xlCalculationAutomatic
   Application.ScreenUpdating = True
End Sub
Bonne fin de Soirée
Amicalement
Jean marie
 

Excel-lent

XLDnaute Barbatruc
Re : effectuer des regroupement et des comptes (Excel VBA)

Salut Poizer,

Me revoilà!

poizer à dit:
(...) et pour ne pas vous embete je vous ai donne juste un exemple et moi je vais generaliser ca par la suite.
Dans fich2.xlsx j'ai donné un extait de la BD dans la feuille1 et le resultat souhaite dans la feuille2
Merci et desole pr le derangement (...)

T’inquiète pas Poizer, tu nous dérange pas du tout ;)
Si l'on vient ici, c'est de notre propre chef, pour aider ceux qu'on peut avec nos maigres connaissances. Tu n'as donc pas à t'excuser de prendre de notre temps. C'est de bon cœur qu'on t'en fait profiter (et purement désintéressé).

De plus c'est tout à ton honneur de vouloir généraliser la solution à ton problème. Cela te permettra de voir si tu as compris la réponse, et ainsi pouvoir la faire tienne.

Je vois que tu as obtenu des solutions en VBA. Donc plus besoin de moi?

Pour information, tu as deux solutions via le VBA :
-> demander à ta macro d'écrire automatiquement les formules qui vont bien (comme fait par la macro de JCGL)
-> demander à ta macro d'écrire automatiquement le résultat.

Première solution :
* Avantage
Tu peux voir les formules sur ta feuille excel, donc voit d'un simple coup d’œil comment est obtenu le résultat dans la cellule...
A chaque modification dans ta base de donnée, le résultat sera actualisé automatiquement (sauf si tu rajoute des lignes - auquel cas il faudra relancer la macro).
* Inconvénient
Comme pour la solution que je t'ai proposé au tout début, la macro utilise la fonction SOMMEPROD() TRES GOURMANDE en ressource. Concrètement, si tu as environ 3-500 formules SOMMEPROD(), à chaque fois que tu modifiera ta base de donnée, Excel se figera environ 3 secondes à chaque fois. Donc si tu as plusieurs milliers de lignes, il faudra soit t'armer de patience, soit enlever le "calcul automatique (avec tous les problèmes qui en découlent : oubli de rafraichissement avant "impression", ...).

Deuxième solution :
* Avantage
Aucun délais d'attente, chaque fois que tu modifiera tes données.
* Inconvénient
Tu ne verras pas les formules, donc l'internaute moyen ne saura pas comment tu arrive à ce résultat (mais est-ce important?)
Les résultats se mettrons à jours que lorsque tu lancera la macro, donc si tu oubli de la lancer avant d'imprimer/utiliser/analyser ton tableau "résultat", tu ferras fausse route.

Bon WE
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal