Macro Rechercher valeur et copier valeur max

Bonjour à tous!

Je viens à vous car je suis débutant en VBA et souhaite des conseils et avis sur la petite macro que j'essaye de réaliser.

Je possède un classeur avec deux feuilles: "Feuil1" et "Feuil2"

Dans "Feuil1": en colonne A j'ai le noms de villes, en B le noms des départements correspondants et en C des nombres de 1 à 10.

Dans "Feuil2": en cellule A1 j'ai le nom de la ville "Vienne" et en B1 j'ai le nom du département "Isere"

Voila ce que j'aimerais faire.

Je souhaite que Si la ville "Vienne" de la "Feuil2" est trouvée dans la colonne A de la "Feuil1" et que "Isere" de la "Feuil2" est trouvée dans la colonne B de la "Feuil1", alors la valeur maximale des 10 prochains nombres en colonne C dont le point de départ correspond à ligne ville et département trouvée soit collée en cellule C1 de ma "Feuil2".

Exemple dans la "Feuil1", après la recherche "Vienne " et "Isere" se trouve à la ligne 96 alors je souhaite qu'apparaisse en cellule C1 de la "Feuil2" la valeur max de la plage ("C97:C106").

Si vous pouviez m'aider car je patauge grandement...

Bonjour letruite,

Si vous pouviez m'aider car je patauge grandement à vous comprendre.

bonjour,

il est effectivement plus que préférable de mettre un fichier.

voici une proposition sur base des explications que j'ai comprises.

Sub aargh()
    With Sheets("feuil1")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row 'dernière ligne sur feuil1
        Set plage = .Cells(1, 1).Resize(dl, 1) 'plage contenant les villes sur feuil1
        ville = Sheets("feuil2").Range("A1") 'ville à chercher
        dept = Sheets("feuil2").Range("B1") 'département à chercher
        Set re = plage.Find(ville, lookat:=xlWhole, MatchCase:=False) 'recherche de la ville
        If re Is Nothing Then 'ville non trouvée
            MsgBox "ville " & ville & " non trouvée en feuil1"
        Else 'ville trouvée, le nom de ville peut exister dans plusieurs départements
            fa = re.Address 'addresse de la première ville trouvée
            trouve = False 'ville + departement trouvé ? non par défaut
            Do 'on parcourt la plage à la recherche de villes portant le même nom
                If re.Offset(, 1) = dept Then 'on a trouvé ville + departement
                    re.Offset(, 2).Resize(10, 1).Copy Sheets("feuil2").Range("c1") 'on copie
                    trouve = True 'on a trouve
                Else 'on n'a pas trouvé
                    Set re = plage.FindNext(re) 'on cherche l'occurrence suivante de la ville
                End If
            Loop Until re.Address = fa Or trouve ' on boucle tant qu'il y a des villes portant ce nom et tant qu'on n'a pas trouvé
            If Not trouve Then
                MsgBox "ville " & ville & " non trouvée dans le departement " & dept
            End If
        End If
    End With
End Sub

Bonjour,

Merci pour ton retour!

Ci joint un fichier exemple.

4exemple-macro.xlsx (13.43 Ko)

Déjà merci pour cette réactivité et la macro bien détaillée et commentée pour un débutant comme moi.

Je viens de tester, ça marche bien pour la recherche de la ville.

Par contre il me met la liste des 10 valeurs et non la valeur maximale.

Par ailleurs et parce que j'aime bien comprendre de bout en bout, peux tu m'expliquer à quoi correspond la fonction resize lorsque on "applique et définit" la plage?

bonjour,

voici la macro adaptée sur base de l'info déduite de ton fichier.

Sub aargh()
    Set ws2 = Sheets("feuil2")
    With Sheets("feuil1")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row    'dernière ligne sur feuil1
        Set plage = .Cells(1, 1).Resize(dl, 1)    'plage contenant les villes sur feuil1
        dlv = ws2.Cells(Rows.Count, 1).End(xlUp).Row
        For i = dlv To 1 Step -1
            ville = ws2.Range("A" & i)    'ville à chercher
            If ville <> "" Then
                dept = ws2.Range("B" & i)    'département à chercher
                Set re = plage.Find(ville, lookat:=xlWhole, MatchCase:=False)    'recherche de la ville
                If re Is Nothing Then    'ville non trouvée
                    MsgBox "ville " & ville & " non trouvée en feuil1"
                Else    'ville trouvée, le nom de ville peut exister dans plusieurs départements
                    fa = re.Address    'addresse de la première ville trouvée
                    trouve = False    'ville + departement trouvé ? non par défaut
                    Do    'on parcourt la plage à la recherche de villes portant le même nom
                        If re.Offset(, 1) = dept Then    'on a trouvé ville + departement
                            ws2.Cells(i, 3) = Application.Max(re.Offset(1, 2).Resize(10, 1)) 'on prend la valeur max des 10 lignes suivantes en colonne 3
                            trouve = True    'on a trouve
                        Else    'on n'a pas trouvé
                            Set re = plage.FindNext(re)    'on cherche l'occurrence suivante de la ville
                        End If
                    Loop Until re.Address = fa Or trouve    ' on boucle tant qu'il y a des villes portant ce nom et tant qu'on n'a pas trouvé
                    If Not trouve Then
                        MsgBox "ville " & ville & " non trouvée dans le departement " & dept
                    End If
                End If
            End If
        Next i
    End With
End Sub

Merci.

Ensuite pour avoir la valeur max j'applique la fonction WorksheetFunction.Max() dans la boucle IF?

Edit: Super c'est bon j'avais pas vu que tu avais fait la modif!

Merci beaucoup!

T'es sur Lyon que je te paye un coup à boire?

Bonjour,

T'es sur Lyon que je te paye un coup à boire?

Hélas non !

Rechercher des sujets similaires à "macro rechercher valeur copier max"