VBA Form reduction [Résolu]

Signaler
Messages postés
4
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
23 novembre 2007
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
dim Bonjour as string

J'aurais une petite question, dans le cadre de mon taff, j'ai a developpé une macro en VBA.
La macro contient une form avec different control dessus, label/calendrier etc.

J'ai rajouter la possibilite de pouvoir réduire la form, comme n'importe quelle fenetre Windows avec :

[
Dim hWnd As Long
hWnd = FindWindowA(vbNullString, Me.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or &H20000
]

Dans ma form, j'ai la possibilite d'ouvrir un classeur sur un lecteur réseau. Ca s'ouvre y'a pas de souci, je le vois bien.

Le souci est que cela fonctionne correctement (bizare ça). mais que je n'arrive pas a reprendre "la main" sur le classeur Excel.

1- ma fenêtre form est bien reduite en bas a gouche du bureau
2- je vois bien mon classeur ouvert
3- je n'ais pas la main sur le dit classeur !!! 

--------------------------
Seconde question

[
utilisateur = Environ("USERPROFILE")
MsgBox utilisateur             'juste pour verifier que le path est bon
Kill ("%utilisateur%" & "\Desktop\Status.txt")
]
Il ne trouve pas le repertoire c:\winnt\profiles
une idée ? 
la msgbox elle renvoie bien la bonne valeur

---------------------------
Et une petite troisieme parce que j'abuse
[
Dim Ouvrirfichiers As Variant
ChDir ("lien ...")
Ouvrirfichiers = Application.GetOpenFilename("classeur Microsoft excel, *.xls", FilterIndex:=2, Title:="Fichier inventaires", MultiSelect:=True)
'MsgBox Ouvrirfichiers
   'ChDir "lien ..."
]

Je fais ca trois fois dans ma form, pour charger 3 classeurs à différent endroits, avec lien ...\ qui change , une seule me propose le bon endroit par défaut dans ma boite de dialogue Fichier.

Toutes réponses est la bienvenue

Ogham
[><]®

3 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
salut,

Option Explicit
'
Private Const SW_MINIMIZE = 6&
Private Const CSIDL_DESKTOP = &H0
'
Private Type SHITEMID
    cb As Long
    abID As Byte
End Type
Private Type ITEMIDLIST
    mkid As SHITEMID
End Type
'
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 Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHGetSpecialFolderLocation Lib
"shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
'
'
'
Private Sub Question1()
'   normal que ton code
BLOQUE la fenêtre

'   tu ne dois pas modifier
le style de la fenêtre mais juste la réduire!
    Dim lhwnd As Long
    lhwnd = FindWindow(vbNullString, Me.Caption)
    ShowWindow lhwnd, SW_MINIMIZE
End Sub
'
'
'
Private Sub Question2()
'   normal que ton fichier soit introuvable, tout le monde n'a pas
le bureau nommé "desktop"
'   de plus utilisateur
était une variable, donc pas de "%VARIABLE%", syntaxe pas connue par
KILL

'   tu dois juste récupérer proprement le
vrai chemin!
    Dim lRet As Long, sPath As String, IDL As ITEMIDLIST

    lRet = SHGetSpecialFolderLocation(0, CSIDL_DESKTOP,
IDL)
    If lRet = 0 Then
        sPath = Space(512)
        Call SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)
        sPath = Left$(sPath, InStr(sPath, Chr$(0)) -
1)
        If Not (RightB$(sPath, 2) = "") Then sPath = sPath & ""
        Call Kill(sPath & "Status.txt")
    End If
End Sub
'
'
'
Private Sub Question3()
'   là désolé je pige
pas....
'   pis surtout je fais pas de VBA
:p
End Sub

++
PCPT  [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
4
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
23 novembre 2007

Re, deja merci bien de te pencher sur mes soucis, si tu ne faios pas de VBA.

1)
Alors j'ai donc tester ta solution pour ma premiere question :
=> au lancement de ma macro, il me met une erreur 400, apparement ma form serait deja lancée, alors que bien evidemment je n'ai rien.
en modifiant un petit peu, je n'ai plus l'erreur en revanche ma form est cachée, bien chargée mais non visible.
et le classeur est toujours indisponible. grr

2)
le dossier desktop existe forcement, car les GPO en place dans l'entreprise creer un dossier contenant le profil dans
c:\WINNT\Profiles

Car avec le code actuel, cela fonctionne avec mon login, mais pas sur une autre machine.
Cela n'as pas bcp d'interet car la macro ne devrait pas etre "deployéeé, masi c'etait juste histoire de rentre l'appli" portable sur la machine voisine sans rentrer dans la macro...
Si il y'a que ca qui ne fonctionne pas, je peux le faire

3)
Je suis passe par un autre moyen pour aller chercher mes fichiers, en utilisant les common dialog. tu n'as qu'a les parametrer, repertoire filtre etc.
cependant, une fois mon CD_test.showopen fait, (bon repertoire & bon filtre), il ne m'ouvre pas le classeur en arriere. la fenetre se referme et il ne se passe rien

Encore merci pour l'aide.



Ogham
[><]®
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
salut Ogham_1

1)
erreur 400 : [vamsgmodshowingform.htm Feuille déjà affichée; affichage modal
impossible]
ton erreur est au lancement de la macro, un rapport avec mon code apporté?
le lances-tu (minimized) avant qu'il n'y ait eu un SHOW ?

classeur toujours indisponible après tres "bidouilles"... beh faudrait savoir quelles sont-elles ^^
idem pour le handle trouvé, il faut être certain de celui que tu veux, celui d'un formulaire ou de l'application?....

2)
ok si GPO. encore faut il-être certain de "desktop" ou "bureau"
que te donnais le msgbox utilisateur? que te retourne mon code?
çà ne change rien néanmoins qu fait qu'une variable est appelée par
variable
et non
"%variable%"

ne pas confondre une variable VB/VBA et une variable d'environnement Win ;)

3)
compris...
beh là j'vais pas pouvoir t'aider (tu me diras j'peux lancer excel.... ^^)
pareil, que te retourne msgbox ouvrirfichiers?
en VB6 il faut relever l'erreur pour le CommonDialog, n'y a t'il pas une syntaxe équivalente pour VBA?
que t'indique l'aide en ligne ou locale avec GetOpenFilename?

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp