Probleme avec la fonction ExecuteExcel4Macro

Bonjour a tous

je suis entrain de développer des macros excel (sous Excel 2007), et je suis venu a plusieurs reprise sur vos forum pour trouver des solutions. Cependant dans le cas qui me préoccupe maintenant cela fait deux jours que je suis bloqué et je n’arrive pas a résoudre mon soucis, malgres mes nombreuses recherches sur le forum et le net.

j''espère que vous pourrez m'aider.

voici dans le détails

dans un Classeur je créer un code me permettant de récupérer la valeur contenu au même endroit dans plusieurs fichiers (entre 150 et 300). j'ai fait un code qui permet de le faire en faisant une ouverture/copie de la valeur/fermeture du classeur, seulement cela prend beaucoup trop de temps, j'ai donc chercher à optimiser ce code. et j'ai trouvé l'utilisation de la fonction ExecuteExcel4Macro(argument) pour me permettre d'aller récupérer la valeur d'une cellule dans un fichier fermer sans pour autant faire une liaison avec le classeur.

exemple :

range("A1") = ExecuteExcel4Macro("'" & Dossier & "\[" & """ & NomFichier & """ & "]Feuil1'!" & Range("A20").Address(, , xlR1C1))

tout se passe a merveille tant que le nom du fichier à ouvrir est de la forme "toto.xlsx".

tout se complique lorsque le nom du fichier est par exemple"l'autre.xlsx"

a partir du moment ou j'ai un ' (quote) dans le nom du fichier je me retrouve avec une erreur et cela plante mon code a cette instruction.

Pourtant quand j'écris la formule directement me permettant de faire une liaison dans une cellule d'un fichier excel (2007), cela me renvoi bien la valeur de ma cellule, mais je ne souhaite pas faire de liaison. Et cela marche avec les fichiers dont le nom est composer avec un ' (quote)

quand j'essai d’écrire la même formule à partir d'un code VBA (passage du nom du fichier en paramètre) cela plante aussi avec les fichiers dont le nom est composé d'un quote. (erreur d'exécution '1004' Erreur définie par l'application ou par l'objet)

exemple :

Range("A1").FormulaR1C1 = "='" & Dossier & "\[" & """ & NomFichier & """ & "]Feuil1'!" & Range("A20").Address(, , xlR1C1)

une solution consisterait a passer en revue tous les noms de fichiers, de tester si il y a un quote, et de le renommer en supprimant les quotes. mais avec 150 à 300 fichiers je pense que cela ralentir de plus belle l’exécution de mon code.

une deuxième solution consisterais a éliminer ces quotes a la source au moment de l'enregistrement des fichiers, mais ça je n'y peux rien, c'est pas moi qui créer les fichiers, et c'est bien la le problème.

une troisième solution consisterais a faire une connexion avec le classeur fermer du type :

Set Conn = New ADODB.Connection

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=" & Fichier & ";" & _

"Extended Properties=""Excel 8.0;HDR=No;"";"

mais plus simplement je me demande si il n'y a pas une astuce d'écriture pour pouvoir donner le nom du fichier en paramètre avec des quotes,

Merci pour vos réponses

Fréderic

Bonjour,

Pourquoi ne pas envisager de renommer tes fichiers avec VBA en remplaçant les guillemets par un espace?

Si les fichiers comportent des liens, il faudra les reconstruire manuellement

Bonsoir a tous je pense avoir compris pourquoi mon code plante,

voir le nom du fichier joint SVP

je me suis résigner a faire une macro qui renomme automatiquement le nom du fichier en supprimant les quotes (') en les remplacant par "_"

mais a ma grande surprise lorsque je stock le nom du fichier dans ma variable Fichier_source, mon instruction :

Fichier_Destination = Replace(Fichier_source, "'", "_")

ne voit pas les quotes, pourtant le caractère présent dans le nom du fichier y ressemble beaucoup.

quelqu'un pourrais me dire quel est ce caractère mystérieux ??

Etant donné que c'est un fichier qui m'est fournit je peux pas agir sur le noms des fichiers en amont, la seule chose que je sais c'est que ce nom de fichier a été préalablement écris dans une cellule et il y a eut création du fichier a partir de cela

Si manuellement je réécris le nom du fichier en mettant les (') cela fonctionne parfaitement, là je ne sais pas comment supprimer ce caractère dans le nom de ce fichier par une procédure VBA.

je vais refaire des tests maintenant pour voir si ma fonction ExecuteExcel4Macro plante avec un fichier avec des vrai quotes ou c'est ce caractère spécial qui fait planter

je reviendrais vers vous après mes essais

Merci pour vos réponses si vous savez.....

Frédéric

Bonsoir,

Le caractère utilisé est le guillement (apostrophe), code 146 (non pas 39).

Essaie :

Fichier_Destination = Replace(Fichier_source, Chr(146)", "_")

Bonsoir Jean-Eric

C'est exactement cela, c'est bien ce caractère.... Merci!!!

mais comment as tu trouvé le code du caractère incriminé ???

Cela me permet d'avancer mon problème par le biais de renommer mes fichiers avant de faire ma commande ExecuteExcel4macro.

mais cela ne règle pas mon problème initial, et là je pense que cela sera pour ma culture personnelle :

faire une commande ExecuteExcel4macro avec un nom de fichier contenant un apostrophe, j'ai essayé et ne fonctionne toujours pas donc ce n'est pas ce caractère qui posait problème en particulier.

Peut-être que cela est purement et simplement impossible lié peut-être au fait qu'à l'époque d'Excel 4 les caractères interdits dans le nom des fichiers étaient différents par rapport à nos jours ....

si quelqu'un sait précisément ...

Merci

Rechercher des sujets similaires à "probleme fonction executeexcel4macro"