Comparararer valeur d'une cellule avec valeurs d'une colonne

Bonjour

Je débute sur VBA pour Excel, j’espère que vous pourrez m'aider.

Je cherche à comparer la valeur d'une cellule avec la valeur de plusieurs cellules d'une même colonne d'une autre feuille de calcul (catalogue). Et ainsi renvoyer une autre valeur de la même ligne.

Pour que ce soit plus clair : en fait ce que j'aimerai mettre dans ma cellule c'est la formule suivante :

=SI(D6<'Catalogue Unités Ext'!I9;'Catalogue Unités Ext'!B9

Sauf que dans mon catalogue je n'ai pas qu'une seule ligne, donc j’imagine qu'il faut une boucle qui s’arrêterait dès que la condition est respectée, mais je n'y connais rien du tout, ni même implémenter la condition si en VBA.

Mes explications n'étant sans doute pas très claires, J'ai mis en pièce jointe mon fichier.

c'est la valeur en rouge de la feuille 2 qui est à comparer (<) aux valeurs de la colonne puissance maxi (en rouge) de la feuille 1 et c'est la Puissance CV la même ligne qui doit être renvoyée dans la cellule verte de la feuille 2.

Comme pourrai-je faire?

Merci par avance de votre aide

Bonjour @ tous,

Oui ce n'est pas clair,

Si on ne trouve pas la valeur exact en renvoie celle inférieure ou supérieure ??

Un essai en passant,

=INDEX(PUISSANCE_CV_UE;EQUIV(D6;'Catalogue Unités Ext'!I7:I9))

@ + +

Bonjour,

J'avais compris que tu voulais le faire en VBA. Voici un code qui ferait l'affaire.

Sub aa()
Dim i As Integer

With Sheets("Catalogue Unités Ext")
    For i = 7 To .Range("I" & Rows.Count).End(xlUp).Row
        If .Range("I" & i) >= Range("D6") Then
            Range("O4") = .Range("B" & i)
            Exit Sub
        End If
    Next i
End With

End Sub

Cordialement

Effectivement je volais en VBAn puisque cela semblait impossible sous Excel

Merci beaucoup pour le code , cela marche parfaitement.

Cela marche t-il aussi avec un for each ?

Est - il possible réaliser le module sous forme de fonction excel ? Dans ce cas je pourrais la réutilisée X fois juste en changeant les cases auxquelles elle est liée, directement sur Excel, comme une fonction somme par exemple ?

Merci A +

Salut,

flo204213 a écrit :

Cela marche t-il aussi avec un for each ?

Très probablement que oui, mais selon moi - dans le cas présent - cela correspond à compliquer le code juste pour le plaisir de compliquer ; je n'en vois absolument pas l'intérêt.
flo204213 a écrit :

Est - il possible réaliser le module sous forme de fonction excel ?

Très probablement également. Mais là je dois avouer ne pas être trop au courant de la chose. Je te conseille aussi d'indiquer ce fil comme résolu et d'en ouvrir un autre avec cette question précise.

NB : Pour ton code tel que je te l'ai proposé, je pensais encore te dire que l'on pourrait le déclencher automatiquement par une macro événementielle à chaque modification d'une cellule de la plage E4:N4 de la feuille 'Choix Unités Int'.

Amicalement.

Yvouille a écrit :

Salut,

flo204213 a écrit :

Cela marche t-il aussi avec un for each ?

Très probablement que oui, mais selon moi - dans le cas présent - cela correspond à compliquer le code juste pour le plaisir de compliquer ; je n'en vois absolument pas l'intérêt.
flo204213 a écrit :

Est - il possible réaliser le module sous forme de fonction excel ?

Très probablement également. Mais là je dois avouer ne pas être trop au courant de la chose. Je te conseille aussi d'indiquer ce fil comme résolu et d'en ouvrir un autre avec cette question précise.

Amicalement.

Merci de ta réponse, je vais me renseigner sur les fonctions.

A bientôt

Le temps que je rajoute un passage à mon dernier message, tu avais déjà répondu

Regarde alors ce que j'y ai rajouté

Yvouille a écrit :

Le temps que je rajoute un passage à mon dernier message, tu avais déjà répondu

Regarde alors ce que j'y ai rajouté

IL est vrai que cela peut s’avérer intéressant, même si appuyer sur un bouton ne me dérange pas pour le moment.

Sur la ligne de code, For i = 7 To .Range("I" & Rows.Count).End(xlUp).Row est-ce que cela signifie que la macro teste toutes les valeurs de la ligne 7 jusqu'à la fin de la colonne (sauf si la condition est vérifiée avant)? Si c'est le cas, si mon tableau "catalogue" ne fait pas 3 lignes mais 100 lignes, je n'ai donc pas besoin de changer le code?

Merci

Re-bonjour,

Ce n’est pas la peine de reprendre à chaque fois tous mes textes ; ils sont à disposition plus haut.

La ligne For i = 7 To .Range("I" & Rows.Count).End(xlUp).Row fait effectivement que ça boucle de la ligne 7 à la dernière ligne de la colonne I, mais cette boucle est interrompue plus loin dans le code, par ces quatre lignes

If .Range("I" & i) >= Range("D6") Then
Range("O4") = .Range("B" & i)
Exit Sub
End If

En français, ce passage pourrait se traduire ainsi : Si la valeur de la cellule ‘I & variable i’ de feuille ‘Catalogue Unités Ext’ est plus grande ou égale à la valeur de la cellule D6 de la feuille ‘Choix Unités Int’, alors la cellule O4 de la feuille ‘Choix Unités Int’ doit prendre la valeur de la cellule ‘B & variable i’ de la feuille ‘Catalogue Unités Ext’ et la macro s’arrête là (Exit Sub). Ceci sous-entend bien entendu que si la condition n'est pas remplie, ça continue à boucler sur les autres lignes.

Donc effectivement que même si ton tableau a 100'000 lignes, tu n’as pas besoin de changer le code.

Amicalement.

Merci pour ton explication très claire soit-elle

Rechercher des sujets similaires à "comparararer valeur valeurs colonne"