Inserer image WORD + lien hypertext pour ouvrir le document en .pdf ou .doc

Re,

Ce sont les boutons "DELETE" ?

Call CommandButton10_Click
Call CommandButton11_Click
Call CommandButton12_Click
Call CommandButton13_Click

Bonjour

Je n'ai plus aucune image de visible ... au clic sur chaque ligne ?! je pense que c'est normal puisqu'elles ne sont plus chargées. J'attends vos recommandations

Bah c'est logique puisque vous avez mis un bouton Attach qui sert à afficher les images

Aurais-je mal compris le fonctionnement qui veut que les images s'affichent en fonction du choix dans la listbox20 ?

Edit
- Les 4 CALL concernent l'effacement des images et des liens. Maintenant si vous n'avez pas d'image4 à charger, alors il est normal que l'image reste et vu que vous avez placé un "On Error Resume next" avant, le code ne vous renvoie pas d'erreur

essayez le code ceci :

Private Sub ListBox20_Click()
Dim i As Byte

With Me
    For i = 1 To 26
        .Controls("ComboBox" & i).Text = .ListBox20.List(.ListBox20.ListIndex, i - 1)
    Next i

    For i = 26 To 30
        .Controls("TextBox" & i) = .ListBox20.List(.ListBox20.ListIndex, i)
    Next i

    .ComboBox1.SetFocus

    Call CommandButton10_Click
    Call CommandButton11_Click
    Call CommandButton12_Click
    Call CommandButton13_Click

    On Error Resume Next
    Dim MyUrl As String
    Dim filepath As String
    filepath = ThisWorkbook.Path
    MyUrl = filepath & .TextBox27.Value
    .Image1.Picture = LoadPicture(MyUrl)

    MyUrl = filepath & .TextBox28.Value
    .Image2.Picture = LoadPicture(MyUrl)

    MyUrl = filepath & .TextBox29.Value
    .Image3.Picture = LoadPicture(MyUrl)

    MyUrl = filepath & .TextBox30.Value
    .Image4.Picture = LoadPicture(MyUrl)
End With
End Sub

NB :
- si vos images sont au même endroit que votre fichier excel, je ne pense pas que filepath va vous renvoyer quelque chose de correct. A voir...
Pour faire un test et vraiment voir s'il y a un souci, le mieux est de désactiver momentanément le On error resume next. Là vous serez sûr que cela fonctionne et de pouvoir corriger le cas échéant

A noter que dans votre code, ceci n'est pas correct. il vous manque un K --> activeworKbook

filepath = activeWorbook.Path

Avec votre instruction On error resume next, le code ne vous montrait pas l'erreur à cette ligne.

Bonjour Dan,

Excusez moi du quiproquos.

Oui a chaque clic sur une ligne de la listbox20, je dois visualiser les images qui y sont intégrées.

a+

Ok. Alors essayez le code comme ceci

Private Sub ListBox20_Click()
Dim i As Byte

With Me
    For i = 1 To 26
        .Controls("ComboBox" & i).Text = .ListBox20.List(.ListBox20.ListIndex, i - 1)
    Next i

    Call CommandButton10_Click
    Call CommandButton11_Click
    Call CommandButton12_Click
    Call CommandButton13_Click

    For i = 26 To 30
        .Controls("TextBox" & i) = .ListBox20.List(.ListBox20.ListIndex, i)
    Next i

    .ComboBox1.SetFocus
Print
    On Error Resume Next
    .Image1.Picture = LoadPicture(.TextBox27.Value)
    .Image2.Picture = LoadPicture(.TextBox28.Value)
    .Image3.Picture = LoadPicture(.TextBox29.Value)
    .Image4.Picture = LoadPicture(.TextBox30.Value)
End With
End Sub

J'ai un bug avec Print

Private Sub ListBox20_Click()
Dim i As Byte

With Me
    For i = 1 To 26
        .Controls("ComboBox" & i).Text = .ListBox20.List(.ListBox20.ListIndex, i - 1)
    Next i

    Call CommandButton10_Click
    Call CommandButton11_Click
    Call CommandButton12_Click
    Call CommandButton13_Click

    For i = 26 To 30
        .Controls("TextBox" & i) = .ListBox20.List(.ListBox20.ListIndex, i)
    Next i

    .ComboBox1.SetFocus
'Print
    On Error Resume Next
    .Image1.Picture = LoadPicture(.TextBox27.Value)
    .Image2.Picture = LoadPicture(.TextBox28.Value)
    .Image3.Picture = LoadPicture(.TextBox29.Value)
    .Image4.Picture = LoadPicture(.TextBox30.Value)
End With
End Sub

Pourquoi vous me remettez encore le code que je vous ai donné dans mon post précédent, dites moi la ligne qui pose problème
Comment voulez vous que je devine le souci ?

Tout fonctionnait super.

Le seul soucis que j'avais c'etait avec l'image 4. Quand je selectionne une autre ligne dans listbox20, l'image 4 reste.

J'avoue avoir un peu perdu le fil conducteur.

a+

Le print est en jaune ainsi que image.3

Print

    .Image3.Picture = LoadPicture(.TextBox29.Value)

Le seul soucis que j'avais c'etait avec l'image 4. Quand je selectionne une autre ligne dans listbox20, l'image 4 reste.

Avec le dernier code que je vous ai proposé vous ne devriez pas avoir de souci

Le print est en jaune ainsi que image.3

Oups désolé. enlevez-là ...
Je corrige dans le code précédent

Alors c'est mieux sans le PRINT.

1/ je visualise les images quand je sélectionne une ligne ou elles sont attachees. impeccable!

2/ quand je souhaite aller voir le document en cliquant sur l'image 4, pas de soucis ca fonctionne super!

3/ quand je referme le dossier contenant le doc, ok super aussi ca fonctionne !

4/ quand je souhaite visualiser une nouvelle ligne ou il n y a aucune image attachée, seule l'image 4 reste affichée alors qu'elle n'appartient pas a la ligne sélectionnée

4/ quand je souhaite visualiser une nouvelle ligne ou il n y a aucune image attachée, seule l'image 4 reste affichée alors qu'elle n'appartient pas a la ligne sélectionnée

Vérifiez que le code Private Sub CommandButton13_Click() est identique au 3 autres et fait bien référence à la textbox30

Dans le code je vois aussi qu'il faut remplacer

For i = 26 To 30

par

For i = 27 To 30

Il faut aussi vérifier que la textbox27 contient bien ce que vous avez en colonne dans votre listbox20

Tout est correct dans les private sub command.

Private Sub CommandButton10_Click()
Image1.Picture = LoadPicture()
TextBox27 = vbNullString
End Sub

Private Sub CommandButton11_Click()
Image2.Picture = LoadPicture()
TextBox28 = vbNullString
End Sub

Private Sub CommandButton12_Click()
Image3.Picture = LoadPicture()
TextBox29 = vbNullString
End Sub

Private Sub CommandButton13_Click()
Image4.Picture = LoadPicture()
TextBox30 = vbNullString
End Sub

J'ai laisse for i = 26 to 30

En effet, si je mets 27, ma textbox 26 n'est plus visible que je fasse modifie ou insertion.

Dans le code je vois aussi qu'il faut remplacer

For i = 26 To 30

J'ai laisse for i = 26 to 30
En effet, si je mets 27, ma textbox 26 n'est plus visible que je fasse modifie ou insertion.

Ok juste !

La Private Sub CommandButton13_Click() est correcte. Vous devriez pas avoir d'image4 lorsque vous changez de ligne et que vous n'avez pas d'image associée et de lien dans la textbox30

Ok Dan.

tout reviens a la normale quand je quitte mon userform et que je le réouvre.

Est ce le simple fait que je clique sur l'image, que celle-ci reste après inchangée sur n'importe qu'elle ligne que je sélectionne dans LISTBOX20. ?!

Est ce le simple fait que je clique sur l'image, que celle-ci reste après inchangée sur n'importe qu'elle ligne que je sélectionne dans LISTBOX20. ?!

Pas sur de bien comprendre... Si vous cliquez sur l'image4 cela ouvre simplement le répertoire où se trouve le document

Dans votre fichier posté si je clique sur une ligne, les 4 textbox mentionne bien ce que l'on trouve en colonne AB à AE dans votre feuille DATABASE

Il y a cependant une chose. Je me demande à quoi vous sert le code Private Sub ComboBox2_Change() ?
Essayez en le désactivant car vous devez savoir que chaque fois que vous cliquez sur une ligne de la listbox, ce code est exécuté.
là je pense qu'il ne sert plus


Autre remarque, dans vos codes CommandButton10_Click à 13, ajoutez un "" dans loadpicture entre les parenthèses. Exemple --> Image4.Picture = LoadPicture("")
De mon coté j'ai eu un souci si on ne les mettait pas

Sur la database que vous avez, anonymisée, J'ai enlevé le code Private Sub ComboBox2_Change() -> Tout a l'air clair

Par contre sur ma vraie database, ce Private Sub ComboBox2_Change () me permet de bien réinitialiser les lignes avec les bonnes images, mais j'ai toujours ce problème d'image 4 qui reste après avoir clique dessus pour ouvrir le dossier en selectionnant n'importe qu'elle ligne.

Image4.Picture = LoadPicture("") -> j'ai rien vu d'inchange

Image4.Picture = LoadPicture("") -> j'ai rien vu d'inchange

Ok tant mieux. De mon coté j'ai eu un souci. Du coup j'avais ajouté cela.

On peut passer au reste.
Voici une modification à faire

Bouton Delete

- Remplacez le code Private Sub CommandButton9_Click() par celui ci-dessous

Private Sub CommandButton9_Click()
Call delete_from_form_with_confirmation
End Sub

- Remplacez la macro function delete_from_form_with_confirmation par ce code. Pour info, une fonction (macro FUNCTION) s'exécute toujours depuis une variable déterminée et définie dans un code et n'a jamais besoin d'un CALL

Sub delete_from_form_with_confirmation()
Dim answer As Integer
Dim ligne As Integer
Dim TS As ListObject

Set TS = Sheets("DATABASE").ListObjects(1)
ligne = WorksheetFunction.Match(ListBox20.List(ListBox20.ListIndex, 0), TS.ListColumns(1).DataBodyRange, 0)

answer = MsgBox("Delete row " & ligne & " from Data", vbQuestion + vbYesNo + vbDefaultButton2, "Confirmation")
If answer = vbYes Then
TS.ListRows(ligne).Range.Delete
Me.ListBox20.RemoveItem (ListBox20.ListIndex)
End if
End Sub

Faites un test et dites moi si ok.

Dan,

Tout fonctionne avec vos propositions.

Je vous souhaite une bonne soiree.

a demain

a+

Ok. Reste encore deux ou trois choses

1. Code affiche --> Remplacez-le (c'est d'une longueur...waouh) par celui ci-dessous

Sub Affiche()
Dim i
Dim j As Byte, k As Byte
Dim dchoisis(1 To 16)

For j = 1 To 16
  Set dchoisis(j) = CreateObject("Scripting.Dictionary")
  For i = 0 To Me.Controls("ChoixListBox" & j).ListCount - 1
    If Me.Controls("ChoixListBox" & j).Selected(i) Then dchoisis(j)(Me.Controls("ChoixListBox" & j).List(i, 0)) = ""
  Next i
Next j

Dim n
Dim liste()
Dim tmp(1 To 17)

  For i = LBound(TblBD) To UBound(TblBD)
     tmp(1) = TblBD(i, 5)
     tmp(2) = TblBD(i, 6)

     For j = 3 To 16
        tmp(j) = TblBD(i, j + 7)
     Next j

     tmp(17) = TblBD(i, 1)

    If (dchoisis(1).Exists(tmp(1)) Or dchoisis(1).Count = 0) _
        And (dchoisis(2).Exists(tmp(2)) Or dchoisis(2).Count = 0) _
        And (dchoisis(3).Exists(tmp(3)) Or dchoisis(3).Count = 0) _
        And (dchoisis(4).Exists(tmp(4)) Or dchoisis(4).Count = 0) _
        And (dchoisis(5).Exists(tmp(5)) Or dchoisis(5).Count = 0) _
        And (dchoisis(6).Exists(tmp(6)) Or dchoisis(6).Count = 0) _
        And (dchoisis(7).Exists(tmp(7)) Or dchoisis(7).Count = 0) _
        And (dchoisis(8).Exists(tmp(8)) Or dchoisis(8).Count = 0) _
        And (dchoisis(9).Exists(tmp(9)) Or dchoisis(9).Count = 0) _
        And (dchoisis(10).Exists(tmp(10)) Or dchoisis(10).Count = 0) _
        And (dchoisis(11).Exists(tmp(11)) Or dchoisis(11).Count = 0) _
        And (dchoisis(12).Exists(tmp(12)) Or dchoisis(12).Count = 0) _
        And (dchoisis(13).Exists(tmp(13)) Or dchoisis(13).Count = 0) _
        And (dchoisis(14).Exists(tmp(14)) Or dchoisis(14).Count = 0) _
        And (dchoisis(15).Exists(tmp(15)) Or dchoisis(15).Count = 0) _
        And (dchoisis(16).Exists(tmp(16)) Or dchoisis(16).Count = 0) Then

        n = n + 1
        ReDim Preserve liste(1 To nbcol + 1, 1 To n)
        For k = 1 To nbcol + 1
            liste(k, n) = TblBD(i, k)
        Next k
     End If
  Next i
  If n > 0 Then Me.ListBox20.Column = liste Else Me.ListBox20.Clear
End Sub

2. Tout au dessus des codes, il y a des variables qui sont déclarées et non utilisées. Remplacez tout par ces lignes :

Option explicit
Dim TblBD()
Dim dchoisis1, dchoisis2, dchoisis3, dchoisis4, dchoisis5, dchoisis6, dchoisis7, dchoisis8, dchoisis9, dchoisis10, dchoisis11, dchoisis12, dchoisis13, dchoisis14, dchoisis15, dchoisis16
Dim nomtableau As String
Dim nbcol As Byte

refaites un test avant que je ne continue

Bonjour Dan,

J'ai un bug avec l'image 4.

Private Sub Image4_click()
Dim slash As String
Dim chemin
slash = InStrRev(TextBox30.Value, "\")
chemin = Left(TextBox30.Value, slash - 1)
If Dir(chemin, vbDirectory) <> "" Then
    Shell "explorer.exe /e," & chemin, vbNormalFocus
  End If
End Sub

chemin = Left(TextBox30.Value, slash - 1)

En sélectionnant n'importe quelle ligne de la ListBox20, j'ai voulu tester le fait de cliquer sur l'image 4 sans qu'il y ait le chemin d'afficher dans la TextBox30.

Il m'affiche un bug qui bloque le formulaire par la suite. Je dirais normal puisque il ne trouve pas le chemin. Est il possible de corriger ce bug? c'est a dire mettre une condition que meme si je clique malencontreusement sur l'image4 (sans chemin dans TextBox30), un message me dit que ce n'est pas possible, et que je puisse continuer a naviguer dans le formulaire sans qu'il soit bloque.

Autre chose également, une fois que j'ai ouvert le dossier en cliquant sur l'image4, j'ai souhaite appuyer sur la "CommandButton13" "DELETE" pour supprimer l'image, chose impossible, le contenu de l'image4 reste présente.

je vais tester le code affiche ...

a+

Rechercher des sujets similaires à "inserer image word lien hypertext ouvrir document pdf doc"