Incompréhension code

Bonjour le forum,

J'ai récupéré un code sur le net, seulement je dois avouer qu'il y aune chose que je ne comprend pas.

Celui-ci me sert à comprarer deux liste dans deux feuilles différentes et à me dire si mes données sont bien présentes sur la Feuil1

Sub Compare()
Set sh2 = Sheets("Feuil1").range("E2:E100")
Set sh1 = Sheets("Feuil2").range("B2:B50")

For Each c In sh1
MaValeur = c.value
If MaValeur <> "" then
Set Plage = sh2.Columns("A:A").Cells.Find(MaValeur, lookat:=xlwhole)' je ne comprend pas pourquoi la référence à colonne "A"
If Plage is nothing then
MsgBox c.Value
end if
end if
Next
End sub

Le code fonctionne parfaitement, ce qui est l'essentiel, mis le comprendre c'est encore mieux.

Je ne comprend pas pourquoi la référence à la colonne "A".

Si je change en colonne "E" qui est ma logique, le code fonctionne toujours mais ne trouve aucune concordence entre les deux listes.

Merci pour l'aide,

Jeremy


Le code me donne les données qui sont manquantes.

Je ne parviens pas à créer un msgBox qui pourrait me dire que toutes les données sont bien présentes.

Jeremy

Bonjour,

en fait sh1 et sh2 ne sont pas de feuilles mais des plages

sh2 fait référence à Sheets("Feuil1").range("E2:E100"), ce faisant sh2.columns(A:A) indique la première colonne de la plage sh2 soit le range("E2:E100") de ta feuille feuil1

la colonne E n'existe pas dans la plage sh2.

pour avoir un message indiquant que tout est ok :

Sub Compare()
Set sh2 = Sheets("Feuil1").range("E2:E100")
Set sh1 = Sheets("Feuil2").range("B2:B50")
ctr=0
For Each c In sh1
MaValeur = c.value
If MaValeur <> "" then
Set Plage = sh2.Columns("A:A").Cells.Find(MaValeur, lookat:=xlwhole)' je ne comprend pas pourquoi la référence à colonne "A"
If Plage is nothing then
MsgBox c.Value
ctr=ctr+1
end if
end if
Next
if ctr=0 then msgbox " tout est ok"
End sub

Bonjour Jeremy. bonjour le forum,

En fait la référence à la colonne A signifie que la recherche se fait sur la première colonne de ta plage.

Si tu définis une plage de cellules des colonnes C à R : Set PL = Range("C1:R150"), Alors PL.Columns("A:A") fait référence `a la première colonne de ta plage donc à la colonne C. C'est vrai que c'est pas très pratique comme syntaxe. Je lui préfère PL.Columns(1) qui est plus explicite... D'autant plus que dans ton cas la plage ne contient qu'une seule colonne ! donc la référence à la première colonne est superflue !...

Le code peut s'écrire (avec les déclarartions de variables) :

Sub Compare()
Dim Sh2 As Range
Dim Sh1 As Range
Dim CTR As Integer
Dim C As Range
Dim MaValeur As Variant
Dim Plage As Range

Set Sh2 = Sheets("Feuil1").Range("E2:E100")
Set Sh1 = Sheets("Feuil2").Range("B2:B50")
CTR = 0
For Each C In Sh1
    MaValeur = C.Value
    If MaValeur <> "" Then
        Set Plage = Sh2.Cells.Find(MaValeur, lookat:=xlWhole)
        If Plage Is Nothing Then
            MsgBox C.Value
            CTR = CTR + 1
        End If
    End If
Next C
If CTR = 0 Then MsgBox "Tout est ok."
End Sub

[Édition]

Arf ! Grillé lar l'Acide, que je salue au passage...

Merci beaucoup pour vos réponses maintenant je comprends au moins le code que j'utilise.

Vous souhaitant un bon week-end

Jeremy

Rechercher des sujets similaires à "incomprehension code"