Macro Rechercher valeur et copier valeur max Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
l
letruite
Jeune membre
Jeune membre
Messages : 46
Inscrit le : 13 septembre 2019

Message par letruite » 13 septembre 2019, 13:21

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...
Avatar du membre
Florian53
Membre dévoué
Membre dévoué
Messages : 617
Appréciations reçues : 51
Inscrit le : 3 juin 2015
Version d'Excel : Office 365

Message par Florian53 » 13 septembre 2019, 14:08

Bonjour letruite,

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

:joindre:
Les grandes réussites sont le fruit de l'apprentissage durable. Apprenez à apprendre chaque jour.

:btres:
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'174
Appréciations reçues : 377
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 13 septembre 2019, 14:30

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
l
letruite
Jeune membre
Jeune membre
Messages : 46
Inscrit le : 13 septembre 2019

Message par letruite » 13 septembre 2019, 14:37

Bonjour,

Merci pour ton retour!

Ci joint un fichier exemple.
Exemple Macro.xlsx
(13.43 Kio) Téléchargé 3 fois
l
letruite
Jeune membre
Jeune membre
Messages : 46
Inscrit le : 13 septembre 2019

Message par letruite » 13 septembre 2019, 14:46

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?
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'174
Appréciations reçues : 377
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 13 septembre 2019, 14:54

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
1 membre du forum aime ce message.
l
letruite
Jeune membre
Jeune membre
Messages : 46
Inscrit le : 13 septembre 2019

Message par letruite » 13 septembre 2019, 15:08

Merci.
Ensuite pour avoir la valeur max j'applique la fonction WorksheetFunction.Max() dans la boucle IF?
l
letruite
Jeune membre
Jeune membre
Messages : 46
Inscrit le : 13 septembre 2019

Message par letruite » 13 septembre 2019, 15:10

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?
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'174
Appréciations reçues : 377
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 13 septembre 2019, 15:18

Bonjour,
T'es sur Lyon que je te paye un coup à boire?
Hélas non ! :cry:
1 membre du forum aime ce message.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message