OVH Cloud OVH Cloud

help me... fenetre ouverte sous condition

4 réponses
Avatar
tinou
Bonsoir toi qui me lit.

j'aurai besoin d'un p'tit coup de pouce...
quand je lance la macro, le fichier excel s'enregistre
en text dans un dossier, et m'ouvre a l'aide de l'explorer ce dossier.

dans ma macro, a la fin, est ecrit :
Shell "explorer.exe /n," & chemin, vbMinimizedNoFocus
(chemin etant l'arborescence de mon dossier)

et j'aimerais que si le dossier est deja ouvert avec l'explorer,
il ne s'ouvre pas une seconde fois, si je relance ma macro
pour un nouveau fichier ???

Car si j'ai 3 fichiers excel et que je les enregistrent
en text, j'aurai 3 fenetre explorer dans la barre des taches...!
Donc en gros faudrait un code qui mette une CONDITION !
Si mon 2eme fichier texte a le meme chemin que la fenetre
exporer ouverte, l'explorer ne s'ouvre pas !!! idem pour les
autres fichiers...

Est-ce possible ??

Merci pour votre aide.

Max

4 réponses

Avatar
Argyronet
Bonjour,

Voici une possiblité:
Dans un module, tu colles ce code:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal
nCmdShow As Long) As Long

Private Const EXPLORER_CLASSNAME As String = "ExploreWClass"
Private Const SW_SHOWMAXIMIZED = 3
Private Const SW_SHOWMINIMIZED = 6

Private Sub OpenExplorer(ByVal PathName As String)
Dim lngHWnd As Long
Dim dblRet As Double

lngHWnd = FindWindow(EXPLORER_CLASSNAME, PathName)
If lngHWnd <> 0 Then
ShowWindow lngHWnd, SW_SHOWMAXIMIZED
Else
dblRet = Shell("explorer.exe /n," & PathName, SW_SHOWMINIMIZED)
End If
End Sub

Public Sub TEST()
OpenExplorer "C:Classeurs"
End Sub

Cela permet d'ouvrir l'Explorateur sur un chemin défini s'il n'est pas déjà
ouvert ou de le réafficher sur ce chemin dans l'autre cas...
--
Argy
http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment



Bonsoir toi qui me lit.

j'aurai besoin d'un p'tit coup de pouce...
quand je lance la macro, le fichier excel s'enregistre
en text dans un dossier, et m'ouvre a l'aide de l'explorer ce dossier.

Shell "explorer.exe /n," & chemin, vbMinimizedNoFocus
(chemin etant l'arborescence de mon dossier)

et j'aimerais que si le dossier est deja ouvert avec l'explorer,
il ne s'ouvre pas une seconde fois, si je relance ma macro
pour un nouveau fichier ???

Car si j'ai 3 fichiers excel et que je les enregistrent
en text, j'aurai 3 fenetre explorer dans la barre des taches...!
Donc en gros faudrait un code qui mette une CONDITION !
Si mon 2eme fichier texte a le meme chemin que la fenetre
exporer ouverte, l'explorer ne s'ouvre pas !!! idem pour les
autres fichiers...

Est-ce possible ??

Merci pour votre aide.

Max


Avatar
tinou
salut Argy,

comme tu dis, je vais essayer de reformuler ma question...
car tes codes ne m'emmenent pas la ou j'aimerais aller...! :-)

En tout cas, merci vraiment pour ton aide.

alors voici ma macro :(copyright FxM)
-------------------------------------------------------
Sub Enregistrement_TXT()

'Quand un fichier Excel est ouvert depuis R:F_origine###???xxx.xls
'il s'enregistrera au format texte (separateur tabulation) dans
'R:F_travaille###???xxx.txt

nomacc = ActiveWorkbook.FullName

nomfut = Application.Substitute(nomacc, "F_origine", "F_travaille")
nomfut = Application.Substitute(nomfut, ".xls", ".txt")
nomfut = Application.Substitute(nomfut, ".XLS", ".txt")

tablo = Split(nomfut, "")

