Erreur "i n'appartient pas à la selection "

Bonjour, je suis débutante en vba et je n'arrive pas à résoudre ce problème. On me dit que l'indice i n'appartient pas à la séléction.

Merci.

Sub compareSheets()
Application.ScreenUpdating = False

Dim i As Integer
Dim j As Integer
Dim cmp As Integer
Dim nbLignes1 As Integer
Dim nbLignes2 As Integer

Worksheets("Données CSV").Cells.Interior.Pattern = xlNone

nbLignes1 = Worksheets("Données CSV").Range("A65536").End(xlUp).Row
nbLignes2 = Worksheets("Données Apollo").Range("A65536").End(xlUp).Row

For i = 1 To nbLignes1
cmp = 0

For j = 1 To nbLignes2
If Worksheets("Données CSV").Range("E" & i + 2).Value = Worksheets("Données Apollo").Range("A" & j + 8).Value Then
cmp = cmp + 1
End If
Next j

If cmp = 0 Then
Worksheets("Données CSV").Rows(i).Interior.ColorIndex = 3
End If

Next i

Application.ScreenUpdating = True
End Sub

2 réponses

  1. Bonjour,

    Je dirai normal ...

    I va de 1 à 65536 or dans votre test vous faites i+2 donc 65538 qui ne doit probablement pas exister.

    Question :

    êtes vous obligée de parcourir l'ensemble du fichier Excel ?

    Ceci :
    If Worksheets("Données CSV").Range("E" & i + 2).Value = Worksheets("Données Apollo").Range("A" & j + 8).Value Then
    peut être remplacé par ceci:
    If Worksheets("Données CSV").cells(5,i+2) = Worksheets("Données Apollo").cells(1,j+8) Then

    Personnellement je prefère utiliser Cells que Range, cela permet une navigation en ligne et en colonne plus facilement.

    Pour que votre programme marche sans soucis vous pouvez ajouter :
    "if(i +2 <= 65536) then "
    juste avant la 2eme boucle for.

    Si vous avez d'autre question ne pas hésiter.
    1
    1. Merci beaucoup scinarf mais le problème ne venait pas de là finalement. Excel ne reconnaisait pas la Worksheets("Données Apollo"). J'ai du passer par :

      Set principal = ThisWorkbook
      principal.Sheets(2).Activate
      0
      1. Si tu souhaites manipuler le nom tu peux toujours faire ceci :

        dim NomFeuille as string

        NomFeuille = sheets(2).name

        sheets(Nomfeuille).cells(.......)
        0
      2. Merci scinarf.

        Sais tu comment réinitialiser une feuille. J'ai un tableau dynamique dans lequel je récupere des données. Je voudrai créer un bouton qui me permet de supprimer le tableau de la ligne 3 jusqu'a la dernière ligne et de la colonne 1 à la derniere colonne. Peux-tu m'aider ?
        0
      3. faire un Range(cells(1,3),cells(1,65536)).ClearContents
        Ca devrait marcher.
        0
      4. Merci scinarf
        0