OVH Cloud OVH Cloud

Ouverture de fichier

10 réponses
Avatar
Nico
Bonjour,

Je souhaite lors d'une macro ouvrir un fichier que je choisirais Hier (voir
dessous) Jppradier et Anonymous m'on répondu mais le soucis est que le
fichier ne s'ouvre pas. La boite d'ouverture arrive bien, je peux choisir le
fichier mais il ne s'ouvre pas, comment faire pour l'ouvrir rééllement et
que la suite de ma macro puisse s'effectuer ?

Merci
Nico

Jppradier
monFichier = Application.GetOpenFilename("Excel files,(*.xls)")

Anonymous
Pour la question de la recherche du fichier dont le nom a changé, un
petit coup de Getopenfilename pour laisser à l'utilisateur le soin de le
rechercher lui-même évite bien des complications et des soucis. Il faut
cependant prévoir un test de validité de sa recherche avant de lancer la
suite du programme mais c'est en général très simple et très faisable.

10 réponses

Avatar
JpPradier
Bonsoir Nico

Je vois que tu n'as pas tout lu :
Cette ligne recupère dans la variable monFichier le nom et le chemin du fichier choisi.
Apres il faut l'ouvrir ;-))
Exemple :

monFichier = Application.GetOpenFilename("Excel files,(*.xls)")
If mon Fichier <> False then Workbooks.Open Filename:=monFichier

Si tu applique ça et qu'il ne s'ouvre pas, c'est qu'il y a autre chose.
j-p
Avatar
JpPradier
"JpPradier" a écrit dans le message de

Si tu applique ça


Si tu appliqueS ça évidemment.

j-p

Avatar
Nico
Merci JP,

C'est impec mais le soucis est que juste avant l'ouverture du fichier je
fais une copie et quand j'arrive dans le fichier que j'ai ouvert, j'ai perdu
la copie, alors j'ai comme idée de faire :

Windows("toto.xls").Activate "pour retourner sur le 1er fichier"
Selection.Copy "je copie ce qui etait sélectionné"

Et maintenant comment je fait pour retourner sur le fichier ouvert : un truc
comme ca ?
monFichier = Workbooks.Activate

Merci
Nico

"JpPradier" a écrit dans le message
de news: #
Bonsoir Nico

Je vois que tu n'as pas tout lu :
Cette ligne recupère dans la variable monFichier le nom et le chemin du
fichier choisi.

Apres il faut l'ouvrir ;-))
Exemple :

monFichier = Application.GetOpenFilename("Excel files,(*.xls)")
If mon Fichier <> False then Workbooks.Open Filename:=monFichier

Si tu applique ça et qu'il ne s'ouvre pas, c'est qu'il y a autre chose.
j-p



Avatar
JpPradier
Presque ça ;-) :

Workbooks( monFichier).Activate

Une autre solution sans faire de selection ni de copy (sur une seule ligne) :

Workbooks(monFichier).Worksheets("Feuil1").Range("b2:b10").value
=Workbooks("toto.xls").Worksheets("Feuil1").Range("b2:b10").value

j-p
Avatar
Nico
Workbooks(monFichier).Activate
Ca ne marche pas, il m'envoi dans le debogage, bizarre !!! fallait peut-etre
déclarer monfichier ??

Je rappel que je suis trés grand débutant dans VBA
Voici une partie de la macro de mon fichier de départ toto.xls :

Lxfin = Cells.Find("*", [A1], xlFormulas, , xlByRows, xlPrevious).Row
Rows("2:" & Lxfin).Select

monFichier = Application.GetOpenFilename("Excel files,(*.xls)")
If monFichier <> False Then Workbooks.Open Filename:=monFichier

Windows("toto.xls").Activate
Selection.Copy

Workbooks(monFichier).Activate
"Et là ca bug, il ne veut pas revenir sur le fichier ouvert"

Rows("2:2").Select
Range("Y2").Activate
Selection.Insert Shift:=xlDown
Windows("toto.xls").Activate
Application.CutCopyMode = False
Range("A1").Select
...............................................

Nico

"JpPradier" a écrit dans le message
de news:
Presque ça ;-) :

Workbooks( monFichier).Activate

Une autre solution sans faire de selection ni de copy (sur une seule
ligne) :


Workbooks(monFichier).Worksheets("Feuil1").Range("b2:b10").value
=Workbooks("toto.xls").Worksheets("Feuil1").Range("b2:b10").value

j-p



