Savoir compter

Bonjour

je cherche à compter des mots sur une feuille (2) tous référencés par un indice sur une autre feuille(1)... je voudrais que le résultat soit celui de l'indice est non des mots de la page... j'espère avoir été presque clair... je vous joint un fichier test...

merci d'avance pour votre aide précieuse.

10test.xlsx (9.48 Ko)

Bonjour à tous,

Un essai :

10test.xlsx (10.44 Ko)

Crdlmt

et bien c'est juste parfait !

merci beaucoup...

Bonjour Dam, bonjour le forum,

Peut-être comme ça :

Sub Macro1()
Dim PL As Range
Dim TA(1 To 3)
Dim CEL As Range
Dim TV As Variant

TV = Sheets("Feuil1").Range("C5").CurrentRegion
Set PL = Sheets("Feuil2").Range("C6:G19")
For Each CEL In PL
    If CEL.Value <> "" Then
        For J = 2 To UBound(TV, 1)
            If TV(J, 2) = CEL.Value Then
                TA(Right(TV(J, 1), 1)) = TA(Right(TV(J, 1), 1)) + 1
                Exit For
            End If
        Next J
    End If
Next CEL
Sheets("Feuil2").Cells(6, 10).Value = TA(1)
Sheets("Feuil2").Cells(7, 10).Value = TA(2)
Sheets("Feuil2").Cells(8, 10).Value = TA(3)
End Sub

[Édition]

Bonjour Djidji, nos posts se sont croisés...

ah oui !! c'est parfait aussi !

merci merci

Bonjour TauThème

j'ai décidé d'utiliser ta macro, merci beaucoup.

pourrais-tu m'aider à l'affiner : mon tableau comporte entre autres 52 feuilles nommées de s1 à s52 (1 par semaine).

j'aurais donc voulu que la macro me fasse le calcul pour la zone de c10 ; p17 de chaque feuille et m'inscrive le résultat de chaque feuille sur une autre appelée TA.

il y a surement une adaptation de ta macro à afire... mais là je me sens très incompétent

merci d'avance

je te joins ce que j'ai bidouillé à partir de ta macro

Private Sub Worksheet_Activate() 'CommandButton1_Click()

Dim PL As Range

Dim TA(1 To 41)

Dim CEL As Range

Dim TV As Variant

TV = Sheets("Listes").Range("a4").CurrentRegion

Set PL = Sheets("s1").Range("C10:P17")

For Each CEL In PL

If CEL.Value <> "" Then

For J = 2 To UBound(TV, 1)

If TV(J, 2) = CEL.Value Then

TA(Right(TV(J, 1), 1)) = TA(Right(TV(J, 1), 1)) + 1

Exit For

End If

Next J

End If

Next CEL

Sheets("TB").Cells(4, 4).Value = TA(1) / 2

Sheets("TB").Cells(5, 4).Value = TA(2) / 2

Sheets("TB").Cells(6, 4).Value = TA(3) / 2

Sheets("TB").Cells(7, 4).Value = TA(9) / 2

End Sub

Re,

Sans fichier c'est pas évident ! Peut-être comme ça :

Sub Macro1()
Dim TV As Variant
Dim I As Integer
Dim J As Integer
Dim PL As Range
Dim TA(1 To 41) As Variant
Dim CEL As Range

TV = Sheets("Listes").Range("A4").CurrentRegion
For I = 1 To 52
    Set PL = Worksheets("s" & I).Range("C10:P17")
    For Each CEL In PL
        If CEL.Value <> "" Then
            For J = 2 To UBound(TV, 1)
                If TV(J, 2) = CEL.Value Then
                    Select Case Len(TV(J, 1))
                        Case 2
                            TA(Right(TV(J, 1), 1)) = TA(Right(TV(J, 1), 1)) + 1
                        Case 3
                            TA(Right(TV(J, 1), 2)) = TA(Right(TV(J, 1), 2)) + 1
                    End Select
                    Exit For
                End If
            Next J
        End If
    Next CEL
Next O
For I = 1 To 41
    Sheets("TB").Cells(3 + I, 4).Value = Sheets("TB").Cells(3 + I, 4).Value + (TA(I) / 2)
Next I
MsgBox "Données traitées !"
End Sub

oui tu as raison ThauThème, je ne suis pas très sympa . Voici le fichier, j'ai essayé ta proposition en vain...

merci encore pour ton aide précieuse.

5test.xlsm (286.34 Ko)

ThauThème, si tu peux écrire des commentaires dans la macro... histoire que j'essaye de comprendre la syntaxe... merci merci

Re,

Je ne comprends pas pourquoi tu as redéfini TA de 1 à 41. Il faut donc prévoir une ligne pour chaque TA. Le fichier avec le code commenté.

6dam-ep-v01.xlsm (288.73 Ko)

bonsoir

j'avais redéfini TA en faisant des tests, mais du coup comme il m'en faut que 15, à l'aide tes commentaires je l'ai ajusté.

ça marche parfaitement et répond pleinement à mes besoins.

ThauThème je te suis très reconnaissant,1000 mercis.

Rechercher des sujets similaires à "savoir compter"