Erreur 9 : L'indice n'apparait pas dans la sélection

Bonjour,

J'ai besoin de votre aide sur une macro que j'ai écrite. Elle a pour but de sélectionner et copier des lignes d'une feuille pour les coller les unes à la suite des autres sur une autre feuille... Sauf que le message Erreur 9 : L'indice n'appartient pas à la selection apparait :/! Savez vous comment me débloquer ?

Merci pour votre aide

Sub RecupER()
'
' RecupER Macro
'

While Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 2).Value <> ""

Dim compteur As Integer
compteur = Workbooks("SuiviER.xlsm").Worksheets("Feuil11").Cells(1, 2).Value

 If Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 217).Value <> "" And 
Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 218).Value <> "" And
 Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 219).Value <> "" And 
Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 220).Value <> "" And 
Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 221).Value <> "" And 
Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 222).Value <> "" And 
Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 223).Value <> "" And 
Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 224).Value <> "" And 
Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 225).Value <> "" And 
Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 226).Value <> "" And 
Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i, 227).Value <> "" Then
 Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i).Copy
 End If

 Workbooks("SuiviER.xlsm").Worksheets("Feuil11").Cells(compteur + 4, 1).Value.Paste
i = i + 1
Wend

End Sub

Bonjour,

Peux-tu expliquer cette instruction ?

Workbooks("SuiviER.xlsm").Worksheets("Feuil7").Cells(i).Copy

A+

Je voulais lui demander de me copier la ligne entière si tous les critères de cellules non vides précédents étaient respectés... Du coup pour lui demander la ligne entière, j'ai mis Cells(i) sans préciser de colonne...?

Bonjour,

Pour le message d'erreur ;

- vérifier que les onglets utilisés existent :

* Feuil1

* Feuil7

* Feuil11

- vérifier le nom du fichier

* SuiviER.xlsm

Et ensuite, adapter la macro : ne fonctionne pas ...

Voir en PJ le fichier un peu modifié, mais ne semble pas faire ce qu'il faut.

Bouben

31suivier.xlsm (18.66 Ko)

Bonjour,

....Cells(i) ne pointe pas une ligne mais une cellule.

i représente alors le numéro d'ordre de la cellule dans l'objet auquel réfère .Cells, dans l'ordre de lecture des cellules d'une plage par Excel.

Il est à peu près certain dans le contexte que l'expression ne pointera pas la cellule voulue, et il est donc fort probable que l'erreur vienne de là. Mais comme i n'est pas initialisé dans la procédure, sa valeur doit être 0, et si c'est bien le cas, il est alors sûr que cela provoque une erreur !

Une fois cette erreur surmontée, la ligne qui suit avec Paste en provoquera une autre, car la syntaxe est mauvaise...

Vu l'allure de la macro... (une ligne de code occupant 12 lignes de texte) il est urgent de l'écrire autrement, et peut-être de repenser le problème pour le résoudre en VBA...

Cordialement.

Ouais ca marche pas, il me colle pas le bon truc


D'accord merci MFerrand, mais du coup j'écris comment pour qu'il me copie toute la ligne et non seulement la cellule ?

A mon sens, il te faut te préoccuper d'abord de la valeur de i... ! L'initialiser à 2 par exemple !

Une fois assuré que i représente la ligne voulue, Rows(i) renverra ladite ligne.

Il faudra coller dans la foulée de la copie et supprimer la ligne de collage, ce qui t'évitera une nouvelle erreur.

Mais auparavant il faut reduire ta ligne à rallonge !

En mettant la partie commune sous instruction With... End With (ce qui de plus accélèrera VBA !!)

et tester ton énumération de cellule au moyen d'une boucle :

With Workbooks("SuiviER.xlsm").Worksheets("Feuil7")
    For k = 217 To 227
        If .Cells(i, k).Value ="" Then Exit For
    Next k
    If k > 227 Then .Rows(i).Copy Workbooks("SuiviER.xlsm").Worksheets("Feuil11").Cells(compteur + 4, 1)
End With

Tant qu'on y est, voilà qui devrait déjà être un peu plus rationnel :

Sub RecupER()
    Dim compteur%, i%, k%
    i = 2
    With Workbooks("SuiviER.xlsm")
        While .Worksheets("Feuil7").Cells(i, 2).Value <> ""
            compteur = .Worksheets("Feuil11").Cells(1, 2).Value
            With .Worksheets("Feuil7")
                For k = 217 To 227
                    If .Cells(i, k).Value = "" Then Exit For
                Next k
            End With
            If k > 227 Then  .Worksheets("Feuil7").Rows(i).Copy .Worksheets("Feuil11").Cells(compteur + 4, 1)
            i = i + 1
        Wend
    End With
End Sub

Super merci beaucoup , effectivement c'est beaucoup mieux écrit et maintenant ça tourne sur mon excel simplifié pour essayer, mais j'ai toujours une erreur de l'indice n'apparait pas dans la sélection sur mon vrai excel. Je vais essayer de bien vérifier mes noms utilisés...


Ca y est j'ai copier coller tous mes noms de feuilles et maintenant ca marche !

Merci encore, et je m'excuse pour mon petit niveau en vba

Chaque fois que tu te trouves lancée dans une longue énumération répétitive, dis-toi qu'il y a sûrement une façon de faire autrement et pose la question avant de t'épuiser dessus... Tu pourras à chaque fois découvrir une ou plusieurs instructions VBA utiles que tu n'avais pas encore pensé à utiliser...

Cordialement.

Rechercher des sujets similaires à "erreur indice apparait pas selection"