Carpe_Diem Posté(e) le 19 octobre 2011 Partager Posté(e) le 19 octobre 2011 Bonjour, je cherche la formule qui va bien pour sortir une valeur max d'une ensemble de valeurs comprennant des valeurs Max et Min. C'est à partir d'un tableau Excel de ce type : -----------Mois1------Mois2------Mois3-----etc.... --------- Min-Max - Min-Max - Min-Max - etc... Objet1 - 500-600 - 450-700 - 700-800 - etc... Objet2 etc... et je cherche donc à obtenir, par ligne, sur l'ensemble des mois la valeur Max (soit ici 800) et la valeur Min (soit ici 450). J'ai tenté un "=RECHERCHEH("MAX";B4:G21;2;FAUX)" , mais il ressort toujours la valeur Max de la première colonne (du premier mois). NB, les colonnes Min et Max sont bien sûr distinctes. La formule Max sur une ligne ne marche pas à cause d'une 3ème valeur qui peut excéder les valeurs de "Max".... ce serait trop simple. Une idée ? Merci de votre aide. Lien vers le commentaire Partager sur d’autres sites More sharing options...
digital-jedi Posté(e) le 20 octobre 2011 Partager Posté(e) le 20 octobre 2011 Bonjour, pourquoi ne pas utiliser l'équation =MAX(A1:F1) ? A1 B1 C1 D1 E1 F1 500 600 450 700 700 800 Ah, y a une 3eme valeur ? D'où sort cette 3eme valeur ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
RING3R Posté(e) le 20 octobre 2011 Partager Posté(e) le 20 octobre 2011 arf pas évident, j'aurai même tendance à dire pas faisable avec les fonctions de base d'Excel... m'enfin je ne m'avancerai pas autant et je dirai juste que j'y arrive pas en tout cas^^ Mais je peux te proposer une fonction perso, qui fait (si j'ai bien compris) ce que tu demandes le code a coller dans un module: Function FonctionPerso(rech As String, plage_rech As Range, plage_val As Range)Dim tableauTemp() As DoubleMaxCol_rech = plage_rech.Columns.CountMaxCol_val = plage_val.Columns.CountMaxCol = WorksheetFunction.CountIf(plage_rech, rech)ReDim tableauTemp(MaxCol - 1)MaxLig_rech = plage_rech.Rows.CountMaxLig_val = plage_val.Rows.CountDebCol_rech = plage_rech.ColumnDebCol_val = plage_val.ColumnSelect Case True Case MaxCol_rech <> MaxCol_val: FonctionPerso = "#VALEUR" Case DebCol_rech <> DebCol_val: FonctionPerso = "#VALEUR" Case MaxLig_rech <> 1: FonctionPerso = "#VALEUR" Case MaxLig_val <> 1: FonctionPerso = "#VALEUR" Case rech <> "Max" And rech <> "Min": FonctionPerso = "#VALEUR" Case Else i = 0 For Each cell In plage_rech Valeur = cell.Value Colonne = cell.Column - DebCol_rech + 1 If Valeur = rech Then tableauTemp(i) = plage_val(1, Colonne) i = i + 1 End If Next cell If rech = "Max" Then FonctionPerso = WorksheetFunction.Max(tableauTemp()) If rech = "Min" Then FonctionPerso = WorksheetFunction.Min(tableauTemp())End SelectEnd Function Voilà bon je suis pas un expert donc le code est pas forcement au top du top (et pas forcement très propre), j'ai la fâcheuse tendance à m’arrêter quand ça marche^^ J'espère que ça t'aidera, dis moi ce que t'en penses (j'ai tjs la flemme de commenter des petits morceaux de code comme ca... si t'arrive pas à lire et que tu veux connaitre les détails fais moi signe) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Carpe_Diem Posté(e) le 20 octobre 2011 Auteur Partager Posté(e) le 20 octobre 2011 Merci à tous les 2. digital-jedi : il y a en fait une valeur de référence qui est fixe et qui peut dépasser un Max. Par exemple, j'ai vendu l'objet 1 au mois 1 au mini à 300¤ et au maxi à 600¤, mais la valeur de vente de référence pour cet objet est de 1000¤. Voilà pourquoi, la fonction Max sur une ligne ne peut pas fonctionner. RING3R: pour avoir pondu du code (je suis ignare sur le sujet).... mais je ne sais pas comment intégrer ce code dans Excel (2007 et >). Que veux tu dire par "coller dans un module" ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
RING3R Posté(e) le 20 octobre 2011 Partager Posté(e) le 20 octobre 2011 oups désolé j'aurais dû penser à préciser donc quand tu a Excel ouvert, tu tape Alt+F11 une fenetre s'ouvre, dans la partie gauche tu verras "VBA Project (nom de ton classeur)" avec en dessous des objects ayant le nom de tes onglets puis un dernier objet "this workbook" tu clic-droit par là, puis "insertion/module" une page de texte vierge s'ouvre dans la partie droite, tu peux y coller le code une fois fait, si tu commence à taper dans une cellule "=fonctionperso" Excel devrait la reconnaître Lien vers le commentaire Partager sur d’autres sites More sharing options...
Carpe_Diem Posté(e) le 20 octobre 2011 Auteur Partager Posté(e) le 20 octobre 2011 Ok, l'insert dans un module fonctionne. Mais j'obtiens #Valeur en résultat en reprenant le même schéma de données de l'exemple...grrr... nul de chez nul je suis... Lien vers le commentaire Partager sur d’autres sites More sharing options...
RING3R Posté(e) le 20 octobre 2011 Partager Posté(e) le 20 octobre 2011 heu ben c'est qu'il doit pas y avoir les bonnes ref.. 1er argument = "Min" ou "Max" 2eme = plage de titre "min/max" (pour savoir si le chiffre correspondant est un min ou un max) 3eme = plage des valeurs un #VALEUR s'affiche normalement dans un des cas suivant: (cf. le "select case") - la plage de titre et celle de valeur sont de taille (nombre de colonne) différente - ces deux plages commence à des colonnes différentes (une de A:D et l'autre B:E par ex. donc les deux plages doivent être une en dessous de l'autre pour que ca marche, peut importe le nombre de ligne les séparant) - une de ces deux plages fait plus d'une ligne - le 1er argument est autre chose que "min" ou "max" PS: est-ce que excel reconnait bien la formule? ie. si tu tape "=fonct" est-ce qu'il te propose "FonctionPerso" ?? j'ai reessayé et ca marche bien chez moi en tout cas (en plus je suis pas sur le même ordi que celui depuis lequel j'ai écrit cette fonction) PPS: pour tester: - clic a coté (a gauche) de la 3eme ligne de code ("MaxCol_rech = plage_rech.Columns.Count") pour faire apparaitre un point rouge - ensuite entre dans la cellule où tu as tapé la formule, puis valide (ou retape la formule) - si Excel a reconnu la formule, ca devrait te renvoyer dans la page de code, et une ligne devrait être jaune - appuis sur F8 pour exécuter le code ligne par ligne - regarde où ca s’arrête sinon essaye ca (c'est la même chose deja fait) petit fichier: Classeur1.xlsm Lien vers le commentaire Partager sur d’autres sites More sharing options...
Carpe_Diem Posté(e) le 21 octobre 2011 Auteur Partager Posté(e) le 21 octobre 2011 En fait, le problème venait de.... l'extension. Il faut l'enregistrer en .xlsm (Excel supportant les macros). Mea culpa. Je l'ai compris quand j'ai vu le nom du fichier en exemple. Un grand merci et Lien vers le commentaire Partager sur d’autres sites More sharing options...
RING3R Posté(e) le 21 octobre 2011 Partager Posté(e) le 21 octobre 2011 .xls ca devrait marcher aussi, en tout cas content d'avoir pu t'aider Lien vers le commentaire Partager sur d’autres sites More sharing options...
digital-jedi Posté(e) le 21 octobre 2011 Partager Posté(e) le 21 octobre 2011 Un XLS fonctionne aussi avec une macro, mais il faut l'activer dans l'onglet développeur > macro (Excel 2007). Lien vers le commentaire Partager sur d’autres sites More sharing options...
Carpe_Diem Posté(e) le 21 octobre 2011 Auteur Partager Posté(e) le 21 octobre 2011 Ok, c'est noté. je ferais un essai. Merci à tous les deux. Lien vers le commentaire Partager sur d’autres sites More sharing options...
patos Posté(e) le 24 octobre 2011 Partager Posté(e) le 24 octobre 2011 Carpe_Diem, le problème est que ton tableau de base est mal fait :) Je te conseille de prendre des cours sur les tableaux croisés dynamiques. Ca poutre des mamans ours et je peux te garantir que tu te ferais beaucoup moins chier qu'avec des tableaux fait comme ça A la rigueur, je veux bien prendre du temps pour te l'expliquer, mais tu va vite avoir mal au crane... MP si jamais tu veux des détails :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Carpe_Diem Posté(e) le 25 octobre 2011 Auteur Partager Posté(e) le 25 octobre 2011 Je te remercie de ta proposition Patos. Au final, c'est ce que j'ai fait : un TCD groupant les "Max" en ligne puis la fonction Max en fin de chaque ligne pour avoir le max des max par objet. Pas très élégant, je vous l'accorde ! Pourquoi un TCD alors que la macro fonctionnait ? On est passé sous Open Office et donc... les macros Excel sont dans le caca. Je n'ai pas cherché à la réécrire car à chaque pas, j'avais un erreur... Pour le reste, un vrai casse-tête pour obtenir joliment la valeur d'une cellule au croisement ligne/colonne en fonction de la valeur dans la ligne et dans la colonne. "Index + "Equiv" ne fonctionnant pas (la valeur d'ordre d'une colonne, c'est pas pareil que la valeur d'une cellule dans cette colonne et idem pour les lignes), j'ai fini aux "SI" imbriqués (heureusement, on peut en imbriquer + de 7 maintenant). Je vais chercher à rendre cela + joli et + automatisé. Merci à tous les 3 pour votre aide. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.