recherche d'une valeur max dans différents onglets

Chubby

XLDnaute Impliqué
Bonjour,

Me voilà à nouveau au pied du mur avec la sensation de régresser.
Je recherche une valeur max dans différents onglets. La problématique étant que les lignes comme les colonnes peuvent varier. Les seuls points de repère étant son intitulé "stock fin de mois" ou encore en colonne "total".
Auriez vous une petite idée?
Merci à vous
 

Pièces jointes

  • Recherche val dans onglet.xlsx
    10.5 KB · Affichages: 6

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Chubby, bonjour le forum,

Une proposition VBA pour refaire ton tableau final :

VB:
Sub Macro1()
Dim R As Worksheet 'déclare la variable R (onglet Récap)
Dim O As Worksheet 'déclare la variable O (onglet)
Dim TB() As Variant 'déclare la variable TB (TaBleau)
Dim K As Byte 'déclare la variable K (incrément)

Set R = Worksheets("Récap") 'définit l'onglet R
R.Range("A5").CurrentRegion.ClearContents 'efface d'éventuelles anciennes données de l'onglet "Récap"
K = 1 'initialise la variable K
For Each O In Sheets 'boucle sur tous les onglets O du classeur
    If Not O.Name = R.Name Then 'condition : si le nom de l'onglet n'est pas "Récap"
        ReDim Preserve TB(1 To 2, 1 To K) 'redimensionne le tableau TB (2 lignes, K colonnes)
        TB(1, K) = O.Name 'récupère le nom de l'onglet dans la ligne 1
        TB(2, K) = O.Cells.Find("total", , xlValues, xlWhole).Offset(2, 0) 'récupère le total dans la ligne 2
        K = K + 1 'incrémente K (ajoute une colonne au tableau TB
    End If 'fin de la condition
Next O 'prochain onglet de la boucle
R.Range("A5").Resize(K - 1, 2).Value = Application.Transpose(TB) 'renvoie das A5 redimensionnée le tableau TB transposé
End Sub

Mais si tu veux juste la valeur max, essaie ce code :
Code:
Sub Macro1()
Dim R As Worksheet 'déclare la variable R (onglet Récap)
Dim O As Worksheet 'déclare la variable O (onglet)
Dim TB() As Variant 'déclare la variable TB (TaBleau)
Dim K As Byte 'déclare la variable K (incrément)
Dim VC As Integer 'déclare la variable VC (Valeur Cherchée)
Dim MAX As Integer 'déclare la variable MAX
Dim AD As String 'déclare la variable AD (ADresse)
Dim OM As String 'déclare la variable OM (Onglet Max)

Set R = Worksheets("Récap") 'définit l'onglet R
R.Range("A5").CurrentRegion.ClearContents 'efface d'éventuelles anciennes données de l'onglet "Récap"
For Each O In Sheets 'boucle sur tous les onglets O du classeur
    If Not O.Name = R.Name Then 'condition 1  : si le nom de l'onglet n'est pas "Récap"
        VC = O.Cells.Find("total", , xlValues, xlWhole).Offset(2, 0) 'définit la valeur cherchée
        If VC > MAX Then 'condition 2 : si VC est supérieure à MAX
            MAX = VC 'max devien VC
            AD = O.Cells.Find("total", , xlValues, xlWhole).Offset(2, 0).Address(0, 0) 'recupère l'adresse
            OM = O.Name 'récupère l'onglet
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next O 'prochain onglet de la boucle
MsgBox "La valeur maximale est " & MAX & " !" 'message
Worksheets(OM).Activate 'sélectionne l'onglet OM
ActiveSheet.Range(AD).Select 'sélectionne la cellule de la valeur max
End Sub
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

A essayer mais attention de bien écrire "stock fin de mois" dans tous les onglets:
VB:
=MAX(DECALER(INDIRECT($A5&"!A1");EQUIV("stock fin de mois";INDIRECT($A5&"!A1:A100");0)-1;;;30))
les valeurs 100 et 30 sont à ajuster.

JHA
 

Pièces jointes

  • Recherche val dans onglet.xlsx
    11.5 KB · Affichages: 8

Chubby

XLDnaute Impliqué
Bonjour Robert, JHA, et les zôtres,
Chapeau bas les Barbatrucs. Merci pour ce super travail. Je crains que le vba ne soit pas réellement pour moi, j'ai des difficultés à comprendre tout ça mais je te remercie Robert pour les explications données.
JHA, ta formule est juste parfaite, j'ai modifié les valeurs en particulier 30 qui est devenu 100 et tout est juste comme il faut. Pour ne pas faire d'erreur avec le texte j'ai mis "stock fin de mois" en entête et ça le fait très bien. En revanche pour s'affranchir des valeurs 100 et 30 (de l'exemple) ne pourrait on pas mettre ligne et colonne?
Toujours est il que champion!
Merci encore
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

On peut mettre A:A pour trouver la ligne mais pour la valeur 30 dans l'exemple c'est la largeur de la plage de données mais tu peux mettre 100 ou plus si tu veux.

VB:
=MAX(DECALER(INDIRECT($A5&"!A1");EQUIV("stock fin de mois";INDIRECT($A5&"!A:A");0)-1;;;100))

JHA
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 144
Membres
103 129
dernier inscrit
Atruc81500