Plusieurs valeurs pour une cellule

Bonjour, je ne suis pas un professionnel d'Excel je connais juste quelques bases qui m'ont permis de faire ce fichier. Je bute sur un point que je vais essayer d'expliquer et je serai reconnaissant si vous pouviez m'aider.

C'est un fichier sur les paris sportifs. Le but étant de calculer la meilleure cote selon les bookmakers et de mettre en colonne D ligne 5 à 12 les bookmakers proposant la meilleure cote. J'arrive bien à mettre la valeur du bookmaker quand il y en a qu'un seul. Quand il y en a plusieurs proposant la + grosse côte j'arrive bien à mettre la valeur "plusieurs" mais ce que j'aimerais c'est de mettre un choix entre les bookmakers.

Par exemple si Unibet et Winamax proposent la meilleure cote j'aimerais mettre (colonne D et ligne 5 à 12) "Unibet ou Winamax" à la place de plusieurs...

Je mets en fichier joint quelques explications. En vous remerciant par avance. (si je n'ai pas été assez clair excusez moi)

29excel.xlsx (21.21 Ko)
2020 08 26 09 33 27

Exemple : Ligne 37 on voit que la + grosse cote est : 29.88 et cette cote est disponible chez 2 bookmakers : Unibet et Parionsport.

J'aimerais donc qu'à la ligne 9 colonne D il soit indiqué : Unibet et Parionsport, à la place de "Plusieurs"...

Bonjour,

Vous pouvez essayer de définir cette fonction personnalisée (Onglet Développeur (à éventuellement activer si ce n'est pas déjà le cas via le volet Fichier de Excel) / insérer un module/ Copier le code dedans) :

Function MEILLEURE_COTE(Plage_Cotes As Range, k as Integer) As String

'Plage_Cotes est la plage à tester, contenant les cotes
'k est le numéro de la position de la colonne par rapport à Plage_Cotes
' > colonne juste à droite : k = 1
' > colonne juste à gauche : k = -1 >>> votre cas

Dim cell As Range
Dim i%
Dim Vmax() As String

For Each cell In Plage_Cotes
    If cell.Value >= WorksheetFunction.Max(Plage_Cotes) Then
        i = i + 1
        ReDim Preserve Vmax(i)
        Vmax(i - 1) = cell.Offset(0, k).Value
    End If
Next cell

MEILLEURE_COTE = Trim(Join(Vmax))

End Function

Et ensuite, vous l'appelez sur excel comme une fonction classique. Pour des cas relativement simples, ça devrait marcher sans trop de souci. Il faudra cependant enregistrer le classeur au format xlsm pour conserver la fonction.

Cordialement,

Tout d'abord je vous remercie pour votre réponse. Je ne vais pas mentir j'ai du mal à comprendre la fonction. J'ai réussi à l'insérer et appeler cette fonction mais

ensuite j'avoue que je suis un peu perdu. Petite question : est ce que cette fonction va me mettre dans les cellules D5 à D12 le nom des bookmakers (Unibet, Betclic...)

qui ont les meilleures cotes ? car j'ai l'impression que la fonction sert à trouver seulement les meilleures cotes ? est ce que je me trompe ?

Exemple : Ligne 37 on voit que la + grosse cote est : 29.88 et cette cote est disponible chez 2 bookmakers : Unibet et Parionsport.

J'aimerais donc qu'à la ligne 9 colonne D il soit indiqué : Unibet et Parionsport, à la place de "Plusieurs"...

En fait la fonction devrait réussir à trouver qu'il y a 2 cotes identiques : 29.88 qui sont les + grandes valeurs de la ligne 37 entre D37 et N37 et ensuite remonter de 6 lignes pour arriver au nom des bookmakers...

(encore désolé pour mon ignorance j'ai essayé de comprendre la fonction mais il me manque les bases des fonctions)

Bonjour,

Excusez-moi, j'ai mal interprété votre besoin donc je vous ai proposé une fonction qui ne marcherait pas dans votre cas. Avec ceci, ça devrait être mieux (même si ça reste basique et sujet aux erreurs en cas de cas particuliers) :

Function MEILLEURE_COTE(Plage_Cotes As Range, l as integer, k as Integer) As String

'Plage_Cotes est la plage à tester, contenant les cotes
'l donne le nombre de lignes permettant d'atteindre la ligne des bookmakers
'k donne le nombre de colonnes permettant d'atteindre la colonne des bookmakers

Dim cell As Range
Dim i%
Dim Vmax() As String

For Each cell In Plage_Cotes 'pour chaque cellule de la plage à examiner (contenant les cotes)
    If cell.Value = WorksheetFunction.Max(Plage_Cotes) Then 'si la valeur de la cellule en cours = max de la plage
        i = i + 1 'incrémentation du nombre de valeurs à stocker (avant restitution sous forme de chaine de caratères)
        ReDim Preserve Vmax(i) 'redimension du tableau de stockage des valeurs
        Vmax(i - 1) = cell.Offset(l, k).Value 'la nouvelle valeur du tableau prend la valeur de la cellule à l lignes et k colonnes de notre de cellule examinée
    End If
Next cell 'on passe à la cellule suivante

MEILLEURE_COTE = Trim(Join(Vmax)) 'Le résultat est la concaténation des valeurs stockées dans le tableau (des noms de book dans notre cas)

End Function

Dans votre exemple, en P37, il faut saisir :

=MEILLEURE_COTE(D37:O37; -6; 0)

Ca donne la ligne des bookmakers (6 lignes avant la ligne 37) sans rien faire sur les colonnes.

Vous pouvez probablement adapter en saisissant, toujours en P37 :

=MEILLEURE_COTE(D37:O37; -NB($P$31:$P36); 0)

Et pour le fonctionnement, la fonction dit d'examiner toutes les cellules de la Plage_Cotes. Si une de ces cellules est le MAX de la Plage_Cotes, on décale de l lignes et de k colonnes (par rapport à cette cellule) et on prend la valeur qui se trouve dans la cellule après décalage (en l'occurrence notre nom de book).

Les valeurs obtenues (noms de book) sont stockées puis à la fin restituées sous forme d'une unique chaine de caractères.

Génial ! Un grand MERCI ça fonctionne parfaitement !

Si je peux encore abuser de votre temps juste pour information : quand je rentre cette formule dans P37 : =MEILLEURE_COTE(D37:O37; -NB($P$31:$P36); 0) cela me donne des nombres correspondant aux meilleurs cotes mais pas les bookmakers. Mais ce n'est pas grave du tout j'ai mis le nombre de lignes manuellement et ça fonctionne parfaitement.

Dernière petites question s'il vous plait : peut on enlever "meilleure cote" après le bookmakers ? : Unibet Parions Sport Meilleure cote

EN tout cas merci beaucoup pour vos réponses rapides..

Bonjour,

Essayez de remplacer NB par NBVAL dans la formule. Je vais souvent trop vite et ne fais pas assez attention à certains détails (comme le fait que les cellules ici ne contiennent pas des nombres mais du texte).

Je suis pas certain d'avoir compris votre question. Si vous voulez déplacer votre colonne, oui, vous pouvez la couper puis coller après la colonne meilleur book (il faudra juste adapter la formule en conséquence). Si vous voulez juste ne pas la prendre en compte dans la formule (ce qui est normal en fait ! encore une fois, j'ai pas fait attention), vous arretez le 1er argument à N37 dans la formule.

=MEILLEURE_COTE(D37:N37; - NBVAL($P$31:$P36;0)

Là, ça devrait être bon.

Formule à saisir en P37 bien entendu !

Désolé si je n'ai pas été assez clair pour la dernière question : voici ce que j'obtiens et c'est exactement ce que je souhaitais mais est-il juste possible de supprimer le texte "Meilleure cote" afin d'avoir seulement Unibet Parionsport ?

image

As-tu essayé ?

=MEILLEURE_COTE(D37:N37; - NBVAL($P$31:$P36);0)

Là maintenant c'est parfait !! Il manquait une parenthèse dans votre 1er message :

=MEILLEURE_COTE(D37:N37; - NBVAL($P$31:$P36;0)

Avec votre nouvelle formule : =MEILLEURE_COTE(D37:N37; - NBVAL($P$31:$P36);0) cela fonctionne parfaitement ! Je vous remercie beaucoup du temps que vous m'avez consacré.
Rechercher des sujets similaires à "valeurs"