Microsoft 365 Application.Match(Application.Max(Range

PAPA WALKER

XLDnaute Junior
Bonjour à toutes et à tous,

Ci-dessous le texte qui est dans le module du fichier joint.

Comme j'essaue de l'exliquer, je cherche à identifier le N0 de ligne de la valeur max dans une colonne (B) dans mon exemple,
mais seulement si la colonne (A) contient la lettre X

J'ai mis le code que j'utilise actuellement mais qui fait fi de la colonne A que je souhaiterais ajouter en condidion.

Merci de votre avis.

Cordialement




Sub MAXRANGE()

'Bonjour
'Je cherche à déterminer le N° de la ligne contenant la valeur max en colonne B mais pour laquelle la colonne A contient la lettre X
'Ici, B4 et B5 contiennent la valeur 3 mais seulement A5 contient la lettre X
'Je souhaiterais donc que la Cellule D2 me renvoie le chiffre 5 et non 4

'Un peu comme dans une fonction MAX.SI.ENS mais en VBA


'On recherche la ligne avec la valeur max
Ligne = Application.Match(Application.Max(Range("B2:B6")), Range("B2:B6"), 0) + 1

Range("D2").Value = Ligne

End Sub
 

Pièces jointes

  • MAXRANGE.xlsm
    14.5 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonjour PAPA WALKER,

Voyez le fichier joint et cette fonction VBA ;
Code:
Function LigneMax(r As Range, critere As String) As Long
Dim v As Variant, maxi As Double
critere = LCase(critere) 'minuscules, les caractères génériques sont autorisés
Set r = Intersect(r, r.Parent.UsedRange)
If r Is Nothing Then Exit Function
For Each r In r.Rows
    If LCase(r.Cells(1)) Like critere Then
        v = r.Cells(1, 2)
        If IsNumeric(CStr(v)) Then If CDbl(v) > maxi Then maxi = CDbl(v): LigneMax = r.Row
    End If
Next
End Function
Le code doit être placé impérativement dans un module standard.

A+
 

Pièces jointes

  • MAXRANGE(1).xlsm
    17.1 KB · Affichages: 4

PAPA WALKER

XLDnaute Junior
Bonjour Job75

Je vais regarder, décortiquer et tenter de comprendre pour l'adapter dans dan mon vrai fichier, les colonnes ne sont pas contigues.

En tout cas, ça semble partfaitement marcher!
Vraiment un grand bravo et mon admiration.

Cordialement 👏👏👏👏
 

PAPA WALKER

XLDnaute Junior
Bonjour Job75,

Merci de ce retour qui pêrmet d'identifier la portion de code qui gère les colonnes concernées.
Hier j'avais testé et ça ne fonctionnait forcément pas :)

Mais je n'ai pas eu le temps d eregarder plus en détail et ce matin, je trouve votre dsecond message.

Merci vraiment 👍
 

PAPA WALKER

XLDnaute Junior
Désolé de revenir vers vous mais je souhaite utiliser cette valeur de N° de ligne dans mon code VBA dont voici un extrait.


-----------------------------------------
For Each Cell In RACPHASE1
Ligne = Cell.Row
If Range("I" & Ligne) > 0 And Range("I" & Ligne) <> "" Then
----------------------------------------------
Ligne étant l'équivalent du résultat de votre fonction, comment puis-je l'intégrer à mon code sans avoir besoir d'une formule dans une cellule de la feuille?

Cordialement
 

PAPA WALKER

XLDnaute Junior
Rebonjour

Je teste le fonctionnement de mon fichier avec votre fonction qui me donne de bons résultats en récupérant la valeur de la laifne dans une cellule :)

Par contre, je tombe sur un premier cas où la valeur max de la colonne est égale à zéro et là lal fonction retourne 0 ce qui plante VBA car la ligne zéro n'existe pas.

Il est aussi possible dans d'atres cas que je n'ai pas enocr etesté, que la valeur max soient négative et dans ce ça, ça serait la valeur la plus proche de séro qui debrait voir sa ligne s'afficher.

donc sur ces cas, pour le moment je sis bloqué.
Je contine néanmoins mes tests avec des cas où en fin d etraitement til rest edes valeur positives.

Cordialement
 

PAPA WALKER

XLDnaute Junior
Re bonjour,

J'ai tenté de faire une version plus légère coté données sources et plus anonyme.

Le principe est de trouver une organisation pourr un véhicule avec différents produits rangés dans des containers de même volume mais ne contenant pas le même nombre de produits.
Certains produits peuvent aussi être mis dans un coffre et mélangés à d'autres.

Dans le fichier joint, la tournée 2725071 fait planter le code.
C'est en rapport avec la fonction LigneMax qui doit renvoyer un numéro de ligne.

Si besoin de plus d'explications... :)

Cordialement
 

Pièces jointes

  • ORGA-CAMION.xlsm
    675 KB · Affichages: 1

Discussions similaires

Réponses
7
Affichages
163
Réponses
2
Affichages
129

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou