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)
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 FunctionEt 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 FunctionDans 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 !
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é.