For A = 0 To UBound(tablo) - 1
chefut = ""
For b = 0 To A
chefut = chefut & "" & tablo(b)
Next b
chefut = Right(chefut, Len(chefut) - 1)

s = Dir(chefut, vbDirectory)
If s = "" Then MkDir chefut
Next A

ActiveWorkbook.SaveAs Filename:=nomfut, FileFormat:=xlText,
CreateBackup:úlse

chemin = StrReverse(nomfut)
chemin = Right(chemin, Len(chemin) - InStr(1, chemin, "") + 1)
chemin = StrReverse(chemin)
Shell "explorer.exe /n," & chemin, vbMinimizedNoFocus

End Sub
-------------------------------------------------
jusque là, elle fonctionne parfaitement.

Cette macro, me permet donc, d'apres un fichier *.xls
placé dans un dossier "R:F_originetoto",
de créer un dossier "R:F_travailletoto",
et d'enregistrer ce fichier en *.txt.
Puis de m'ouvrir avec l'explorer ce nouveau dossier minimizer non actif.

Donc ma manip' est la suivante,
je suis dans le dossier"R:F_origineblablalolo",
j'ai 3 fichiers Excel,
j'ouvre le 1er et travaille dessus,
je lance la macro,
mon fichier est enregistrer en *.txt
et l'explorer est dans la barre des taches
à l'adresse "R:F_travailleblablalolo"...
je verifie mon fichier txt (dans excel) et ferme ce fichier.

J'ouvre dans "R:F_origineblablalolo"
mon 2e fichier *.xls,
...
et je me retrouve avec 2 fenetres "R:F_travailleblablalolo"
dans la barre des taches...

j'ouvre le 3e... 3 fenetres... !!!!

Donc j'aimerais juste que,
si la fenetre "R:F_travailleblablalolo"
est deja ouverte, ben il faudrait ne pas en ouvrir une autre...
(ou fermer l'ancienne pour ouvrir la nouvelle, l'idee est moins bien)

Le tout integrer aux codes ci dessus...
Tu crois que c'est possible ??
C'est obligé de passer par les API ?
juste une boucle IF... THEN... ELSE... END IF ne suffirait pas ?

Merci encore pour tout...

Tinou
Avatar
Argyronet
J'ai bien compris ta demande...
Disons que les API ici permettent de localiser l'instance existante de
l'Explorateur donc OUI, on en a besoin...
L'exemple fournit est paramétrable mais c'est à toi de le faire évoluer
selon tes besoins...
Ce que je t'ai écris se traduit ainsi :

