Comportement inexplicable d'une macro (Subscript out of range)

Bonjour à tous,

j'ai développé il y a quelques temps un script VBA pour transformer des fichiers Excel reçus par un fournisseur et les rendre compréhensibles par un autre logiciel.

Brièvement, il s'agit de déplacer des colonnes, modifier les entêtes, reformater des données et sauvegarder le tout en csv.

Depuis peu le fournisseur a modifié le format de ses fichiers dont notamment l'ajout d'une colonne, inutile pour nous. Depuis que ces nouveaux fichiers sont transmis, le script plante systématiquement avec une erreur Subscript out of range. Lorsque je debug il m'amène sur une ligne incongrue.

Voici en substance où j'en suis de mes recherches, sachant que j'ai fait un certain nombre de tests pour comprendre mon problème, que la position du debugger a changé depuis, mais l'erreur reste la même :

bug excel

L'exécution du code du haut conduit à l'erreur. Le debugger m'amène sur la ligne surlignée. Juste avant, le IF est passé sans encombre, donc on peut en déduire que nous avons bien 49 colonnes. Là je supprime simplement la colonne dont je n'ai pas besoin et boum! (d'ailleurs si j'observe le fichier, la colonne est bien supprimée...)

Dans le code du bas, j'ai modifié légèrement le IF pour qu'on rentre dedans avec un fichier ancienne version (qui a donc une colonne de moins), je continue de supprimer la colonne 49 malgré tout et là pas de plantage.

Si j'ouvre un fichier nouvelle version, que je fais Ctrl+A, Ctrl+C, Ctrl+V dans un nouveau fichier vierge et sauvegarde, le programme ne plante pas.

Je m'arrache les cheveux depuis plusieurs jours sur ce truc sans comprendre. J'ai envie de dire que les fichiers fournis sont pourris, mais comment le prouver, comment le gérer ?

Egalement j'ai tenté le On Error Resume Next, mais ça plante quand même !

Je fais appel à toutes les bonnes âmes qui voudront bien se pencher sur le sujet et reste à disposition pour répondre à toutes les questions.

Merci d'avance

Raph

Bonjour,

pas d'explication à ton erreur, il faudrait un fichier anonymisé.
Mais je ferai ....EntireColumn.Delete
eric

Salut eriiic, merci pour ta réponse.

Initialement, j'avais codé avec "EntireColumn" et lors de mes tests, j'ai créé une macro en enregistrant des manips à la souris et j'ai vu qu'Excel n'avait pas pris la peine de l'écrire, donc je l'ai viré, mais ça n'a pas changé quoi que ce soit.

Je regarde pour fournir un document qui plante bien mais sans infos sensibles.

Raph

Bonsoir,

j'ai un peu tardé à revenir sur ce sujet, pris sur d'autres trucs. Mais le problème lui n'a pas bougé.

En pièce jointe un fichier "vierge" de données mais qui fait planter mon programme malgré tout.

Ça plante ici :

image

Dans le fichier, il y a une macro, mais je n'y ai pas accès car elle est protégée par mot de passe. A priori elle se déclenche seulement au clic sur un bouton. C'est fourni par une grande société de distribution d'électricité, donc normalement exempt de sa**perie.

Merci d'avance pour vos retours, en attendant je cherche une solution de contournement.

Raph

Salut rMinfo,

à priori, pas d'erreur dans le code : je l'ai reproduit sans erreur.
Comme il n'y a pas d'accès au code sans mot de passe... difficile, pour moi en tout cas, de t'aider !

A+

Salut curulis57,

oui c'est très obscur comme problème... Merci en tout cas d'avoir pris le temps d'y jeter un oeil.

J'ai contourné le problème comme ceci :

- ouverture du fichier
- copie de l'intégralité des données (via currentRegion)
- collage dans nouveau workbook
- sauvegarde du nouveau fichier.
- fermeture du fichier d'origine.
- suite des manipulations sur le nouveau fichier

J'ai fait des tests concluants.

On ne peut pas vraiment parler de résolution du problème, mais "si ça marche, c'est une solution valable"

Amen !

Bonne continuation avec ta "grande société" !


A+

Bonjour,

mot de passe vba si on veut tester ton fichier...
eric

@curulis57 ils me saoulent, mais comme je suis le prestataire du prestataire, j'ai pas tellement voix au chapitre.

@eriiic je ne l'ai malheureusement pas, je suis forcé de me débrouiller avec cette boîte noire.

Je déclare le sujet résolu du coup ?

Edit: enfin il semble que je ne puisse pas sélectionner mon propre message comme solution..

Rechercher des sujets similaires à "comportement inexplicable macro subscript range"