Macro / Comparaison ligne à ligne
popo
-
Zoul67 Messages postés 2001 Statut Membre -
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,
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
-
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+-
-
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.
-
-
-
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-
-
-
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
-