Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/12/2011, 18h03   #1
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Par défaut Quelle paramètre à passer pour un shellExecute ?

Bonjour,

Dans mon appli Access, j'ai un formulaire permettant de visualiser une image. J'ai aussi une commande permettant de la modifier.
Cependant, l'accès à la modification n'est pas intuitif.

Je m'explique :
Le bouton que j'utilise déclenche un événement "sur clic" qui est le suivant :

Code :
 Call RunShellExecute("Open", strFiles, 0&, 0&, SW_SHOWNORMAL)
RunShellExecute étant une procédure qui utilise en faite l'API ShellExecute déclarée de la manière suivante :

Code :
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Le problème est donc le suivant :
Ma commande utilise le paramètre "Open", qui est le paramètre par défaut que l'on peut trouver dans l'explorateur windows. En l'occurence, chez moi, si mon fichier possède l'extention .jpg (pour un fichier image), il ouvre la visionneuse de photo windows.
Pour modifier la photo, il faut ensuite que j'aille dans le menu de la visionneuse et cliquer sur ""Ouvrir - Microsoft Office Picture Manager". Une opération supplémentaire inutile donc, dont je souhaiterais m'affranchir"

Ce que je souhaiterais faire, c'est ouvrir directement Microsoft Office Picture Manager en effectuant l'équivalent de la commande "Ouvrir avec - Microsoft Office Picture Manager".

Lorsque j'étais sous Windows XP, il y avait une option dans l'explorateur permetant de parcourir les propriétés associés aux extentions de fichiers, avec les commandes associés. Cette option a malheureusement disparue dans Windows 7; et le menu dans le panneau de configuration "programme par défaut -définir les association", est loin d'offrir les mêmes fonctionnalités.

Comme je ne suis pas un pro de la base de registre, je souhaiterais savoir si l'un d'entre vous connaitrait la commande à associer.

En vous remerciant par avance pour vos réponses éclairées
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 19h11   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

ShellExecute exploite l'association "type de fichier" <--> "application" en fonction d'un verbe (open, edit, print, ...)

S'il n'existe aucun verbe associant Microsoft Office Picture Manager à un fichier image, on ne pas utiliser ShellExecute.

Je me dirigerai vers le lancement de l'application Microsoft Office Picture Manager par ligne de commande.
Exemple, partant du principe que l'exécutable est dans le même dossier qu'Access :
Code :
1
2
3
4
5
6
7
8
9
10
Sub TestOfficePicMngr()
Dim sCmd As String, sPicFile As String
' Le fichier image à ouvrir
sPicFile = "E:\Mes Documents\Mes images\GOLD.JPG"
' Construction de la ligne de commande
sCmd = """" & Application.SysCmd(acSysCmdAccessDir) & "OIS.EXE" & """ " & _
       """" & "E:\Mes Documents\Mes images\GOLD.JPG" & """"
' Exécution de la ligne de commande
Shell sCmd
End Sub
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2011, 09h40   #3
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 257
Points : 2 980
Points : 2 980
Bonjour,
tu peux également lancer l'application Microsoft Office Picture Manager ou toute autre de ton choix via ShelleExecute.

Le seul prérequis est de connaître le FullName de l'exécutable à lancer.

Un exemple avec Irfanview ici

