Macro / Comparaison ligne à ligne

Fermé
popo - 26 févr. 2014 à 16:34
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 - 27 févr. 2014 à 13:58
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 lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
26 févr. 2014 à 16:42
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
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 lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
Modifié par Zoul67 le 26/02/2014 à 18:21
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
Je vais essayer ça alors, et je te tiens au courant
0
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 lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
27 févr. 2014 à 10:37
Bonjour,

Tu jongles sur 2 onglets ?

A+
0
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 lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
27 févr. 2014 à 13:58
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