OVH Cloud OVH Cloud

Problème d'exécution d'instructions sans ".xls"

8 réponses
Avatar
khinoa
Bonjour à tous,

J'utilise Excel 2002 à la maison comme au travail. J'ai des lignes de codes
qui fonctionnent de façon erratique selon le PC sur lequel elles sont
exécutées. Au travail je suis en réseau, sur mon PC tout fonctionne bien,
mais sur certains PC du réseau (tous les PC ont la même version), la
procédure échoue.

Voici les codes :

Workbooks.Open "F:\TOTO\" & periode, , True

'periode & ".xls" n'est pas utile à l'ouverture. VBA ouvre sans avoir besoin
de ".xls".Alors pourquoi dans les instructions suivantes ".xls" est-il
obligatoire ?

If Dir("F:\TOTO\" & periode & ".xls") <> "" Then
' avec Dir par contre ".xls" est obligatoire, je l'avais remarqué mais je
n'en connais pas la raison exacte.


Par contre les deux codes qui posent problèmes sont les suivants :

Workbooks(periode).Activate

Le classeur déjà ouvert n'était pas activé.


Workbooks(periode).Close False

Le classeur ouvert et activé (après correction de l'instruction Activate
grâce à l'ajout de ".xls") ne se fermait pas.

J'ai donc dû au fur et à mesure du débogage rajouter aux deux instructions
le fameux ".xls". Après tout est correct.

Workbooks(periode & ".xls").Activate

Workbooks(periode & ".xls").Close False

Quelqu'un a-t-il une explication à cet étrange phénomène? Pourquoi sur mes
deux PC (maison et bureau) tout fonctionne sans ".xls" et pourquoi sur
d'autres PC (au bureau avec même version 2002) il faut obligatoirement ce
".xls"?

D'avance merci pour votre aide

khinoa

8 réponses

Avatar
Clément Marcotte
Bonjour,

If Dir("F:TOTO" & periode & ".xls") <> "" Then
' avec Dir par contre ".xls" est obligatoire, je l'avais remarqué mais je
n'en connais pas la raison exacte.



Parce que rien ne t'empêche d'avoir toto.xls, toto.txt, toto.doc etc.

Avatar
khinoa
Bonjour Clément,


Parce que rien ne t'empêche d'avoir toto.xls, toto.txt, toto.doc etc.



Oui d'accord avec Dir mais pour Activate et Close ? Pourquoi ".xls" est
tantôt obligatoire et tantôt facultatif selon les PC qui exécutent le code ?

D'avance merci pour la réponse

khinoa

Avatar
anonymousA
Bonjour,

Si dans l'Explorateur de Windows (Outils/Options des
dossiers/Affichage), tu coches la case "Masquer les extensions des
fichiers dont le type est connu", alors tu n'auras pas de plantage sans
donner l'extension. Si cette case n'est pas cochée, alors tu auras un
plantage.
Par ailleurs, pour la méthode Open , tu profites ( et tout un chacun
d'ailleurs) d'un bug connu de Microsoft Excel qui fait que sans donner
d'extension, si un fichier Excel dans le répertoire précis que tu
désignes porte le nom en question, workbooks.open ouvrira le fichier
même si tu ne précises pas l'extension.

A+


Bonjour Clément,


Parce que rien ne t'empêche d'avoir toto.xls, toto.txt, toto.doc etc.




Oui d'accord avec Dir mais pour Activate et Close ? Pourquoi ".xls" est
tantôt obligatoire et tantôt facultatif selon les PC qui exécutent le code ?

D'avance merci pour la réponse

khinoa








Avatar
khinoa
Bonjour anonymousA,

Si dans l'Explorateur de Windows (Outils/Options des dossiers/Affichage),
tu coches la case "Masquer les extensions des fichiers dont le type est
connu", alors tu n'auras pas de plantage sans donner l'extension. Si cette
case n'est pas cochée, alors tu auras un plantage.


Je te remercie de ta réponse. Imagine-toi que j'avais pensé à cette option
car personnellement je masque toujours sur les PC que j'utilise les
extensions dont le type est connu. Mais je pensais que si masquer à
l'affichage n'empêchait pas Excel de reconnaître un fichier ".xls" a
fortiori en l'affichant cela fonctionnerait car masqué ne veut pas dire
pourtant supprimé ou absent. Mais je comprends avec tes explications qu'en
fait Excel réagit différemment de ce que je pensais.

Alors comme il me paraît plus compliqué ou fastidieux de demander à tous les
utilisateurs différents de masquer les extensions, je vais donc rajouter le
".xls" dans le code pour les Activate et Close.

Certes pour le Close et pour éviter l'ajout de ".xls" je peux remplacer
Workbooks(periode & ".xls").Close par le code suivant mais le code est
forcément plus long :

For Each w In Workbooks
If w.Name <> ThisWorkbook.Name Then
w.Close False
End If
Next

mais comme parfois j'ai trois classeurs ouverts en même temps qui
communiquent entre eux, le code ainsi conçu m'en fermerait deux soit un de
trop. A moins d'écrire :

If w.Name <> ThisWorkbook.Name and w.Name <> variable Then

variable étant le nom d'un des trois classeurs dont le nom sera récupéré à
son ouverture et qui devra rester ouvert.


Par ailleurs, pour la méthode Open , tu profites ( et tout un chacun
d'ailleurs) d'un bug connu de Microsoft Excel qui fait que sans donner
d'extension, si un fichier Excel dans le répertoire précis que tu désignes
porte le nom en question, workbooks.open ouvrira le fichier même si tu ne
précises pas l'extension.



Pour Workbooks.Open j'ai compris et merci encore pour tout


khinoa

Avatar
Ange Ounis
Par ailleurs, pour la méthode Open , tu profites ( et tout un chacun
d'ailleurs) d'un bug connu de Microsoft Excel qui fait que sans donner
d'extension, si un fichier Excel dans le répertoire précis que tu
désignes porte le nom en question, workbooks.open ouvrira le fichier
même si tu ne précises pas l'extension.


A mon avis, ce n'est pas un bug du tout. Excel ne se contente pas de chercher
l'extension d'un fichier pour savoir s'il peut le reconnaître comme un des siens
et l'ouvrir. Il analyse aussi s'il son entête pour vérifier qu'il comporte bien
les 'marqueurs' de son format (BIFF, description par ex ici :
http://www.wotsit.org/search.asp?page=2&sÚtabase) ou, sinon, si c'est un
format qu'il peut convertir (par ex un fichier texte).

----------
Ange Ounis
----------

Bonjour,

Si dans l'Explorateur de Windows (Outils/Options des
dossiers/Affichage), tu coches la case "Masquer les extensions des
fichiers dont le type est connu", alors tu n'auras pas de plantage sans
donner l'extension. Si cette case n'est pas cochée, alors tu auras un
plantage.
Par ailleurs, pour la méthode Open , tu profites ( et tout un chacun
d'ailleurs) d'un bug connu de Microsoft Excel qui fait que sans donner
d'extension, si un fichier Excel dans le répertoire précis que tu
désignes porte le nom en question, workbooks.open ouvrira le fichier
même si tu ne précises pas l'extension.

A+


Bonjour Clément,


Parce que rien ne t'empêche d'avoir toto.xls, toto.txt, toto.doc etc.




Oui d'accord avec Dir mais pour Activate et Close ? Pourquoi ".xls"
est tantôt obligatoire et tantôt facultatif selon les PC qui exécutent
le code ?

D'avance merci pour la réponse

khinoa










Avatar
anonymousA
Bonjour,

Recherche dans la KB de Microsoft et tu trouveras en toutes lettres
cette explication. J'ai moi même fait cette recherche il y a plus de 6
mois au travers d'une expérience qui m'est arrivée. Si tu veux , tu peux
faire l'essai suivant : positionnes 2 fichiers portant le même nom, l'un
avec une extension .xls et l'autre sans extension .Tu verras que si tu
utilises open, tu ne pourras qu'ouvrir le fichier portant l'extension
.xls même si tu désignes un fichier avec le même nom sans extension.

A+


Par ailleurs, pour la méthode Open , tu profites ( et tout un chacun
d'ailleurs) d'un bug connu de Microsoft Excel qui fait que sans donner
d'extension, si un fichier Excel dans le répertoire précis que tu
désignes porte le nom en question, workbooks.open ouvrira le fichier
même si tu ne précises pas l'extension.


A mon avis, ce n'est pas un bug du tout. Excel ne se contente pas de
chercher l'extension d'un fichier pour savoir s'il peut le reconnaître
comme un des siens et l'ouvrir. Il analyse aussi s'il son entête pour
vérifier qu'il comporte bien les 'marqueurs' de son format (BIFF,
description par ex ici :
http://www.wotsit.org/search.asp?page=2&sÚtabase) ou, sinon, si c'est
un format qu'il peut convertir (par ex un fichier texte).

----------
Ange Ounis
----------


Bonjour,

Si dans l'Explorateur de Windows (Outils/Options des
dossiers/Affichage), tu coches la case "Masquer les extensions des
fichiers dont le type est connu", alors tu n'auras pas de plantage
sans donner l'extension. Si cette case n'est pas cochée, alors tu
auras un plantage.
Par ailleurs, pour la méthode Open , tu profites ( et tout un chacun
d'ailleurs) d'un bug connu de Microsoft Excel qui fait que sans donner
d'extension, si un fichier Excel dans le répertoire précis que tu
désignes porte le nom en question, workbooks.open ouvrira le fichier
même si tu ne précises pas l'extension.

A+



Bonjour Clément,


Parce que rien ne t'empêche d'avoir toto.xls, toto.txt, toto.doc etc.




Oui d'accord avec Dir mais pour Activate et Close ? Pourquoi ".xls"
est tantôt obligatoire et tantôt facultatif selon les PC qui
exécutent le code ?

D'avance merci pour la réponse

khinoa












Avatar
anonymousA
le lien vers la KB sur ce sujet

http://support.microsoft.com/default.aspx?scid=kb;en-us;213785

A+

Bonjour,

Recherche dans la KB de Microsoft et tu trouveras en toutes lettres
cette explication. J'ai moi même fait cette recherche il y a plus de 6
mois au travers d'une expérience qui m'est arrivée. Si tu veux , tu peux
faire l'essai suivant : positionnes 2 fichiers portant le même nom, l'un
avec une extension .xls et l'autre sans extension .Tu verras que si tu
utilises open, tu ne pourras qu'ouvrir le fichier portant l'extension
.xls même si tu désignes un fichier avec le même nom sans extension.

A+



Par ailleurs, pour la méthode Open , tu profites ( et tout un chacun
d'ailleurs) d'un bug connu de Microsoft Excel qui fait que sans donner
d'extension, si un fichier Excel dans le répertoire précis que tu
désignes porte le nom en question, workbooks.open ouvrira le fichier
même si tu ne précises pas l'extension.


A mon avis, ce n'est pas un bug du tout. Excel ne se contente pas de
chercher l'extension d'un fichier pour savoir s'il peut le reconnaître
comme un des siens et l'ouvrir. Il analyse aussi s'il son entête pour
vérifier qu'il comporte bien les 'marqueurs' de son format (BIFF,
description par ex ici :
http://www.wotsit.org/search.asp?page=2&sÚtabase) ou, sinon, si
c'est un format qu'il peut convertir (par ex un fichier texte).

----------
Ange Ounis
----------


Bonjour,

Si dans l'Explorateur de Windows (Outils/Options des
dossiers/Affichage), tu coches la case "Masquer les extensions des
fichiers dont le type est connu", alors tu n'auras pas de plantage
sans donner l'extension. Si cette case n'est pas cochée, alors tu
auras un plantage.
Par ailleurs, pour la méthode Open , tu profites ( et tout un chacun
d'ailleurs) d'un bug connu de Microsoft Excel qui fait que sans
donner d'extension, si un fichier Excel dans le répertoire précis que
tu désignes porte le nom en question, workbooks.open ouvrira le
fichier même si tu ne précises pas l'extension.

A+



Bonjour Clément,


Parce que rien ne t'empêche d'avoir toto.xls, toto.txt, toto.doc etc.




Oui d'accord avec Dir mais pour Activate et Close ? Pourquoi ".xls"
est tantôt obligatoire et tantôt facultatif selon les PC qui
exécutent le code ?

D'avance merci pour la réponse

khinoa














Avatar
Ange Ounis
Tout s'explique :)
Il s'agit bien d'un bug pour le coup, qui concerne Excel 2000.
Je m'apprêtais à te répondre après avoir retesté avec 2002, mais ton lien
explique notre différence d'expérience, et du même coup d'ailleurs ce que
constatait le posteur initial :

Oui d'accord avec Dir mais pour Activate et Close ? Pourquoi ".xls"
est tantôt obligatoire et tantôt facultatif selon les PC qui
exécutent le code ?


----------
Ange Ounis
----------

le lien vers la KB sur ce sujet

http://support.microsoft.com/default.aspx?scid=kb;en-us;213785

A+

Bonjour,

Recherche dans la KB de Microsoft et tu trouveras en toutes lettres
cette explication. J'ai moi même fait cette recherche il y a plus de 6
mois au travers d'une expérience qui m'est arrivée. Si tu veux , tu
peux faire l'essai suivant : positionnes 2 fichiers portant le même
nom, l'un avec une extension .xls et l'autre sans extension .Tu verras
que si tu utilises open, tu ne pourras qu'ouvrir le fichier portant
l'extension .xls même si tu désignes un fichier avec le même nom sans
extension.

A+



Par ailleurs, pour la méthode Open , tu profites ( et tout un chacun
d'ailleurs) d'un bug connu de Microsoft Excel qui fait que sans
donner

d'extension, si un fichier Excel dans le répertoire précis que tu
désignes porte le nom en question, workbooks.open ouvrira le fichier
même si tu ne précises pas l'extension.


A mon avis, ce n'est pas un bug du tout. Excel ne se contente pas de
chercher l'extension d'un fichier pour savoir s'il peut le
reconnaître comme un des siens et l'ouvrir. Il analyse aussi s'il son
entête pour vérifier qu'il comporte bien les 'marqueurs' de son
format (BIFF, description par ex ici :
http://www.wotsit.org/search.asp?page=2&sÚtabase) ou, sinon, si
c'est un format qu'il peut convertir (par ex un fichier texte).

----------
Ange Ounis
----------


Bonjour,

Si dans l'Explorateur de Windows (Outils/Options des
dossiers/Affichage), tu coches la case "Masquer les extensions des
fichiers dont le type est connu", alors tu n'auras pas de plantage
sans donner l'extension. Si cette case n'est pas cochée, alors tu
auras un plantage.
Par ailleurs, pour la méthode Open , tu profites ( et tout un chacun
d'ailleurs) d'un bug connu de Microsoft Excel qui fait que sans
donner d'extension, si un fichier Excel dans le répertoire précis
que tu désignes porte le nom en question, workbooks.open ouvrira le
fichier même si tu ne précises pas l'extension.

A+



Bonjour Clément,


Parce que rien ne t'empêche d'avoir toto.xls, toto.txt, toto.doc etc.




Oui d'accord avec Dir mais pour Activate et Close ? Pourquoi ".xls"
est tantôt obligatoire et tantôt facultatif selon les PC qui
exécutent le code ?

D'avance merci pour la réponse

khinoa