comptage de données...

  • Initiateur de la discussion Enfazz
  • Date de début
E

Enfazz

Guest
Bonjour à tout le forum !!

Voilà, j'ai deux feuilles la première feuille à ce format par exemple la:

Id Nom Codeinc
----------------------------
001 Dupont 802
002 Dufour 211
...
...

la seconde table à ce format ci , elle contient la description des codeinc.
Dans cette table chaque donnée est unique.

Codeinc Libellé
----------------------------
211 Vomissement
...
802 Fracture


Je voudrais, grâce à du code VBA, savoir combien il y a eu d'incidents 211 ou 744 etc... à partir de ma table principale(la première). J'ai essayé plein de trucs mais rien de concluant. Pourtant ça semble facile comme ça ms je galère....Il faut savoir qu'il y a plus de 4000 incidents donc j'essais de trouver un moyen pour ne pas avoir à les traiter un par un........

g essayé des trucs dans ce genre mais mes boucles trippent, démarrent à 144 etc... bref je suis largué.

Sub occur(ligne as Integer)
cpt=0
'Recherche ds la table 1
For Each c In Worksheets(1).Range("Q2:Q340").Cells
'Recherche ds table 2
For each cel In Worksheets(2).Range("A" & ligne).Cells
If cel=c Then
cpt=cpt+1
End if
Next cel
Next c
End Sub


Sub Macro()
Dim i as Integer
For i=2 to 4325
occur(i)
Next i
End Sub

Si quelqu'un a une soluce....
Merci d'avance.
 
D

Dugenou

Guest
Salut Enfazz,

Je ne sais pas pourquoi tu tiens à une solution en code vba car il y en a une sans : le tableau croisé dynamique; ensuite pour traduire les évènement : un recherchev : voir fichier joint

Tcho
 

Pièces jointes

  • pour_Enfazz.zip
    2.8 KB · Affichages: 14
M

mDF

Guest
Bonsoir Enfazz,

Dans VBA, tu peux transférer les 2 listes dans des tableaux variant avant d'effectuer le comptage (c'est plus rapide et plus facile pour les tests).

Je te joins un exemple qui pourra peut-être t'aider.

Cordialement.
Didier
 

Pièces jointes

  • Comptage.zip
    11.5 KB · Affichages: 16
  • Comptage.zip
    11.5 KB · Affichages: 16
  • Comptage.zip
    11.5 KB · Affichages: 16
M

Moa

Guest
Salut les gars

Bien ta macro mDF, cependant, si les listes de base s'allongent, il sera, alors, obligé de modifier la macro à chaque fois.

Alors pourquoi ne pas prévoir ce cas de suite, en rendant variable les plages
des listes, tel que :

Private Sub btnComptage_Click()
Dim TabFeuil1 As Variant
Dim TabCompte As Variant
Dim L1 As Integer
Dim L2 As Integer
Dim i1
Dim i2
i1 = Sheets(1).Range("A2").End(xlDown).Row
i2 = Sheets(2).Range("A2").End(xlDown).Row

TabFeuil1 = Sheets(1).Range("A2" & ":C" & i1).Value
TabCompte = Sheets(2).Range("A2" & ":C" & i2).Value
For L2 = 1 To i2 - 1
For L1 = 1 To i1 - 1
If TabCompte(L2, 1) = TabFeuil1(L1, 3) Then
TabCompte(L2, 3) = TabCompte(L2, 3) + 1
End If
Next L1
Next L2

Sheets(3).Range("A2" & ":C" & i2).ClearContents
Sheets(3).Range("A2" & ":C" & i2).Value = TabCompte
End Sub


le " -1", c'est parce que les listes commencent à la ligne 2

For L2 = 1 To i2 - 1
For L1 = 1 To i1 - 1


Et si les listes sont susceptibles de contenir des lignes vides, remplacer :

i1 = Sheets(1).Range("A2").End(xlDown).Row
i2 = Sheets(2).Range("A2").End(xlDown).Row

Par :

i1 = Sheets(1).Range("A65535").End(xlUp).Row
i2 = Sheets(2).Range("A65535").End(xlUp).Row



@ +

Bonne journée à vous !

Moa
 
M

Moa

Guest
Salut Enfazz !

Je viens de tester plusieurs fois et je n'ai pas de problème de compteur, ni de plage.

Tes listes commencent-elles bien en ligne 2.

Je regarderai plus en profondeur dès demain, quand-même.

@ +

Moa
 

Discussions similaires

Statistiques des forums

Discussions
312 231
Messages
2 086 440
Membres
103 209
dernier inscrit
MIKA33260