Avatar
Nico
En mettant ca : Workbooks.Open(monFichier).Activate
ca fonctionne mais il perd à nouveau la copie !

Tjrs quelque chose qui bloque

Nico

"Nico" a écrit dans le message de news:

Workbooks(monFichier).Activate
Ca ne marche pas, il m'envoi dans le debogage, bizarre !!! fallait
peut-etre

déclarer monfichier ??

Je rappel que je suis trés grand débutant dans VBA
Voici une partie de la macro de mon fichier de départ toto.xls :

Lxfin = Cells.Find("*", [A1], xlFormulas, , xlByRows, xlPrevious).Row
Rows("2:" & Lxfin).Select

monFichier = Application.GetOpenFilename("Excel files,(*.xls)")
If monFichier <> False Then Workbooks.Open Filename:=monFichier

Windows("toto.xls").Activate
Selection.Copy

Workbooks(monFichier).Activate
"Et là ca bug, il ne veut pas revenir sur le fichier ouvert"

Rows("2:2").Select
Range("Y2").Activate
Selection.Insert Shift:=xlDown
Windows("toto.xls").Activate
Application.CutCopyMode = False
Range("A1").Select
...............................................

Nico

"JpPradier" a écrit dans le message
de news:
Presque ça ;-) :

Workbooks( monFichier).Activate

Une autre solution sans faire de selection ni de copy (sur une seule
ligne) :


Workbooks(monFichier).Worksheets("Feuil1").Range("b2:b10").value
=Workbooks("toto.xls").Worksheets("Feuil1").Range("b2:b10").value

j-p







Avatar
JpPradier
Voila ce que c'est de ne pas tester ses réponses !
J'oublié un détail :-(
Dans monFichier, tu as le chemin complet et Workbooks(...).Activate veut juste le nom du
classeur.
Tu peux corriger comme suit :

monFichier = Mid(monFichier, 1 + InStrRev(monFichier, ""))
Workbooks(monFichier).Activate

Attention l'instruction InStrRev ne marche qu'a partir de Excel 2000 je crois. Si tu as
97, reviens ;-)

j-p
Avatar
Nico
Impec Jp, ca fonctionne come je le souhaitais.
que veux dire : Mid(monFichier, 1 + InStrRev(monFichier, ""))

Et si je veux l'obliger à aller dans une feuil, je suppose que je fais :
Workbooks(monFichier).Activate
Sheets("fifi").Select

Merci encore JP

Nico


"JpPradier" a écrit dans le message
de news:
Voila ce que c'est de ne pas tester ses réponses !
J'oublié un détail :-(
Dans monFichier, tu as le chemin complet et Workbooks(...).Activate veut
juste le nom du

classeur.
Tu peux corriger comme suit :

monFichier = Mid(monFichier, 1 + InStrRev(monFichier, ""))
Workbooks(monFichier).Activate

Attention l'instruction InStrRev ne marche qu'a partir de Excel 2000 je
crois. Si tu as

97, reviens ;-)

j-p



Avatar
JpPradier
Re Nico

Avec InStrRev(monFichier, "") on recherche le caractere "" a partir de la fin.
Et avec Mid(monFichier, x ) On coupe le texte contenu dans monFichier à partir de x.

monFichier = Mid(monFichier, 1 + InStrRev(monFichier, ""))
Workbooks(monFichier).Activate

mais en y repensant, il y a un peu plus simple :

monFichier = Application.GetOpenFilename("Excel files,(*.xls)")
If monFichier <> False Then Workbooks.Open Filename:=monFichier
monFichier¬tiveWorkbook.Name
Windows("toto.xls").Activate
Selection.Copy
Workbooks(monFichier).Activate

j-p
Avatar
Nico
Super

Merci JP

je vais pouvoir continuer à oeuvrer, rien de tel pour apprendre.

"JpPradier" a écrit dans le message
de news: #
Re Nico

Avec InStrRev(monFichier, "") on recherche le caractere "" a partir de
la fin.

Et avec Mid(monFichier, x ) On coupe le texte contenu dans monFichier à
partir de x.


monFichier = Mid(monFichier, 1 + InStrRev(monFichier, ""))
Workbooks(monFichier).Activate

mais en y repensant, il y a un peu plus simple :

monFichier = Application.GetOpenFilename("Excel files,(*.xls)")
If monFichier <> False Then Workbooks.Open Filename:=monFichier
monFichier¬tiveWorkbook.Name
Windows("toto.xls").Activate
Selection.Copy
Workbooks(monFichier).Activate

j-p