OVH Cloud OVH Cloud

Problème de déclaration de classeur

7 réponses
Avatar
Yann
Bonjour,

j'ai un probl=E8me. Comme c'est original.

Voil=E0,
J'ai cr=E9=E9 une macro dans un classeur excel et elle marche lorsque je
copie les donn=E9es =E0 traiter dedans. Mais j'aimerai que ce classeur ne
me serve qu'=E0 porter la macro et qu'il n'y ait pas besoin de copier
les informations.

J'ai donc ajouter un lancement automatique qui me demande d'ouvrir le
fichier =E0 traiter dans ma macro de d=E9part. Et =E7a marche. (D'ailleurs
merci parce que j'ai trouv=E9 la solution sur le forum).
Mais apr=E8s, je n'arrive pas =E0 activer le nouveau classeur (un fichier
texte au format tableau) et r=E9sultat ma macro s'=E9x=E9cute dans le vide
sur le document du d=E9part.

j'ai fait =E7a:
Msg =3D "S=E9lectionner le fichier texte =E0 traiter"
Style =3D vbOK
Title =3D "Choix du fichier Texte"
Response =3D MsgBox(Msg, Style, Title)

'R=E9cup=E8re le chemin vers le fichier texte qui va bien
chemin =3D Application.GetOpenFilename(",*.txt,,")

ChDir "C:\"
'Ouvre le fichier texte
Workbooks.OpenText Filename:=3Dchemin, Origin:=3DxlWindows,
StartRow:=3D1, DataType:=3DxlDelimited, TextQualifier _
:=3DxlDoubleQuote, ConsecutiveDelimiter:=3DFalse, Tab:=3DTrue,
Semicolon:=3D _
False, Comma:=3DFalse, Space:=3DFalse, Other:=3DFalse,
FieldInfo:=3DArray(1, 1)

Remarque j'ai d=E9clar=E9 une varible exceltxt as workbook

apr=E8s j'ai essay=E9: set exceltxt=3Dworkbooks("chemin") marche pas,
set exceltxt=3Dworkbooks(2) idem,
set exceltxt=3Dthisworkbook ,
setexceltxt=3Dzut =E7a ne marche pas non plus.

Maintenant j'ai plus d'imagination et j'aimerai bien un petit coup de
pouce.
J'esp=E8re avoir =E9t=E9 assez clair pour qu'on m'aide un ch'tit peu.

Bonne soir=E9e.

Yann

7 réponses

Avatar
michdenis
Bonjour Yann,

Le meilleur moyen est l'utilisation des variables objets.

Dim Wk As Workbook
Dim WkAct as Workbook

Set wkAct = ThisWorkbook 'Une variable pour le classeur qui contient la macro

Set Wk = Workbooks.OpenText(Filename:=chemin, Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True, _
Semicolon:= False, Comma:úlse, Space:úlse, Other:úlse, _
FieldInfo:=Array(1, 1))

Par la suite tout au long de ta procédure, lorsque tu voudras faire référence
au classeur que tu viens d'ouvrir tu utilises la variable Wk

with Wk
With Worksheets(".....")..
'code
End with
end with



Salutations!




"Yann" a écrit dans le message de news:
Bonjour,

j'ai un problème. Comme c'est original.

Voilà,
J'ai créé une macro dans un classeur excel et elle marche lorsque je
copie les données à traiter dedans. Mais j'aimerai que ce classeur ne
me serve qu'à porter la macro et qu'il n'y ait pas besoin de copier
les informations.

J'ai donc ajouter un lancement automatique qui me demande d'ouvrir le
fichier à traiter dans ma macro de départ. Et ça marche. (D'ailleurs
merci parce que j'ai trouvé la solution sur le forum).
Mais après, je n'arrive pas à activer le nouveau classeur (un fichier
texte au format tableau) et résultat ma macro s'éxécute dans le vide
sur le document du départ.

j'ai fait ça:
Msg = "Sélectionner le fichier texte à traiter"
Style = vbOK
Title = "Choix du fichier Texte"
Response = MsgBox(Msg, Style, Title)

'Récupère le chemin vers le fichier texte qui va bien
chemin = Application.GetOpenFilename(",*.txt,,")

ChDir "C:"
'Ouvre le fichier texte
Workbooks.OpenText Filename:=chemin, Origin:=xlWindows,
StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True,
Semicolon:= _
False, Comma:úlse, Space:úlse, Other:úlse,
FieldInfo:=Array(1, 1)

