XL 2016 méthode find

  • Initiateur de la discussion Initiateur de la discussion gump54
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gump54

XLDnaute Nouveau
Bonjour;
Dans le fichier en PJ j'aimerais pouvoir sélectionner la valeur max dans les plages (F14:I14) (F16:I16) (F18:I18); puis selectionner la cellule sous cette valeur max et lui attribuer la valeur 1. J'ai essayé avec la méthode find qui fonctionne pour des valeurs numériques mais dans ce cas il faut trouver la valeur max dans le résultat d'une formule, c'est sans doute ce qui coince dans ma macro. Si quelqu'un peut m'aider.Merci
 

Pièces jointes

sinon, en attendant de comprendre... un code.. ca donnerait ca
VB:
Sub Macro1()
    For i = 14 To 18 Step 2
        Set zone = Range("F" & i).Resize(1, 4)
        NbVal = WorksheetFunction.Sum(zone) 'permet de vérifier qu'il y a au moins une valeur dans la ligne
        If NbVal <> 0 Then
            col = WorksheetFunction.Match(WorksheetFunction.Max(zone), zone, 0)
            Range("F" & i).Offset(1, col - 1) = 1
        End If
    Next i
End Sub
 
Bonjour,

Dans le fichier en PJ j'aimerais pouvoir sélectionner la valeur max dans les plages (F14:I14) (F16:I16) (F18:I18); puis selectionner la cellule sous cette valeur max et lui attribuer la valeur 1.
Comme le dit très justement vgendron, pourquoi ne pas simplement mettre une formule ???

Une proposition, au cas où... :
Code:
=(F14<>0)*(F14=MAX($F14:$I14))



Est-ce normal que les formules en ligne 22 ne tiennent pas compte de la ligne 19 ?
 
Dernière édition:
sinon, en attendant de comprendre... un code.. ca donnerait ca
VB:
Sub Macro1()
    For i = 14 To 18 Step 2
        Set zone = Range("F" & i).Resize(1, 4)
        NbVal = WorksheetFunction.Sum(zone) 'permet de vérifier qu'il y a au moins une valeur dans la ligne
        If NbVal <> 0 Then
            col = WorksheetFunction.Match(WorksheetFunction.Max(zone), zone, 0)
            Range("F" & i).Offset(1, col - 1) = 1
        End If
    Next i
End Sub
un grand merci; en fait les formules étaient appelées à disparaitre parce qu'elle ne fonctionnaient pas dans certains cas (égalité de score), j'étais parti pour employer "Find" de le même manière que le code qui est dans la feuille 1 pour trouver des valeurs max, mais effectivement dans mon cas ça ne fonctionne pas.
En haut du tableau de F3 à I3 c'est le nombre de voix par liste d'une élection municipale.
dans un cas normal la liste qui a le plus de voix empoche la prime majoritaire (nbr de sièges à pourvoir +1) divisé par 2, ligne "nbr sièges 1" de F8 à I8.
Ensuite les sièges suivants sont attribués avec un calcul de proportionnelle à l'aide du quotient électoral de la cellule K3, ligne "nbr sièges 2" de F11 à I11.
Les derniers sièges sont attribués un par un avec le calcul de la meilleure moyenne, lignes "nbr sièges 3,4 et 5". C'est la macro que tu m'as fait.
Mais il y a des cas particuliers ou deux listes se trouvent à égalité avec la même meilleure moyenne max, elles sont alors départagées par leur score de F3 à I3, celle qui à le plus de voix prend le siège.C'est le cas que je t'ai mis dans la nouvelle PJ, le dernier siège n'est pas attribué à la bonne liste. C'est ce que mes formules ne parvenaient pas non plus à résoudre.
 

Pièces jointes

Re

Tes formules sont tellement compliquées qu'on n'y comprend rien..
ex ligne 8, tes formules initiales sont inutilement alambiquées

en F8 ==>
VB:
SI(F3=MAX($F$3:$I$3);($J$3+1)/2;0)
, et tu tires vers la droite
en J8
pourquoi faire un somme.si valeur positive??
1) peu de chance d'avoir des valeurs négatives
2) faire la somme de 5+0== >ca fait 5... on s'en fout de savoir si la valeur est positive..
==>
Code:
=J3-SOMME(F8:I8)
 
Re

Tes formules sont tellement compliquées qu'on n'y comprend rien..
ex ligne 8, tes formules initiales sont inutilement alambiquées

en F8 ==>
VB:
SI(F3=MAX($F$3:$I$3);($J$3+1)/2;0)
, et tu tires vers la droite
en J8
pourquoi faire un somme.si valeur positive??
1) peu de chance d'avoir des valeurs négatives
2) faire la somme de 5+0== >ca fait 5... on s'en fout de savoir si la valeur est positive..
==>
Code:
=J3-SOMME(F8:I8)
Bonsoir;
Merci pour ces remarques; j'aisimplifié les formules et changé la présentation pour la compréhension du tableau.
Il me reste le cas où il faut départager deux valeurs max égales dans les sélections (F8:I8) (F10:I10) (F12:I12) cas du fichier joint ou le 1 n'est pas dans la bonne cellule, c'est alors la valeur max de (F3:I3) qui détermine ou placer le 1 en (F9:I9) (F11:I11) (F13:I13).
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
811
Réponses
4
Affichages
1 K
Réponses
7
Affichages
1 K
Réponses
13
Affichages
1 K
Retour