VBA L'indice n'appartient pas à la sélection

Bonjour à tous et toutes,

Comme indiqué dans le titre, j'obtiens ce message d'erreur sur une macro que j'utilise depuis 2 mois sans aucun souci. Je précise qu'aucune modification n'a été faite (seule le nombre de lignes varie), pas d'ajout de colonne, pas de modif d'en tête, de formule etc.

Je place le début de la macro car en ayant éxécuté ligne par ligne les fonctions, le message apparait à partir de la fonction SI :

'Fonction SI binaire selon besoin < date choisie
If Workbooks("Navette_Mazet_bis").Sheets("Composants").Cells(DateC, 2) <= Workbooks("Navette_Mazet_bis").Sheets("Analyse").Cells(1, 11) Then

J'ai modifié les symboles de comparaisons (<=), ajoutés l'extension des fichiers, ajouté le chemin de stockage, renommé les onglets au propre, rien n'y fait.

Jusque là il n'y avait aucun souci. J'ai récupéré le code sur un fichier sauvegarde mais même souci donc je ne vois pas ce qui a causé cette erreur du jour au lendemain. Les extractions sont basées sur des variantes "fixes" donc pas de modification de mise en forme qui auraient pu se glisser suite à une maj de l'erp.

L'aide microsoft fait référence à une boucle mais là on bloque sur une fonction SI

Globalement, j'importe 2 tableaux que je colle (sans aucune modif, on est sur un pur copier/coller que je fais manuellement pour l'instant). Un 3e table est alimenté selon certains critères qu'une boucle passe en revue jusqu'à rencontrer une ligne vide.

Le code est probablement loin d'être "propre" mais il est étrange que ça plante après 2 mois d'utilisation quotidienne.

Sub Navette_Rose()

'Masquer l'animation de la macro
Application.ScreenUpdating = False

'Déclaration de la variable
Dim Ligne, Magasin, DateC As Long

'N° de ligne où démarre la boucle
Ligne = 2 'S'arrête à la première ligne vide
Magasin = 2 'Incrémente une ligne dans l'onglet Analyse à chaque ligne retrouvée pour les filtres magasin
DateC = 2 'Incrémente une date dans l'onglet Composant jusqu'à renconter une ligne vide
Pick = 2 'Incrémente le picking

'Activation boucle pour date de besoin
Do Until Workbooks("Navette_Mazet_bis").Sheets("Composants").Cells(Ligne, 1) = ""

'Fonction SI binaire selon besoin < date du choisie
If Workbooks("Navette_Mazet_bis").Sheets("Composants").Cells(DateC, 2) <= Workbooks("Navette_Mazet_bis").Sheets("Analyse").Cells(1, 11) Then

Workbooks("Navette_Mazet_bis").Sheets("Composants").Cells(DateC, 12) = 1

Else
End If

'Ligne suivante dans l'onglet Composants
DateC = DateC + 1

Loop

'Activation de la boucle jusqu'à ce que la cellule soit vide
Do Until Workbooks("Navette_Mazet_bis").Sheets("Composants").Cells(Ligne, 1) = ""

Bonjour Ecam,

Vous devez avoir une formule en A1

Il nous manque un certain nombre d'informations, avec un fichier anonymisé qui est recommandé, ce serait mieux

A+

Salut,

En principe ce message d'erreur interviens si Excel ne trouve pas un Objet, Classeur, Tableau, Feuille, etc..

Si tu dis qu'il bloque sur le If... c'est qu'il a bien passé le Do Until, donc il trouve bien Workbooks("Navette_Mazet_bis").Sheets("Composants").Cells(Ligne, 1) Donc regardes ceci :

  • Bloque-t-il sur la première itération ?
  • Vérifie bien le nom de la feuille "Analyse"
  • Cette feuille n'est-elle pas protégée ?

Bonjour,

Merci pour vos retours. Je rajoute le fichier, drastiquement modifié dans le contenu pour des questions de confidentialité mais la structure et les formules sont identiques.

Au départ j'avais ajouté un copie/colle automatique des 2 tableaux, je l'avais placé avant la fonction SI et ils se collaient très bien mais je bloque toujours arrivé à la fonction SI.

Pour la procédure :

Dans l'onglet analyse je choisis une date où je veux récupérer les besoins antérieur à la date. Il copiera le nom de l'article dans l'onglet analyse.

Ensuite je fais des recherches v pour récupérer les stocks

Pour finir quelques calculs simples pour déterminer si j'ai un manquant.

21navette-bis.xlsm (55.74 Ko)

Merci

Salut,

Ton classeur se nomme Navette-bis et non pas Navette_bis doc c'est normal que cela plante.

Do Until Workbooks("Navette_bis").Sheets("Composants").Cells(DateC, 1) = ""

Par contre y'a plus simple à faire sur tes boucles, utiles des tableaux structurés cela t'évitera beaucoup de travail pour rien.

Quand tu testes la date ici

If Workbooks("Navette_bis").Sheets("Composants").Cells(DateC, 2) <= Workbooks("Navette_bis").Sheets("Analyse").Cells(1, 11) Then

Tu pourrais en profiter pour faire ton copier coller.

Les tableaux structurés t'éviteront aussi de reformater les cellules.

Edit ...

Workbooks("Navette-bis.xlsm").Worksheets("Composants")

Bonjour,

Mea culpa pour le titre, je l'ai renommé spécifiquement pour l'importer sur le site j'ai mis le - au lieu du _ . De base tout est en underscore.

Rechercher des sujets similaires à "vba indice appartient pas selection"