Vérifier plusieurs plages entre elles

Bonjour,

Dans un fichier excel je souhaite vérifier certaines plage de données entre deux fichiers, j'ai donc assemblé certains code sur le net mais j'ai soit une erreur soit les plages que je souhaite vérifier ne sont pas exactes. Je pense que le problème vient de set range 2 qui fait n'importe quoi...

Voici mon code :

Set range1 = CurrentWorksheet.Range("G7:G35")
Set range2 = SourceWorksheet3.Range(MatchedColumn & "7:" & MatchedColumn & "35")
'Set range2 = SourceWorksheet3.Range(Cells(7, MatchedColumn)).Union(targetWorksheet.Range(Cells(35, MatchedColumn)))

Dim i As Integer
For i = 1 To range1.Count

If range1(i, 1).Value <> range2(i, 1).Value Then
    MsgBox "Cell " & range1(i, 1).Address & " in Sheet1 does not match cell " & range2(i, 1).Address & " in SourceWorksheet3."
End If

Next i

'Compare the second range
Set range1 = CurrentWorksheet.Range("G41:G74")
Set range2 = SourceWorksheet3.Range(MatchedColumn & "40:" & MatchedColumn & "73")

For i = 1 To range1.Count

If range1(i, 1).Value <> range2(i, 1).Value Then
    MsgBox "Cell " & range1(i, 1).Address & " in CurrentWorksheet does not match cell " & range2(i, 1).Address & " in SourceWorksheet3."
End If

Next i

mon but étant de vérifier si dans la feuille 1 les valeurs de la plage G7:G35 sont égales aux valeurs de la plage ligne 7 à ligne 35 et avec une colonne dans un Long "MatchedColumn " déjà définie et si dans la feuille 1 les valeurs de la plage G41:G74 sont égales aux valeurs de la plage la plage 40:73 avec toujours MatchedColumn

Merci pour votre aide,

ambou

Bonjour,

A minima, il faudrait le code complet de la procédure, savoir comment elle est appelée et idéalement le fichier en l'ayant anonymisé s'il contient des données persos.

Cdlt,

Cylfo

Voici le fichier, je ne sais pas si ça va t'aider, le fichier excel SourceWorkbook possède la meme structure que le 3e onglet mais les column a b c sont divisé en 3 sheet different. Pour information je check la column b car c'est la somme de a et c

Merci,

Cordialement,

Ambou

Bonjour,

Je te confirme qu'avoir le fichier aide grandement même si dans ton cas, le code du fichier joint ne correspond pas au code copié dans le post initial

J'ai débugué le code du fichier joint, les modifs sont encadrées par les commentaires '## Cylfo - début et '## Cylfo - fin.

Dans le module, j'ai ajouté la déclaration "Option Explicit" que tu pourras ôter si tu le souhaites mais elle m'a permis d'identifier immédiatement les variables non déclarées dont une utilisée mais non initialisée ...

A ta disposition si tu as besoin d'informations complémentaires.

Cdlt

Bonjour Cylfo,

Tu as raison pardon, un ami m'a conseillé d'utiliser une IA mais le code ne marchait toujours pas j'ai du sauvegarder sans faire exprès,

J'ai deux question si tu sais :

pourquoi ce code ne marche pas, je l'ai pourtant vu plusieurs fois sur internet :

MatchedColumn = Application.WorksheetFunction.Match(CurrentWorksheet.Range("D3").Value; SourceWorksheet.Range("A3:DE3").Value; 0)

et pourquoi i+6 ici (générer par l'IA) :

If rngRange1.Cells(i, 1).Value <> SourceWorksheet2.Cells(i + 6, MatchedColumn).Value Then

Par il m'affiche toujours une erreur je ne comprends toujours pourquoi.... je peux décaler des ligne ou colunm dans les deux fichier si tu veux, sinon c'est pas grave :)

Merci,

Cordialement,

Ambou

Pour la 1ère question, tu as l'explication et la syntaxe dans les commentaires et le code du fichier que je t'ai renvoyé.

Pour la 2ème : La comparaison se fait entre un objet Range contenant par exemple les cellules "G7:G35" et un objet Cells de la feuille. Donc quand tu fais référence à la line 1 de l'objet Range tu es sur la ligne 7 de la feuille alors que lorsque tu fais référence à la ligne 1 de l'objet Cells de la feuille tu es sur la ligne 1, d'où un décalage de 6.

Tu as regardé le code du fichier que je t'ai envoyé, tu devrais pouvoir l'utiliser pour corriger ta procédure sinon envois le bon fichier avec le bon code ...

Pour la premiere question j'ai vu que tu avais mis le bon code dessus, mais juste pour comprendre c'est le fait de mettre Dim MatchedColumn As Long et non Dim MatchedColumn As variant qui a fait buggé vba? A quoi corresponds :"CLng"?

le code marche bien ... j'ai mal lu la phrase ...

Merci encore pour ton aide

PS: encore une fois j'abuse de ton expertise et j'en suis désolé, pourquoi mon code marchais pas :

Set range2 = SourceWorksheet3.Range(MatchedColumn & "7:" & MatchedColumn & "35")

Edit, ça marche 1 fois sur 2 la vérification, je laisse tomber cette m... qui en sert à rien

Pour le Clng() : j'ai oublié de l'expliquer ... Quand tu fais un Match avec une date, il faut que cette recherche s'effectue avec le quantième (nombre de jours de la date d'où la conversion en entier long) et pas avec la date formatée car dans ce cas la recherche n'abouti jamais et génère une erreur.

Pourquoi le code ne marchait pas : l'instruction est syntaxiquement correcte donc l'explication est probablement dans le code qui la précède mais tu ne l'as pas posté donc je ne peux pas te répondre.

Rechercher des sujets similaires à "verifier plages entre"