Si tu fonctionnes avec une application tierce, tu peux tester son existence (car chemin d'install standard), l'installer si pas présente et l'appeler facilement vu que tu connais sa localisation.
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2011, 10h11   #4
Membre éprouvé
 
Homme Robert LINCE
Conseiller psycho-pédagogique
Inscription : octobre 2007
Messages : 281
Détails du profil
Informations personnelles :
Nom : Homme Robert LINCE
Localisation : Belgique

Informations professionnelles :
Activité : Conseiller psycho-pédagogique
Secteur : Enseignement

Informations forums :
Inscription : octobre 2007
Messages : 281
Points : 483
Points : 483
Bonjour.
Pour répondre à ta demande concernant la façon, sous W7, d'associer un programme à un fichier, il suffit d'utiliser le clic droit sur un fichier du type dont tu veux modifier l'association, et dans le menu contextuel, tu cliques sur la dernière proposition : Choisir le programme par défaut. Là, tu désignes le programme à utiliser en vérifiant que la case "toujours utiliser le programme sélectionné ....etc" est bien cochée.
Cordialement.
RobiPMS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 15h20   #5
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 895
Points : 3 895
salut dumas.blr, LedZeppII , Godzestla et RobiPMS

pour en rajouter une couche :
il est normalement toujours possible d'ajouter par une interface graphique les verbes mais je t'avoue qu'à chaque version l'appli change souvent d'emplacement...
donc via la base de registre:
(vu qu'un .reg demande un hex(2) pour le chemin) je propose une exécution en ligne de commande (cmd.exe en tant qu'administrateur):
Code :
REG ADD HKEY_CLASSES_ROOT\jpegfile\shell\edit2\command  /T REG_SZ /D "C:\Program Files\GIMP-2.0\bin\gimp-2.6.exe %1"
j'ai pas le chemin pour MS Picture Manager mais tu le mettra à la place de celui de GIMP ci dessus en conservant %1.
tu auras ainsi un second verbe "edit2" pour les fichiers .jpg (en supposant qu'il soit bien aussi associé à jpegfile ) que tu pourras alors utiliser avec le RunShellExecute.

vodiem est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/12/2011, 15h46   #6
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 257
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 257
Points : 2 980
Points : 2 980
Salut Vodiem,
comme d'hab je suppose que ce que tu suggères est du béton.

Mais , ma foi, je n'ai ... rien compris à ta solution.
Je la relirai après une nuit de sommeil.
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 22h24   #7
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Salut à tous et merci pour vos réponses éclairées.

La solution de LedZepII me parait la plus simple à mettre en oeuvre, et la plus sensée (pourquoi faire simple quand on peu faire compliqué )

Je retiens la suggestion de Vodiem, mais elle implique que lorsqu'on fait un déploiement multi-poste, il faut exécuter la commande de MAJ de la base de registre sur chacun des postes déployés ...
Ma question se portera alors sur ceci : est-ce uniquement dans HKEY_CLASSES_ROOT que l'on trouvera les extensions du menu contextuelde l'explorateur ? En tout cas, je m'en vai de ce pas vérifier la base de registre à cette entrée

Encore merci pour votre aide
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 01h17   #8
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 895
Points : 3 895
merci Godzestla

pour vous éclairez sur le fonctionnement et pour faire simple:
HKEY_CLASSES_ROOT contient les extensions de fichier dont .jpg
dans ces clefs qui lie les extensions à leurs applications il semblerait logique de définir là les associations mais parce qu'un format recouvre plusieurs extensions: .jpg .jpeg .jpe ... on trouve dans la valeur "par défaut" la référence à la clef qui les définissent tous soit dans ce cas : jpegfile.
donc en allant à jpegfile ont y trouvera là la clef "shell" qui correspond en gros aux verbes (une partie du menu clic droit sur un fichier)
il suffit de créer à l'intérieur une clef pour un verbe (n'importe quel nom) et d'y mettre dans "par défaut" le texte que l'on veut faire apparaitre dans le menu contextuel.
pour lui associer une application il faut créer à l'intérieur de la clef verbe une clef nommé expressément: "command" qui contient la ligne de commande à exécuter: soit le chemin de l'application. en ligne de commande on transmets les paramètres par des variables d'environnements spécifié par %1, %2... %1 dans ce cas représente le nom du fichier donc sans lui l'application s'ouvre mais sans le fichier (c'est une convention que l'application récupère le nom du fichier dans la ligne de commande mais toutefois pas une obligation)

donc dumas.blr oui c'est bien là qu'on trouve le mécanisme pour tous les systèmes windows qui utilisent la base de registre.

tu as effectivement la possibilité d'exécuter avec Shell (solus LedZeppII ) ou ShellExecute mais chacun à ses particularités en dehors du fait qu'il ne revoit pas les mêmes types d'information la principale différence que j'y vois c'est que ShellExecute s'affranchit de l'application puisqu'il va le retrouver via l'extension et verbe.
ca a des avantages et inconvénient:
avec un shell tu obliges d'avoir l'appli et de spécifier son emplacement dans ton appli (au déploiement tu auras aussi ce soucis). mais tu peux verrouiller sur une appli.
avec un shellExecute tu laisse libre arbitre à l'utilisateur de choisir ce qui lui convient via le système d'exploitation. bien entendu ton appli doit être en corrélation avec les verbes existants. (même prb au déploiement mais au niveau base de registre) dans ce cas il est plus facilement envisageable de mettre en place un éditeur différent pour chaque utilisateur.
...

enfin shell ou shellexecute... ca reste du kifkif bourricot pour tes utilisateurs...
prend ce qui te parait le plus simple au pire tu sauras comment le changer.
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h02.


 
 
 
 
Partenaires

Hébergement Web