Calculer le nombre de mêmes références par rapport à 1 cél

Bonjour à tous,

J'ai des données situées dans une zone (ex En E80, comptabiliser combien de fois apparait la donnée qui est en cellule D80 dans la zone D3:E77) sachant que c'est seulement une partie des données de D3:E77

Ci-dessous, je dois comptabiliser sur la donnée 340 sans tenir compte du reste.

POS: 01

1D+1C+1R N° Sch:340

Un petit fichier qui expliquera peut être mieux mon besoin.

Merci pour votre précieuse aide

@+

Robert

Bonjour,

en C80, pour comptabiliser combien de fois apparait la donnée qui est en céllule B80 dans la zone B3:C77 :

=NB.SI($B$3:$B$77;"*" & $B80 & "*")

En E80, pour comptabiliser combien de fois apparait la donnée qui est en céllule D80 dans la zone D3:E77

=NB.SI($D$3:$D$77;"*" & $D80 & "*")

A+

Bonjour Frangy,

Merci pour votre aide qui fonctionne très bien.

Maintenant, les choses se compliquent, car je doit adapter tout cela en VBA

Copier les formules en C, E, G, I etc...

si

B, D, F etc... sont renseignés en regardant sur la plage B80: CZ91

@+

Robert

Effectivement, je n'avais pas compris que tu souhaitais créer la formule avec VBA.

Voici une proposition avec une fonction personnalisée (NombreCablage dans Module 1).

A+

Merci beaucoup pour votre aide.

Pouvez vous m'expliquer le fonctionnement, car j'ai intégré la fonction dans mon fichier final et ça ne fonctionne pas.

Comment vient se placer la formule par exemple en C80 ?

Dans mon fichier final, ça ne s'arrête pas en colonne E, je vais jusqu'en BY et c'est très aléatoire.

@+

Robert

Voici le code commenté pour t'aider à comprendre cette fonction :

Function NombreCablage(Cel As Range) As Integer
Dim Plage As Range
    'La fonction est marquée volatile pour permettre le recalcul chaque fois _
    qu'un calcul est effectué dans une cellule quelconque de la feuille de calcul
    Application.Volatile
    'La plage dans laquelle est effectué le comptage des cellules correpondant au critère recherché _
    est délimitée par la colonne de Cel (N° cablage), la ligne de début (3) et la hauteur de plage (75)
    Set Plage = Cells(3, Cel.Column).Resize(75)
    'Comptage
    NombreCablage = Application.CountIf(Plage, "*" & Cel.Value & "*")
End Function

Le nombre de colonnes importe peu puisque la recherche est effectuée en prenant pour référence la cellule Cel (paramètre de la fonction).

Exemples :

  • lorsque Cel est B80, la plage de recherche est B3:B77,
  • lorsque Cel est D80, la plage de recherche est D3:D77,
  • lorsque Cel sera BX80, la plage de recherche sera BX3:D77.

A+

Cela signifie qu'il est nécessaire de renseigner les formules manuellement ?

Actuellement, j'essai de faire une recherche par boucle sur la zone B80, CZ91 pour regarder toutes les deux colonnes à commencer par B s'il y a des données, et si oui, renseigner les formules à partir de C

Le problème est que je ne suis pas assez pointu en VBA pour y parvenir

@+

Il n'est pas nécessaire de renseigner les formules manuellement.

Tu peux renseigner C80, tirer la formule sur C80:C91 puis copier la plage C80:C91 et coller cette plage sur E80:E91, G80:G91, etc jusqu'à CY80:CY91.

Par contre, pour prendre en compte le cas où la cellule du n° cablage est vide, tu devra adapter la fonction :

Function NombreCablage(Cel As Range) As Variant
Dim Plage As Range
    Application.Volatile
    Set Plage = Cells(3, Cel.Column).Resize(75)
    If Cel <> "" Then
        NombreCablage = Application.CountIf(Plage, "*" & Cel.Value & "*")
    Else
        NombreCablage = ""
    End If
End Function

A+

C'est ce que je viens de faire manuellement, mais sur 52 colonnes, c'est plus que pénible et le nombre de colonnes n'est jamais le même.

Je vais essayer de boucler en regardant si toutes les 2 colonnes, de B80 à B91 sont différentes de rien et mettre les formules par plages de 12 lignes

Merci beaucoup

@+

Si tu préfères une macro qui traite la totalité des colonnes :

Sub NombreCablage()
Dim DerCol As Integer, Col As Integer, Lig As Integer
Dim Plage As Range
    With Worksheets("Tab_Cell")
        DerCol = .Cells(3, Columns.Count).End(xlToLeft).Column + 1
        For Col = 3 To DerCol Step 2
            For Lig = 80 To 91
                Set Plage = .Range(.Cells(3, Col - 1), .Cells(77, Col - 1))
                If .Cells(Lig, Col - 1) <> "" Then
                    .Cells(Lig, Col).Formula = "=COUNTIF(" & Plage.Address & ",""*"" & " & .Cells(Lig, Col - 1).Address(1, 0) & " & ""*"")"
                Else
                    .Cells(Lig, Col) = ""
                End If
            Next Lig
        Next Col
    End With
End Sub

A+

Bonjour,

Tout fonctionne parfaitement bien. un GRAND MERCI pour votre aide précieuse.

@+

Robert

Rechercher des sujets similaires à "calculer nombre memes references rapport cel"