Macro / Comparaison ligne à ligne

Bonjour,

Je viens solliciter votre aide, je cherche à faire une macro (15000 lignes au moins de fichier) pour venir tester que pour les mêmes valeurs de cellule B , la valeur en C corresponde. Dans mon exemple ligne 2 à 5 c'est bon et ligne 6 à 10 c'est pas bon.
Je souhaiterais un Ok Nok en colonne D. J'espère être claire

Voici un exemple dessous

http://cjoint.com/?0BAqDNSmt2P

Merci d'avance,

2 réponses

  1. Bonjour,

    Pourquoi ce serait OK sur les lignes 2 à 5 ? B2=B3=B4=B5 mais on n'a pas C2=C3=C4=C5...
    En D2 tu peux mettre la formule :
    =IF(COUNTIF(B:B;B2)=SUMPRODUCT((B:B=B2)*(C:C=C2));"OK";"NOK")

    En français : IF=SI COUNTIF=NB.SI SUMPRODUCT=SOMMEPROD.

    A+
    1. Au temps pour moi, j'ai mis la première version :$.

      C2 est bien égale à C3 C4 C5 dans le bon fichier.

      Et je souhaite utiliser une macro parce que je rajouterai le code à une macro existante qui traitera tous le fichier
    2. Attention avec les macros pour ce genre de choses. Si tu mets un résultat en dur, il faut que toutes les données (hormis celles de la colonne D) soient présentes. Pour les résultats de la colonne D je pense que le plus simple est d'utiliser, dans le code VBA, Application.WorksheetFunction et/ou Evaluate ou encore faire ajouter la formule par la macro.
    3. Je vais essayer ça alors, et je te tiens au courant
  2. Merci Zoul, ça marche très bien, par contre je galère à la passer en VBA le somme product si quelqu'un peut me débloquer :).

    Merciii

    Sub Compare()

    Dim i As Integer
    Dim col_2 As Range
    'Definition plage de cellules en memoire pour vitesse execution
    Set col_2 = Worksheets("Extract").Range("B2:B15000")

    With ThisWorkbook.Sheets("IP_CF")
    For i = 15000 To 2 Step -1
    If Application.CountIf(col_2, .Range("B" & i).Value) = Then
    .Range("D" & i) = "OK"
    Else: .Range("D" & i) = "NOK"
    End If
    End If
    Next i
    End With

    End Sub
    1. Bonjour,

      Tu jongles sur 2 onglets ?

      A+
    2. Je fais que des boulettes, on mettra ça sur le compte de la fatigue, Non seulement onglet "EXTRACT"
    3. Je ferais ça (mais ça implique que tu aurais des formules sur ta feuille) :

      Sub Compare()
       Application.Calculation = xlManual
      Dim ligne As Integer
      
      While ThisWorkbook.Sheets("Extract").Cells(ligne,2).Value <> ""
      Cells(ligne,4).FormulaR1C1 = _
              "=IF(COUNTIF(C[-2],RC[-2])=SUMPRODUCT((C[-2]=RC[-2])*(C[-1]=RC[-1])),""OK"",""NOK"")"
      ligne=ligne+1
      WEnd 
       Application.Calculation = xlAutomatic
      End Sub


      ou

      Sub Compare()
       Application.Calculation = xlManual
      Dim ligne As Integer
      Dim DernLigne As Long 
      DernLigne = Range("B" & Rows.Count).End(xlUp).Row
      
          Range("D2").Select
      ActiveCell.FormulaR1C1 = _
              "=IF(COUNTIF(C[-2],RC[-2])=SUMPRODUCT((C[-2]=RC[-2])*(C[-1]=RC[-1])),""OK"",""NOK"")"
      Selection.AutoFill Destination:=Range("D2:D" & DernLigne), Type:=xlFillDefault
       Application.Calculation = xlAutomatic
      End Sub