macro:input box = variable

J

jean michel

Guest
bonjour,
je débute en macro et j'aurai besoin de votre aide


je voudrais qu'une macro avant dêtre lancée ouvre un fichier dans le même répertoire. Ce nom de fichier devra être saisi dans une inputbox.

pourriez vous svp m'indiquer la démarche
merci
 

ZZR09

XLDnaute Occasionnel
salut Jean-Michel, le forum

code:
Code:
Option Explicit
Public ThePath, FichierActuel as string

sub ouvrir ()

dim ThePath, FichierActuel, OuvrirFichier as string
dim fich1

thepath=thisworkbook.path
CheminOuvrirfichier=Application.GetOpenFilename('Tous les fichiers Excel(*.xls), *.xls', , 'Veuillez sélectionner le nom du fichier à ouvrir')

OuvrirFichier=dir(CheminOuvrirfichier,vbnormal)

'On vérifie  qu'il n'est pas déjà ouvert sinon, on l'active
For Each fich1 In Workbooks
    If fich1.Name = OuvrirFichier Then
        'C'est OK, le fichier est ouvert
        Windows(OuvrirFichier).Activate
        GoTo fich1Actif
    End If
Next

    'Si on est là c'est que le fichier n'est pas ouvert, on va le faire
    Workbooks.Open FileName:=CheminOuvrirfichier
        'C'est OK, le fichier est ouvert
        GoTo fich1Actif

fich1Actif:

End Sub

cela te permet de charger le fichier actuel en mémoire (et de pouvoir le réactiver par la suite.
GetOpenFilname est la boîte de dialogue d'Excel, il renvoie le fichier et son chemin.
la boucle for each, next vérifie que le fichier sélectionné n'est pas déjà ouvert et l'active dans le cas contraire).
si le fichier n'a pas été activé, il est ouvert.

voilà.
A+
;)
 

ZZR09

XLDnaute Occasionnel
ZZR09 écrit:
salut Jean-Michel, le forum

code:
Code:
Option Explicit
Public ThePath, FichierActuel as string

sub ouvrir ()

dim ThePath, FichierActuel, OuvrirFichier as string
dim fich1

thepath=thisworkbook.path
CheminOuvrirfichier=Application.GetOpenFilename('Tous les fichiers Excel(*.xls), *.xls', , 'Veuillez sélectionner le nom du fichier à ouvrir')

OuvrirFichier=dir(CheminOuvrirfichier,vbnormal)

'On vérifie  qu'il n'est pas déjà ouvert sinon, on l'active
For Each fich1 In Workbooks
    If fich1.Name = OuvrirFichier Then
        'C'est OK, le fichier est ouvert
        Windows(OuvrirFichier).Activate
        GoTo fich1Actif
    End If
Next

    'Si on est là c que le fichier nest pas ouvert, on va le faire
    Workbooks.Open FileName:=CheminOuvrirfichier
        'C'est OK, le fichier est ouvert
        GoTo fich1Actif

fich1Actif:

End Sub

cela te permet de charger le fichier actuel en mémoire (et de pouvoir le réactiver par la suite.
GetOpenFilname est la boîte de dialogue d'Excel, il renvoie le fichier et son chemin.
la boucle for each, next vérifie que le fichier sélectionné n'est pas déjà ouvert et l'active dans le cas contraire).
si le fichier n'a pas été activé, il est ouvert.

voilà.
A+
;)
 

ZZR09

XLDnaute Occasionnel
Re,

en fait, ThePath est une variable du genre string (une chaine de caractères). ce nom est souvent utilisé pour désigner le chemin d'un dossier.

Pour récupérer le chemin actuel :
Code:
dim The Path as string
ThePAth = ThisWorkbook.Path
ThisWorkbook sésigne le fichier actuel et .Path son chemin.
En fait, c'est lui qui me renseigne sur mon positionnement, c'est bien plus efficace.

Comme tu faisais une interface utilisateur,
j'ai utilisé l'application GetOpenFileName qui est la boîte de dialogue 'Ouvrir' d'Excel (pour plus de précision, il faut voir l'aide de VisualBasic sur cette application, elle est bien faite).

