Macro / Comparaison ligne à ligne

popo -  
Zoul67 Messages postés 2001 Statut Membre -
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. Zoul67 Messages postés 2001 Statut Membre 149
     
    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+
    0
    1. popo
       
      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
      0
    2. Zoul67 Messages postés 2001 Statut Membre 149
       
      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.
      0
    3. popo
       
      Je vais essayer ça alors, et je te tiens au courant
      0
  2. popo
     
    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
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Bonjour,

      Tu jongles sur 2 onglets ?

      A+
      0
    2. popo
       
      Je fais que des boulettes, on mettra ça sur le compte de la fatigue, Non seulement onglet "EXTRACT"
      0
    3. Zoul67 Messages postés 2001 Statut Membre 149
       
      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
      0