Aide pour comprendre une macro (Application.Max // .Find)

Bonjour,

J'ai trouvé cette macro datant de 2012 : Comparer deux listes et ajouter la ligne manquante (excel-pratique.com)

J'ai réussi a l'adapter pour qu'elle fonctionne mais j'aimerai de l'aide pour la comprendre afin de progresser pas a pas un peu comme avec F8

    lg = Application.Max( _
        f1.Cells.Find("*", , , , xlByRows, xlPrevious).Row, _
        f2.Cells.Find("*", , , , xlByRows, xlPrevious).Row)

Ici je ne comprend pas trop la valeur attribuée a lg.
Que calcul Application.Max ?
Comment fonctionne Find ici pour comparer ? A quoi correspond "*" et comment le .find "sait" qu'il doit commencer a partir de la dernière ligne ?

Ma deuxieme question est sur le fonctionnement de cette ligne :

    Range("a2:e2" & lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
    Range("r1:r2"), CopyToRange:=Range("g2:k2"), Unique:=False

Ne comprenant pas trop a quoi correspond lg, je ne comprend pas la Range. Je comprend que si le critère est "FAUX" alors la copie va s'effectué depuis ? vers G2:k2

A partir de la, j'aimerai dire combien de lignes ont été ajouté et combien de lignes n'étaient pas présente sur f1 (tout en faisant passer en rouge les lignes sur f2 qui ne figure pas sur f1)

Merci d'avance pour votre aide

Hello,

Que calcul Application.Max ?

Que nous dit l'aide en ligne ?

Renvoie la plus grande valeur d'un ensemble de valeur

Quésako ? Donne la + grande valeur

f1.Cells.Find("*", , , , xlByRows, xlPrevious).Row

Quésako ? Cherche dans toutes les cellules de la feuille "f1" la derniere et renvoie la ligne

f2.Cells.Find("*", , , , xlByRows, xlPrevious).Row

Quésako ? Cherche dans toutes les cellules de la feuille "f2" la derniere et renvoie la ligne

lg = Application.Max( _
        f1.Cells.Find("*", , , , xlByRows, xlPrevious).Row, _
        f2.Cells.Find("*", , , , xlByRows, xlPrevious).Row)

Quésako ?? Retourne moi la + grande ligne entre les 2 feuilles

"*"

Quésako ? Renvoie tout

"toto*"

Quésako ? Renvoie tout ce qui commence par "toto"

Range("a2:e2" & lg)

Je n'utilise pas cette technique mais pour moi si lg = 25 par exemple alors cela signifie range(A2:E225)

Merci beaucoup :)

je commence a comprendre.
Donc finalement, si je comprend bien, dans le code suivant :

lg = Application.Max( _
        f1.Cells.Find("*", , , , xlByRows, xlPrevious).Row, _
        f2.Cells.Find("*", , , , xlByRows, xlPrevious).Row)

    Range("o2") = "=COUNTIF(Ordonnancer!a2:a" & lg & ",a2)=0"     

    Range("a1:d" & lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
    Range("o1:o2"), CopyToRange:=Range("g1:j1"), Unique:=False

le lg calcul le maximum de cellule afin afin de s'assurer que le filtre avancé soit appliqué sur toute les cellules.

le COUNTIF calcule les critères : Lorsque qu'aucune cellule de la deuxième feuille (colonne a a partir de a2) n'a la valeur de la première feuille (colonne a a partir de a2)

le Advancefilter xlfiltercopy copie toutes lignes qui ne serait pas présente sur la première feuille.

J'aimerai ajouter une range de nom que je ne souhaite pas copier même si ils ne sont pas sur la première feuille.
Range de nom : M12:Q20
Colonne a comparer : N12:N20

J'ai essayé comme cela :

Range("r2") = "=COUNTIF(n12:n" & "Feuil1!b3:b" & lg & ",b3)=0"

Mais ca ne fonctionne pas... En fait, cette commende m'ouvre le gestionnaire de fichier et me demande de mettre a jour mes valeurs...

Voici mon code complet : (il ajoute les noms manquant sur la Feuil1 et sur cette même feuille, il surligne en rouge ceux absents de la Feuil2)
Tout ca marche parfaitement, mais moi, j'aimerai que les noms présents en M12:Q20 ne soient pas copié.

Option Explicit
Sub Complète()
Dim lg&, f1 As Worksheet, f2 As Worksheet
Dim RedRange As Range
Dim i, y, x, z As Integer

x = 0
z = 0

    Application.ScreenUpdating = False
    Set f1 = Sheets("Feuil2")
    Set f2 = Sheets("Feuil1")
    f1.Activate
    lg = Application.Max( _
        f1.Cells.Find("*", , , , xlByRows, xlPrevious).Row, _
        f2.Cells.Find("*", , , , xlByRows, xlPrevious).Row)

    Range("r2") = "=COUNTIF(n12:n" & "Feuil1!b3:b" & lg & ",b3)=0"

    Range("a2:e2" & lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
    Range("r1:r2"), CopyToRange:=Range("g2:k2"), Unique:=True

    Range("g3:j" & [g65000].End(xlUp).Row) _
    .Copy Destination:=f2.Range("a" & Rows.Count).End(xlUp)(2)

    Set RedRange = Range("g3:j" & [g65000].End(xlUp).Row)
    x = RedRange.Rows.Count

    Columns("g:k").Clear
    Columns("R").Clear

    lg = Application.Max( _
        f2.Cells.Find("*", , , , xlByRows, xlPrevious).Row, _
        f1.Cells.Find("*", , , , xlByRows, xlPrevious).Row)

    Range("r2") = "=COUNTIF(Feuil2!b3:b" & lg & ",b3)=0"

            f2.Range("a2:e2" & lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
            f1.Range("r1:r2"), CopyToRange:=Range("g2:k2"), Unique:=False

            Set RedRange = Range("g3:j" & [g65000].End(xlUp).Row)
            z = RedRange.Rows.Count

            For i = 1 To RedRange.Rows.Count

                For y = 3 To lg

                    If RedRange(i, 1) = f2.Cells(y, 1) Then

                        f2.Cells(y, 1).Interior.Color = RGB(250, 0, 0)
                        f2.Cells(y, 2).Interior.Color = RGB(250, 0, 0)
                        f2.Cells(y, 3).Interior.Color = RGB(250, 0, 0)
                        f2.Cells(y, 4).Interior.Color = RGB(250, 0, 0)
                        f2.Cells(y, 5).Interior.Color = RGB(250, 0, 0)

                    End If

                Next y

            Next i

        MsgBox x & "Employé(s) ajouté(s) et " & z & "Employé(s) absent de la nouvelle liste"

    Columns("g:k").Clear
    Columns("R").Clear

    f2.Activate
End Sub

Merci d'avance

Hello,

il manque la feuille :

Range("r2") = "=COUNTIF(Nomdelafeuile!n12:n" & "Feuil1!b3:b" & lg & ",b3)=0"

Merci pour ton aide.

Malheureusement j'avais déja fait un f1.activate plus haut.

Mais même en rajoutant la feuille, je me retrouve avec l'explorateur de fichier qui s'ouvre avec l'intitulé : "Mettre a jour les valeurs : nFeuil1"

Rechercher des sujets similaires à "aide comprendre macro application max find"