Remarque j'ai déclaré une varible exceltxt as workbook

après j'ai essayé: set exceltxt=workbooks("chemin") marche pas,
set exceltxt=workbooks(2) idem,
set exceltxt=thisworkbook ,
setexceltxt=zut ça ne marche pas non plus.

Maintenant j'ai plus d'imagination et j'aimerai bien un petit coup de
pouce.
J'espère avoir été assez clair pour qu'on m'aide un ch'tit peu.

Bonne soirée.

Yann
Avatar
Yann
Tout d'abord merci, MichDenis, pour la réponse.

Mais, j'ai toujours un problème avec le "Settage" de mon deuxième
classeur. J'ai inséré ton code avec le nom de classeur que j'avais
déclaré : exceltxt.
Set exceltxt= Workbooks.OpenText(Filename:=chemin, Origin:=xlWindows, _

StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True, _
Semicolon:= False, Comma:úlse, Space:úlse,
Other:úlse, _
FieldInfo:=Array(1, 1))

J'obtiens une erreur de compilation : Fonction ou variable attendue, au
niveau de cette expression.

Est-ce que cela peut venir du nom de variable que j'ai choisi qui lui
plait pas?!!
Ou un problème de version, je travaille avec Excel 2000 et VB 6?

Je suis perdu.

Une réponse?

Merci encore.
Avatar
Yann
Je rajoute un peu d'eau à mon moulin.

J'ai eu une idée qui ne marche pas... mais peut-être que ça aurait
pu.

Pour déclarer mon classeur exceltxt j'ai essayé ça:
For Each wk In Excel.Workbooks
If wk <> exceltrait Then Set exceltxt = wk
Next wk
erreur d'exécution 438: propriété ou méthode non gérée par cet
objet.
Remarque: exceltrait c'est le classeur que j'ouvre au départ et qui
contient la macro.

Je continue à chercher mais si quelqu'un à une idée je suis preneur.

Bon appétit!

Yann
Avatar
Yann
A la suite d'essais en tous genres j'ai trouvé une solution.

On peut pas dire que ce soit une vraie solution mais.
Au lieu de d'essayer de faire Set avec la commande opentext et son lot
d'argument j'utilise open tout court
Set exceltxt = Excel.Application.Workbooks.Open(chemin)

Et ça marche... Même si le fichier que j'ouvre est un fichier texte
même si je ne vois pas de différence entre open et opentxt ça
marche.

Maintenant si quelqu'un peut m'expliquer pourquoi ça marchait pas, ça
m'intéresse.

Merci encore MichDenis, j'utilise le système des with wk ... et ça
marche au poils.

Salut
Avatar
michdenis
Bonjour Yann,

| un fichier texte même si je ne vois pas de différence entre open et opentxt

| Set exceltxt = Excel.Application.Workbooks.Open(chemin & fichier.xls)

Tu as raison de ton poser la question... ça ressemble plus à un "bug" ... incongruité
d'excel ... car il est toujours possible de faire ceci :
'-------------------------
Dim Wk as workbook
Workbooks.OpenText "C:MonFichier.txt"
Set Wk = ActiveWorkbook
Msgbox Wk.Name renvoie bien : "MonFichier.txt"
'-------------------------

Il est aussi possible d'ouvrir un fichier .csv sans problème.
set Wk = Workbooks.Open("c:MonFichier.csv")


Si il y a vraiment une raison du comportement de "OpenText", je ne la connais pas.



Salutations!







"Yann" a écrit dans le message de news:
A la suite d'essais en tous genres j'ai trouvé une solution.

On peut pas dire que ce soit une vraie solution mais.
Au lieu de d'essayer de faire Set avec la commande opentext et son lot
d'argument j'utilise open tout court
Set exceltxt = Excel.Application.Workbooks.Open(chemin)

Et ça marche... Même si le fichier que j'ouvre est un fichier texte
même si je ne vois pas de différence entre open et opentxt ça
marche.

Maintenant si quelqu'un peut m'expliquer pourquoi ça marchait pas, ça
m'intéresse.

Merci encore MichDenis, j'utilise le système des with wk ... et ça
marche au poils.

Salut
Avatar
Yann
Merci beaucoup pour toutes ces infos,

je vais voir à réinstaller VBA ou à faire une mise à jour. C'est
vraiment rageant de bloquer pour une raison pas logique.

Bonne continuation.

Yann
Avatar
Yann
J'ai installé Office 2003 et depuis plus de problème lors des
déclarations.

Merci encore

Yann