'''' - On cherche l’existence de l’Explorer
lngHWnd = FindWindow(EXPLORER_CLASSNAME, PathName)
'''' - Il est déjà ouvert
If lngHWnd <> 0 Then
'''' - On l’affiche sur un dossier donné
ShowWindow lngHWnd, SW_SHOWMAXIMIZED
'''' - Il n’est pas ouvert
Else
'''' - On l’ouvre sur un dossier donné
dblRet = Shell("explorer.exe /n," & PathName, SW_SHOWMINIMIZED)

Note: la macro doit être dans PERSO.XLS afin de pouvoir être utilisée pour
chaque classeur ouvert...
--
Argy
http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment



salut Argy,

comme tu dis, je vais essayer de reformuler ma question...
car tes codes ne m'emmenent pas la ou j'aimerais aller...! :-)

En tout cas, merci vraiment pour ton aide.

alors voici ma macro :(copyright FxM)
-------------------------------------------------------
Sub Enregistrement_TXT()

'Quand un fichier Excel est ouvert depuis R:F_origine###???xxx.xls
'il s'enregistrera au format texte (separateur tabulation) dans
'R:F_travaille###???xxx.txt

nomacc = ActiveWorkbook.FullName

nomfut = Application.Substitute(nomacc, "F_origine", "F_travaille")
nomfut = Application.Substitute(nomfut, ".xls", ".txt")
nomfut = Application.Substitute(nomfut, ".XLS", ".txt")

tablo = Split(nomfut, "")

For A = 0 To UBound(tablo) - 1
chefut = ""
For b = 0 To A
chefut = chefut & "" & tablo(b)
Next b
chefut = Right(chefut, Len(chefut) - 1)

s = Dir(chefut, vbDirectory)
If s = "" Then MkDir chefut
Next A

ActiveWorkbook.SaveAs Filename:=nomfut, FileFormat:=xlText,
CreateBackup:úlse

chemin = StrReverse(nomfut)
chemin = Right(chemin, Len(chemin) - InStr(1, chemin, "") + 1)
chemin = StrReverse(chemin)
Shell "explorer.exe /n," & chemin, vbMinimizedNoFocus

End Sub
-------------------------------------------------
jusque là, elle fonctionne parfaitement.

Cette macro, me permet donc, d'apres un fichier *.xls
placé dans un dossier "R:F_originetoto",
de créer un dossier "R:F_travailletoto",
et d'enregistrer ce fichier en *.txt.
Puis de m'ouvrir avec l'explorer ce nouveau dossier minimizer non actif.

Donc ma manip' est la suivante,
je suis dans le dossier"R:F_origineblablalolo",
j'ai 3 fichiers Excel,
j'ouvre le 1er et travaille dessus,
je lance la macro,
mon fichier est enregistrer en *.txt
et l'explorer est dans la barre des taches
à l'adresse "R:F_travailleblablalolo"...
je verifie mon fichier txt (dans excel) et ferme ce fichier.

J'ouvre dans "R:F_origineblablalolo"
mon 2e fichier *.xls,
...
et je me retrouve avec 2 fenetres "R:F_travailleblablalolo"
dans la barre des taches...

j'ouvre le 3e... 3 fenetres... !!!!

Donc j'aimerais juste que,
si la fenetre "R:F_travailleblablalolo"
est deja ouverte, ben il faudrait ne pas en ouvrir une autre...
(ou fermer l'ancienne pour ouvrir la nouvelle, l'idee est moins bien)

Le tout integrer aux codes ci dessus...
Tu crois que c'est possible ??
C'est obligé de passer par les API ?
juste une boucle IF... THEN... ELSE... END IF ne suffirait pas ?

Merci encore pour tout...

Tinou


Avatar
tinou
Merci Argy,

Je crois que tu me surestimes... :-)
J'y connait rien en vba, ni meme en api.
Mais j'essaye de comprendre.
moi j'ai un fichier "macro.xls" qui contient toutes mes macros
(correspond donc a perso.xls).

j'arrive pas a integrer tes codes aux miens...
je ne sais pas les adapter ! (les faires evoluer selon mes besoins)

Merci pour ta patience.
Tinou

-----------------------------------------------------
Sub Enregistrement_TXT()

'Macro enregistrée le 13/04/2006 par thierry borrel
'Quand un fichier Excel est ouvert depuis R:F_origine###???xxx.xls
'il s'enregistrera au format texte (separateur tabulation) dans
'R:F_travaille###???xxx.txt

nomacc = ActiveWorkbook.FullName

nomfut = Application.Substitute(nomacc, "F_origine", "F_travaille")
nomfut = Application.Substitute(nomfut, ".xls", ".txt")
nomfut = Application.Substitute(nomfut, ".XLS", ".txt")
nomfut = Application.Substitute(nomfut, ".dbf", ".txt")
nomfut = Application.Substitute(nomfut, ".DBF", ".txt")
nomfut = Application.Substitute(nomfut, ".txt", ".txt")
nomfut = Application.Substitute(nomfut, ".TXT", ".txt")

tablo = Split(nomfut, "")

For A = 0 To UBound(tablo) - 1
chefut = ""
For b = 0 To A
chefut = chefut & "" & tablo(b)
Next b
chefut = Right(chefut, Len(chefut) - 1)

s = Dir(chefut, vbDirectory)
If s = "" Then MkDir chefut
Next A

ActiveWorkbook.SaveAs Filename:=nomfut, FileFormat:=xlText,
CreateBackup:úlse

chemin = StrReverse(nomfut)
chemin = Right(chemin, Len(chemin) - InStr(1, chemin, "") + 1)
chemin = StrReverse(chemin)
Shell "explorer.exe /n," & chemin, vbMinimizedNoFocus

End Sub
--------------------------------------------------