Comparer 2 valeurs dans 2 colonnes

FunnyLays

XLDnaute Nouveau
Bonsoir à tous,

Je souhaite comparer la valeur de 2 colonnes dans un fichier comportant beaucoup de données.
Si la colonne1 >= colonne2 alors afficher "ok"
Si la colonne1 < colonne2 alors afficher "non"

J'ai réussi à utiliser la fonction d'excel pour parvenir à mon résultat :
=SI(T52>=U52;"OK";"NON")

Mon problème est maintenant de l'utiliser avec VBA je ne parviens pas a utiliser le code nécessaire pour parvenir à mon résultat...

Je vous joint un fichier exemple avec les résultats attendus (attention les valeurs sont dans les colonnes T et U)

Merci par avance pour votre aide !
 

Fichiers joints

Dernière édition:

job75

XLDnaute Barbatruc
Bonjour FunnyLays, bienvenue sur XLD,

Je note qu'il n'y a pas de formules en colonne T et U.

Donc placez dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [T:U]) Is Nothing Then Exit Sub
If FilterMode Then ShowAllData 'si la feuille est filtrée
With Intersect([V:V], UsedRange.EntireRow).Offset(1)
    .FormulaR1C1 = "=REPT(IF(RC[-2]>=RC[-1],""OK"",""NON""),SIGN(COUNTA(RC[-2]:RC[-1])))"
    .Value = .Value 'supprime les formules
End With
End Sub
La macro se déclenche quand on modifie ou valide une cellule en colonnes T ou U.

A+
 

job75

XLDnaute Barbatruc
Re,

S'il y a des formules en colonnes T et U la solution précédente ne va pas.

Dans ce cas il faudra nous indiquer les formules.

A+
 

FunnyLays

XLDnaute Nouveau
Bonjour Job75, merci pour votre réponse.

Il s'agit en effet de valeurs dans colonnes T et U.
Il me semble toutefois que votre code est plus complexe que ce que je cherche à faire.
Lorsque j'exécute le code avec une macro j'obtiens ceci :
Code:
  Range("V2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-2]>RC[-1],""OK"",""NON"")"
    Selection.AutoFill Destination:=Range("V2:V2146")
(ce code provient de mon fichier d'origine)

J'ai essayé ce code :
Code:
Sub comparaison ()
If Colonne1 >= Colonne2 Then
Range("V2:V2146") = "OK"
Else
Range("V2:V2146")= "NON"
End If
End Sub
Mais ce dernier ne fonctionne pas correctement car il indique seulement OK pour toutes les colonnes...
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir FunnyLays, job75 :)

Si c'est juste pour afficher OK et NON, tu peux aussi faire comme ceci

VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Columns("V:V")) Is Nothing Then R = IIf(R.Offset(0, -2) >= R.Offset(0, -1), "OK", "NON")
End Sub
 
Dernière édition:

job75

XLDnaute Barbatruc
Re,

@ FunnyLays : avec mon code voyez le cas des lignes vides en T et U.

Et votre dernier code n'a vraiment aucun sens.

@ Lone-wolf (salut) : pourquoi pas, mais si sélection multiple c'est la cata...

A+
 

Lone-wolf

XLDnaute Barbatruc
Re

@job75: et bien la demande du 1er message porte à confusion. En premier elle dit
Si la colonne1 >= colonne2 alors afficher "ok", là on parle éffectivement de plusieures cellules.

Et ensuite
=SI(T52>=U52;"OK";"NON"), donc 1 cellule, et j'ai pris exemple sur celle-ci.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re Lone-wolf,

Confusion ? Le problème posé au post #1 est très clair.

A+
 

FunnyLays

XLDnaute Nouveau
Re @job75
La procédure marche merci beaucoup.
J'avais en effet mal exécuté la fonction, mais cette dernière est très lente (quasiment 1min pour qu'elle se termine) sachant que j'ai 4 autre feuilles... Y a -t- il une solution pour l'accélérer un peu ?
 

Lone-wolf

XLDnaute Barbatruc
Bonjour FunnyLays, job75, le Forum :)

VB:
'Si la colonne A contient des données
Private Sub Worksheet_Change(ByVal R As Range)
Dim x&

    Application.EnableEvents = False

    If Not Intersect(R, Columns("U:U")) Is Nothing And R.Count = 1 Then
        x = Cells(Rows.Count, "A").End(xlUp).Row
        Range(Cells(2, "V"), Cells(x, "V")).FormulaLocal = "=SI(U2 <>"""";SI(T2>=U2;""OK"";""NON"");"""")"

        With Range(Cells(2, "V"), Cells(x, "V"))
            .Value = .Value
        End With
    End If

    Application.EnableEvents = True
End Sub
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour FunnyLays, Lone-wolf, le forum,
La procédure marche merci beaucoup.
J'avais en effet mal exécuté la fonction, mais cette dernière est très lente (quasiment 1min pour qu'elle se termine) sachant que j'ai 4 autre feuilles... Y a -t- il une solution pour l'accélérer un peu ?
Très lente ??? Sur 2146 lignes la macro de mon post #2 est quasi instantanée (0,01 s).

C'est normal car il n'y a aucune boucle, qu'avez-vous donc bricolé ???

Fichier joint pour tester.

A+
 

Fichiers joints

job75

XLDnaute Barbatruc
Re,

Et sur 100 000 lignes la durée d'exécution est de 0,64 seconde.

Il faudrait joindre votre fichier qui est si lent.

A+
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas