Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
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 02/05/2008, 19h20   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 16
Détails du profil
Informations personnelles :
Âge : 39
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : décembre 2006
Messages : 16
Points : 11
Points : 11
Par défaut Optimisation Fonction "Insérez un lien hypertexte"

Tout d'abord un grand bonjour à tous,

je souhaite vous exposer un petit problème, et je pense qu'il doit être possible de le résoudre grâce à VBA sous Word.

La version de Word que j'utilise est la 2002.

J'ai quelque notions de programmation, j'ai un peu fouillé VBA mais j'avoue ne pas avoir encore bien compris les principes et le fonctionnement en général, vue comment je galère à chaque fois que je m'y frotte, mais je me perfectionne un petit peu chaque jour.

Pour me donner un petit coup de pouce, je souhaite faire appel aux bonnes âmes de ce forum pour me donner la bonne direction.

Voilà donc mon petit soucis :

A partir de word, je dois fréquemment faire des liens hypertexte vers des fichiers.

Pour cela, me direz-vous, rien de plus simple : il suffit de cliquer sur l'icône "Insérez un lien hypertexte", de choisir son fichier, de faire "Ok" et tout roule... et bien c'est tout à fait vrai.

Mon soucis est que ce répertoire contient un nombre croissant de fichier (aujourd'hui j'en suis à 975) et que la boîte de dialogue met de plus en plus de temps à afficher la liste des fichiers contenus dans ce répertoire, pour qu'ensuite je puisse choisir celui qui m'intéresse.

Si je me dis que je peux optimiser cela, c'est parceque je vois à l'utilisation de Word, que d'autres boîtes de dialogue qui affichent elles aussi le contenu d'un répertoire s'affiche beaucoup plus rapidement, voir instantanément.

C'est le cas par exemple pour la boîte de dialogue "Enregistrer sous...". Le contenu du même répertoire qui contient les mêmes 975 éléments s'ouvre en un éclair, alors que ce n'est pas du tout le cas dans ma boîte de dialogue "Inserez un lien hypertexte".

Donc mon idée serait de pouvoir insérez mon lien hypertexte mais en utilisant la fonction de listage de répertoire d'une boîte de dialogue comme "Enregistrer sous...".

Mais voilà, au-delà de l'idée, j'aimerai avoir votre avis si cela vous semble simple, et peut-être voir à m'indiquer une première piste que je pourrais explorer pour concrétiser ce petit projet.

Merci en tout cas déjà pour avoir lu mon message et j'espère à très bientôt

Emmanuel
Manudibango est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 20h14   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 364
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 364
Points : 29 286
Points : 29 286
Salut,

On peut y aller lentement.

En VBA, on peut utiliser des boîtes de dialogues de manière assez simple.


Essaie ceci

Code :
1
2
3
4
5
6
7
8
Sub testDialog()
Dim oDlg As FileDialog
 
Set oDlg = Application.FileDialog(msoFileDialogFolderPicker)
oDlg.Show
MsgBox oDlg.SelectedItems(1)
 
End Sub
Dis nous ce que tu en penses !
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 22h41   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 16
Détails du profil
Informations personnelles :
Âge : 39
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : décembre 2006
Messages : 16
Points : 11
Points : 11
Effectivement, très bien, j'ai bien une boîte de dialogue qui s'ouvre et à partir de laquelle je peux circuler dans l'arborescence...

merci déjà pour ce point.

Je vais creuser la fonction utilisée.

Ce que je remarque c'est que je n'ai que la liste des répertoire mais aucun fichier ne s'affiche...

je creuse mais si info, je suis preneur, bien sur
Manudibango est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 22h54   #4
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 16
Détails du profil
Informations personnelles :
Âge : 39
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : décembre 2006
Messages : 16
Points : 11
Points : 11
hahaaa

et bien j'ai remplacé "msoFileDialogFolderPicker" par "msoFileDialogFilePicker", et la du coup, j'ai tout mes fichier.

Première chose : la liste s'affiche super rapidement ! ça, c'est génial.

Maintenant, j'ai bien compris que je récupérais le nom dans la variable "oDlg" (pourquoi ce nom ? juste par hasard ?) et qu'ensuite on l'affichait dans une fenêtre grâce à "MsgBox oDlg.SelectedItems(1)"

Par contre, je ne sais pas à quoi sert "oDlg.Show"...

Pour moi, la deuxième étape c'est d'insérer ce nom dans mon document Word puis d'y associer un lien hypertexte qui pointe vers le fichier précédemment sélectionné...

une idée sur la fonction à utiliser ?
Manudibango est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 23h11   #5
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 364
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 364
Points : 29 286
Points : 29 286
Erreur !

il ne faut pas choisir les fichiers mais le répertoire !!
Et on peut faire un traitement sur les fichiers contenu dans le répertoire
ET alors on n'est pas obligé de choisir les fichiers un par un
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2008, 09h22   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 364
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 364
Points : 29 286
Points : 29 286
Pour répondre un peu à ta question .

oDlg représente un Objet FileDialog. En VBA, un objet possède des méthodes et des propriétés.

Cet objet qui est une variable avec Dim , je lui attribue une valeur avec Set...

Une fois l'objet attribué, on peut utiliser ses méthodes et propriétés.

La première méthode que j'utilise est .Show, pour afficher l'objet.
Une fois exécuté, l'objet va avoir des propriétés utilisables, l'une d'elles est la propriété .SelectedItems() qui va renvoyer le premier élément de la liste.
Comme je n'en ai qu'un, c'est un peu plus facile.

Par la suite, on peut travailler de façon automatisée sur le contenu du répertoire, et comme tu as beaucoup de fichiers, c'est plus facile que de faire une sélection manuelle.
Si tu nous explique comment tu fais pour choisir tes fichiers, un bonne structure décisionnelle peut le faire pour toi et un simple clic sur un bouton peut tout faire à ta place.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2008, 09h58   #7
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 16
Détails du profil
Informations personnelles :
Âge : 39
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : décembre 2006
Messages : 16
Points : 11
Points : 11
Merci pour toutes ces précisions

En fait, mon objectif est bien de ne sélectionner qu'un seul fichier dans le répertoire, et en même temps je voulais supprimer le chemin et l'extension du fichier au niveau du texte du lien hypertexte inséré.

Grâce à tous tes conseils, voici le code auquel je suis arrivé :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
Sub Insertion_Lien_Hypertexte()
'
' Macro permettant d'insérer un lien hypertexte
' en utilisant une boîte de dialogue qui permet
' un affichage plus rapide du contenu d'un répertoire
'
Dim oDlg As FileDialog
Dim ext As String
 
Set oDlg = Application.FileDialog(msoFileDialogFilePicker)
oDlg.InitialView = msoFileDialogViewDetails
oDlg.Show
 
'
' Affiche une info bulle selon l'extension du fichier
'
ext = Mid(oDlg.SelectedItems(1), Len(oDlg.SelectedItems(1)) - 2, 3)
Select Case ext
Case "msg"
ext = "Mail"
Case "doc"
ext = "Document Word"
Case Else
ext = "Nature non déterminée"
End Select
 
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, _
    Address:=oDlg.SelectedItems(1), _
    ScreenTip:=ext, _
    TextToDisplay:=Mid(oDlg.SelectedItems(1), 28, Len(oDlg.SelectedItems(1)) - 31)
    ' Permet de n'afficher que le nom du fichier, sans l'extension
End Sub
Et du coup, ben c'est génial, j'ai associé ça un à petit bouton et tout roule !

Si il y a une petite remarque sur mon code, ne pas hésiter...

Et encore merci !
Manudibango est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2008, 10h30   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 364
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 364
Points : 29 286
Points : 29 286
Si c'est pour un seul fichier, alors c'est plus facile d'utiliser le FilePicker.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 22h46   #9
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 16
Détails du profil
Informations personnelles :
Âge : 39
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : décembre 2006
Messages : 16
Points : 11
Points : 11
Bonjour à tous à nouveau,

utilisant depuis quelques temps maintenant mon petit programme, je souhaiterais perfectionner celui-ci.

En effet, lorsque la boîte de dialogue s'ouvre, la liste s'affiche dans l'ordre alphabétique des noms de fichiers, et c'est le début de la liste qui apparaît.

Je souhaiterai pour ma part que ce soit la fin de la liste qui s'affiche lors de l'ouverture de la boîte dialogue car en effet, je sélectionne principalement les fichiers les plus récents, dont qui sont à la fin de la liste alphabétique des fichiers.

Mais je ne trouve aucune fonction qui à priori permette d'effectuer cette demande.

Une petite idée ?

Manudibango est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2008, 23h07   #10
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 364
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 364
Points : 29 286
Points : 29 286
Salut,

Une petite

Code :
1
2
3
4
With fld
    .Show
    .InitialView = msoFileDialogViewDetails
End With
InitialView permet de choisir le mode d'affichage, et si tu affiches en détail, tu peux trier sur la date.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h32.


 
 
 
 
Partenaires

Hébergement Web