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+
 

Discussions similaires


Haut Bas