Image de excel à access [Résolu]

Signaler
Messages postés
15
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
28 mars 2021
-
Messages postés
15
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
28 mars 2021
-
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

Messages postés
15040
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
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.
Messages postés
15
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
28 mars 2021

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
Messages postés
15040
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
tu as donc la réponse à ta question de départ, et tu te demandes maintenant comment afficher une image à partir d'un fichier?
Messages postés
15
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
28 mars 2021

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.
Messages postés
15040
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
ne suffit-il pas d'adapter le formulaire pour y insérer une image?
Messages postés
15
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
28 mars 2021

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
Messages postés
15040
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
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é.
Messages postés
15040
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827 >
Messages postés
15040
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021

par exemple, si ton sous-formulaire s'appelle souform:
Me.souform.Form.Picture = _
      "R:\Production\Rapport\Suivi formation\access\image" _
             & Texte18.value & "_Boites.jpg"
Messages postés
15
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
28 mars 2021

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