Incompréhension code Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
J
JeremyW
Membre fidèle
Membre fidèle
Messages : 439
Appréciation reçue : 1
Inscrit le : 16 juillet 2013
Version d'Excel : 2003 & 2007

Message par JeremyW » 10 avril 2015, 16:06

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
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 » 10 avril 2015, 16:17

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
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 3'882
Appréciations reçues : 182
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 10 avril 2015, 16:32

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...
Modifié en dernier par ThauThème le 11 avril 2015, 11:56, modifié 1 fois.
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
J
JeremyW
Membre fidèle
Membre fidèle
Messages : 439
Appréciation reçue : 1
Inscrit le : 16 juillet 2013
Version d'Excel : 2003 & 2007

Message par JeremyW » 10 avril 2015, 17:29

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

Vous souhaitant un bon week-end

Jeremy
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message