Macro / Comparaison ligne à ligne

popo -  
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   -
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,

A voir également:

2 réponses

Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   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
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
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   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
popo
 
Je vais essayer ça alors, et je te tiens au courant
0
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
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
Bonjour,

Tu jongles sur 2 onglets ?

A+
0
popo
 
Je fais que des boulettes, on mettra ça sur le compte de la fatigue, Non seulement onglet "EXTRACT"
0
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   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