Image de excel à access

Résolu
Bonjour,

Je suis en train de faire un logiciel dans le cadre de mon stage en entreprise, je suis étudiant.

J'ai un fichier access dans lequel je sélectionne un collaborateur,


par la suite, j'ouvre son fichier excel correspondant.

Dans ce fichier excel, je peux renseigner les informations sur les formations que le collaborateur a eu avec ses notes, mais je peux aussi sur une autre feuille remplir son futur plan de charge.


A partir de là, je peux cliquer sur le bouton de la feuille principale qui fera le lien avec ma bdd access pour mettre à jour les notes de ce collaborateur.
Mon vba va aussi faire une capture d'écran sur le plan de charge et l'enregistrer dans un fichier.

voici mon code:
Sub Bouton1_Cliquer()
Dim cn As ADODB.Connection, rs As ADODB.Recordset, R As Long

Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _
"Data Source=R:\Production\Rapport\Suivi formation\access\Formations.accdr"

Set rs = New ADODB.Recordset

Sheets("NePasToucher").Activate
cell_id = Range("A2").Value

'ici capture decran
Dim Gr As Object, Rg As Range, R1$, N$, C$, PathFich$
R1$ = "B1:F17"
Sheets("Plan d'action").Activate
N$ = ActiveSheet.Range("B1")
C$ = "R:\Production\Rapport\Suivi formation\access\image\" & cell_id & "_Boites.jpg"
Application.ScreenUpdating = False
PathFich$ = C$
Set Rg = ActiveSheet.Range(R1$): Rg.CopyPicture xlScreen, xlPicture: DoEvents
Set Gr = ActiveSheet.ChartObjects.Add(0, 0, Rg.Width, Rg.Height): DoEvents
Gr.Activate: ActiveChart.Paste: DoEvents
Gr.Chart.Export PathFich, "jpg": DoEvents

Application.ScreenUpdating = True

'requete sql
Sheets("Matrice").Activate
rs.Open "Boites where col_id= " & cell_id, cn, adOpenKeyset, adLockOptimistic, adCmdTable
R = 16
With rs
.Fields("process") = Range("H" & R).Value
.Fields("BE_1/2") = Range("I" & R).Value
.Fields("BE_3/4") = Range("J" & R).Value
.Fields("TOTAL") = Range("K" & R).Value
If (Range("M" & R).Value) <> " " Then
.Fields("depal_partie_generale") = Range("M" & R).Value
End If
If (Range("N" & R).Value) <> " " Then
.Fields("depal_navette_alvey") = Range("N" & R).Value
End If
If (Range("O" & R).Value) <> " " Then
.Fields("depal_partie_basse") = Range("O" & R).Value
End If
If (Range("P" & R).Value) <> " " Then
.Fields("depal_partie_haute") = Range("P" & R).Value
End If
If (Range("Q" & R).Value) <> " " Then
.Fields("depal_maintenance_1er_niveau") = Range("Q" & R).Value
End If

.Update
End With

rs.Close
Set rs = Nothing
Gr.Delete: Set Gr = Nothing

cn.Close
Set cn = Nothing

MsgBox "maj faite"
End Sub


Jusque là tout fonctionne.
Maintenant, on retourne dans access.

Je voudrais pouvoir afficher l'image enregistrée dans mon formulaire du début à la sélection de la personne (donc de la dernière liste déroulante) a côté.
Sachant donc qu'il faut afficher l'image du bon collaborateur.
Je n'arrive pas à trouver de code vba pouvant m'aider.

Si quelqu'un connait la solution à mon problème :)

Merci d'avance

5 réponses

  1. Contributeur
    bonjour,
    merci de préciser le langage (VBA est du basic) quand tu utilises les balises de code.

    veux-tu simplement, dans du code VBA Access, retrouver le nom du fichier
    "R:\Production\Rapport\Suivi formation\access\image\" & cell_id & "_Boites.jpg"
    ?

    si oui, il faudrait peut-être que tu nous expliques ce qu'est le champ col_id dans la table Boites.
    1. Bonjour,
      Je fais bien du VBA

      Le champ col_id est l'identifiant du collaborateur, c'est la clé de ma table collaborateur et il permet de faire le lien avec ma table Boites.
      J'ai un champs caché dans mon formulaire access qui retrouve cette valeur.
      Donc je ferais :
      "R:\Production\Rapport\Suivi formation\access\image" & Texte18.value  & "_Boites.jpg"

      qui me retrouverai le fichier de l'image.

      Mais maintenant, je n'arrive pas à faire l'affichage de cette image.

      Merci
      1. Contributeur
        tu as donc la réponse à ta question de départ, et tu te demandes maintenant comment afficher une image à partir d'un fichier?
    2. Je voudrais qu'on puisse avoir un affichage dans le genre de celui-ci, dès le changement de la dernière liste déroulante.
      1. Contributeur
        ne suffit-il pas d'adapter le formulaire pour y insérer une image?
    3. c'est ce que j'ai fait pour l'exemple donné, mais je n'arrive pas à changer le chemin de l'image en vba (j'ai pris un sous-formulaire dans lequel j'ai mis un fond d'ecran, le tout fait à partir de l'onglet propriété donc sans vba), j'aurais toujours le même plan d'action dans ce cas ci donc
      1. Contributeur
        je pense qu'il suffit de changer l'attribut "picture" du sous-formulaire.
        pour t'entrainer; je suggère que tu commences par afficher cette propriété.
      2. Contributeur
        @yg_bepar exemple, si ton sous-formulaire s'appelle souform:
        Me.souform.Form.Picture = _
              "R:\Production\Rapport\Suivi formation\access\image" _
                     & Texte18.value & "_Boites.jpg"
    4. je viens de réussir !!

      J'explique comment j'ai fait:
      Dim Gr As Object, Rg As Range, R1$, N$, C$, D$, PathFich$
          R1$ = "A3:F17"
          Sheets("Plan d'action").Activate
          N$ = ActiveSheet.Range("A3")
          C$ = "R:\Production\Rapport\Suivi formation\access\image\" & cell_id & "_Boites.jpg"
          Application.ScreenUpdating = False
          PathFich$ = C$
          D$ = "R:\Production\Rapport\Suivi formation\access\image\" & cell_id & "_Boites.bmp"
          Set Rg = ActiveSheet.Range(R1$): Rg.CopyPicture xlScreen, xlPicture: DoEvents
          Set Gr = ActiveSheet.ChartObjects.Add(0, 0, Rg.Width, Rg.Height): DoEvents
          Gr.Activate: ActiveChart.Paste: DoEvents
          Gr.Chart.Export PathFich, "jpg": DoEvents
          FileCopy C$, D$
          Application.ScreenUpdating = True

      J'ai ajouté une ligne filecopy dans mon fichier excel pour renommer mon fichier en bmp, j'ai donc 2 images, une en jpg et l'autre en bmp.

      Dans access, j'ai ajouté un bouton avec la propriété visible = false

      et au changement sur ma dernière liste déroulante, j'ai mis le code suivant.

      Private Sub Texte20_Change()
      Dim fic As String
      fic = "R:\Production\Rapport\Suivi formation\access\image\" & Texte18.Value & "_" & Texte20.Value & ".bmp"
      If Len(Dir(fic)) > 0 Then
          Commande63.Picture = fic
          Me.Commande63.Visible = True
      Else
          Me.Commande63.Visible = False
      End If
      End Sub


      comme cela, mon bouton ne s'affichera que si mon collaborateur possède un plan de charge.
      L'objectif est rempli mais le visuel est un peu différent que dans mes exigences.


      Merci encore de ton temps