Avec l'instruction
Code:
CheminOuvrirfichier=Application.GetOpenFilename(...)
je lui indique que le fichier désigné par l'applicationGetOpenFileName sera ma variable mémorisant le chemin et le fichier

pour récupérer le Nom du fichier, j'utilise l'instruction Dir()
avec les arguments suivant : vbNormal pour le nom du fichier et vbDirectory pour le chemin.

Voilà!
A+
:p

Ah mais je viens de relire, dans mon cas,
ThePAth ne sert à rien, tu peux le supprimé.
J'étais parti sur une idée puis j'ai fait autre chose :eek:(GetOpenFileName)

Message édité par: zzr09, à: 06/09/2005 16:35
 

ZZR09

XLDnaute Occasionnel
Salut,
fich1, cet une variable de type variant.
comme le type variant est par défaut, il n'est pas nécessaire d'écrire tout le code dim fich1 as variant.

Dans ce code, il instruit la boucle For each fich1 in workbooks... Next
Pour chacunes des variables fich1 parmis les classeurs ...
fich1 représentera ici un classeur!

A+
:side:
 
J

jean michel

Guest
bon merci ZZ

mais j'ai encore une question (je maitirse pas le vba comme tu vois)

je voudrais simplement dire à la macro :

d'ouvrir la boîte de dialogue dans le même répertoire que le fichier actuellement ouvert est ou se situe la macro .
Pas besoin de faire un test si le fichier est déjà ouvert car en fait je pose la question ds une msg avt.

Merci pour ton aide
jm
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour ZZr, Jean Michel

Tiens tiens ce fameux 'ThePath' me dit quelque chose ;) et je sais très bien d'où il vient...

Bonne Journée
[ol]@+Thierry[/ol]


EDITION !!!

Pour ta dernière question, pour orienter le GetFileOpen, il suffit de placer avant :

ChDir = ThePath (le fameux lol)

Message édité par: _Thierry, à: 07/09/2005 09:17
 

ZZR09

XLDnaute Occasionnel
Salut Thierry, le forum

très franchement, depuis deux mois que j'apprends les macros, j'ai récupéré tant d'idées partout que je ne saurrai pas rendre à Jupiter ce qui lui appartient :eek:
Par contre, cela m'a beaucoup aidé et j'espère en faire profiter les autres.
Pour ChDir, j'irai voir ce que c'est dans l'aide.
Sinon pour ThePath, merci et n'ait pas d'inquiètude, conformement à l'esprit forum, je le transmettrai ;)

Ben tiens puisque t'es là : Qu'est-ce que c'est lol ?

_Thierry écrit:
Bonjour ZZr, Jean Michel

Tiens tiens ce fameux 'ThePath' me dit quelque chose ;) et je sais très bien d'où il vient...

Bonne Journée
[ol]@+Thierry[/ol]


EDITION !!!

Pour ta dernière question, pour orienter le GetFileOpen, il suffit de placer avant :

ChDir = ThePath (le fameux lol)<br><br>Message édité par: _Thierry, à: 07/09/2005 09:17
 
J

jean michel

Guest
ok ZZ ca marche mais si devant la fenêtre open je click cancel il continue à lancer la macro suivante

(car en effet je lui dis d'ouvrir puis de lancer une macro)

comment lui dire que si je click cancel alors il exit sub

merci
 

ZZR09

XLDnaute Occasionnel
Salut Jean-Michel,

Essaye de rajtouer la ligne suivante, juste après l'instruction GetOpenFilName.

code:
Code:
If CheminOuvrirFichier = False Then Exit Sub

Si j'ai bon souvenir, l'application GetOpenFilName renvoie la valeur False si on annule l'opération.

A+
;)
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Juste une petite précicion pour ZZR09 :)

'LOL' Ca signifie : Laughing Out Loud (Mort de rire en français MDR)

Si tu fais une petite recherche sur les archives en particulier tu trouveras des fils sur ce sujet

Tien en voilà un avec des liens en plus donc tu en profiteras doublement

Lien supprimé

Bonne journée

Message édité par: Pascal76, à: 07/09/2005 15:51
 

Discussions similaires

Statistiques des forums

Discussions
312 971
Messages
2 094 045
Membres
105 926
dernier inscrit
Odyssea