Erreur "Indice n'appartient pas à la plage" etrange

Bonjour tout le monde ! C'est de nouveau moi aha

J'ai un nouveau soucis qui me donne l'erreur présente dans le titre je vais essayer d'expliquer mais ça va etre difficile :

Je résume le contexte , j'ai 3 classeur excel, le premier sert a saisir des données, qui sont envoyé dans le deuxieme classeur, le troisieme sert d'historique j'explique: lorsqu'une ligne saisit dans le classeur un existe déja dans le deuxieme on demande a l'utilisateur si il souhaite modifié la ligne si il clique oui la ligne déja existante dans le classeur 2 est copié dans le 3eme, j'espere que jusqu'ici vous me suivez mdr !!

Mon problème c'est que : lorsque je fais des tests pour vérifier que tout marche évidemment ça ne marche pas quand :

Quand je saisit 3 ligne dans le classeur 1 dont 2 qui existe déja dans le classeur 2:

Lors du premier passage sur la ligne déja présente aucun pb il modifie la ligne et met l'ancienne dans l'historique,

Lors du passage sur la 2eme ligne déja présente, il n'arrive plus a ouvrir l'historique est me dit "L'Indicde n'appartient pas à la plage"

Je copie une partie du code étant donnée que je suis soumis a un contrat de confidentialité je ne peut pas donner le code entier ou le fichier même si je sais que ça aiderait ..

La sub qui transfert les données du classeur 1 à 2 en modifiant l'historique :

Sub transfert() 's'ouvre si l'utilisateur a cliqué oui dans la fenetre demandant si la modification doit être faite
    Windows("Classeur2.xlsm").Activate'Ouvre le classeur contenant toute les lignes
    Sheets("Sheet1").Select

    present2.EntireRow.Select 'Selectionne la ligne devant être modifié dans le classeur 2
    Selection.Copy'La copie
   Workbooks("Historique DCODE.xlsm").Activate   'Active l'historique
    Sheets("Sheet1").Select'Va dans la feuille 1 de l'historique
    DernLigneH1 = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1 'Pour aller dans la derniere ligne vide
    Workbooks("Historique DCODE.xlsm").Worksheets("Sheet1").Range("A" & DernLigneH1).Select'Va dans la derniere ligne vide

    'Colle dans la dernière ligne de l'historique
    ActiveSheet.Paste   'Colle l'ancienne ligne

Windows("Classeur2.xlsm").Activate 'Va dans le classeur 2
    Sheets("Sheet1").Select

     present2.EntireRow.Delete 'Supprime l'ancienne ligne (qu'on vient de mettre dans l'historique)

    Windows("Classeur1.xlsm").Activate 'Retour dans le classeur 1 

    Sheets("Sheet4").Select 'Va dans la feuille4 
    Range("A" & i & ":" & "AE" & i).Select 'Selectionne la nouvelle ligne 
    Selection.Copy 'Copie la selection
    Windows("Classeur2.xlsm").Activate 'Va dans le classeur 2

    DernLigneC = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row Cherche la derniere ligne vide du classeur2
    Workbooks("Classeur2.xlsm").Worksheets("Sheet1").Range("A" & DernLigneRI).Select 'Colle la nouvelle ligne 
    ActiveSheet.Paste

Windows("Classeur1.xlsm").Activate
    Workbooks("Classeur1.xlsm").Worksheets("Sheet4").Range("A" & i & ":" & "AE" & i).Select 'Selectionne la ligne qu'on vient de coller dans le classeur2
    Selection.ClearContents 'vide la ligne
    Selection.ClearFormats 'vide la ligne

    'Ferme l'historique en enregistrant sans demander l'avis a l'utilisateur
    Workbooks("Historique DCODE.xlsm").Close True 

End Sub

Désolé si c'est confus ça me fais vraiment c****de ne pas pouvoir donner plus de code ...

Bonjour,

Une suggestion : il y a une balise "Code" au-dessus de la fenêtre de réponse ; on sélectionne le code dans le post, on clique sur la balise, et le code devient immédiatement plus facile à lire ! Ce serait bien de l'utiliser.

Le code est à réécrire pour en faire disparaître tous les Select, Selection et Activate, issus d'enregistrements... Sans modèle, la réécriture à distance n'est pas sans risque. Mais il y a une forte probabilité que l'erreur disparaisse une fois ceci fait, car elle ne provient pas de la ligne en elle-même mais de la façon dont se déroule l'exécution.

Pour essayer de détecter où se situe le problème (sans classeur) il faut au moins la procédure transfert en entier, et la procédure appelante.

Cordialement.

Bonjour! merci du conseil je me demandais comment les gens faisaient pour mettre le code en évidence

Voila j'ai rajouté la fin de la fonction transfert,il n'y à pas réellement de fonction appelante(enfin je crois ) car la fonction transfert ne se lance que si l'utilisateur à cliqué sur le bouton oui lorsque la fenêtre demandant "Ce code (present2) existe déja voulez vous modifier la ligne ?" est apparut

Il y a forcément une procédure appelante, sans doute celle déclenchée à partir du bouton, cette procédure ne s'appelle pas toute seule.

Cette procédure est nécessaire pour voir l'enchaînement. Il faut aussi indiquer les déclarations de variables niveau module, car aucune n'est déclarée dans la procédure, en particulier i qui est utilisée sans qu'aucune valeur lui soit affectée dans cette procédure.

En tout état de cause, le classeur Historique est fermé en fin de cette procédure : donc lorsqu'elle est appelée à nouveau, elle ne va plus le trouver, d'où erreur 9 puisque le classeur cherché n'est plus ouvert.

Mais pour rectifier ça sans risquer de générer une autre erreur, il faut avoir une vue d'ensemble !

Cordialement.

J'ai mis en commentaire la ligne qui ferme automatiquement l'historique il semble que tout marche je vais essayé de la remettre dans une autre sub que j'appelerais tout à la fin une fois que tout les lignes auront été modifié je tiendrais au courant !

Bonjour,

enlève l'instruction workbook.close à la fin de ta procédure.


je vois que tu as corrigé par toi-même.

Oui en effet ça marche mieux, je suis entrain de chercher un moyen de lancer cette fonction uniquement à la fin pour quand même fermer l'historique à la fin je devrais pas tarder à trouvé je crois ! :p

Je met le topic comme résolu ! Merci à vous :p

Rechercher des sujets similaires à "erreur indice appartient pas plage etrange"