XL 2019 Afficher une photo dans un formulaire si la "checkbox" est coché dans un autre formulaire

Isabellisa

XLDnaute Nouveau
Bonjour,

J'ai suivi un tuto sur internet. J'ai dû modifier un peu sa façon de faire pour afficher les informations et photos dans un nouveau formulaire (FicheEmployés)parce sa façon ne fonctionnait pas avec ce que je voulais faire. Tout va bien pour tout afficher dans le formulaire même les photos. Le souci, c'est quand la case dans le formulaire d'enregistrement d'un Nouvel Employé n'est pas cochée, c'est censé afficher la photo "Imagevide" dans mon formulaire pour afficher et modifier l'employé, mais ça me met erreur 53. Donc, je présume que c'est dans ma modification qu'il y a une erreur. J'ai mis en rouge où ça me donne l'erreur 53.

Code d'une partie du tutoriel :

'Déclaration des Variables Dim NomImage As String Dim Matricule As Integer Dim MaSource As Range Dim DossierPhoto As String 'Affectation des Variables DossierPhoto = ThisWorkbook.Path & "\Photos\" Set MaSource = shData.Range("A1").CurrentRegion Matricule = shListe.Range("B13") ... Me.cboService = Application.WorksheetFunction.VLookup(Matricule, MaSource, 14, 0) Me.txtSalaire = Format(Application.WorksheetFunction.VLookup(Matricule, MaSource, 15, 0), "Currency") If Application.WorksheetFunction.VLookup(Matricule, MaSource, 16, 0) <> "ImageVide" Then 'Me.chkPhoto = True Else ' Me.chkPhoto = False End If Me.lblNomImage.Caption = Application.WorksheetFunction.VLookup(Matricule, MaSource, 16, 0) 'On affiche l'image du Salarié dans le Formulaire NomImage = Me.lblNomImage.Caption Me.Image1.Picture = LoadPicture(DossierPhoto & NomImage & ".jpg")

Code d'une partie du mien (j'ai pas de CBO, mais c'est pour vous montrer comment j'ai modifié Papplication. WorksheetFunction.....) :

'Déclaration des variables Dim NomImage As String Dim DossierPhoto As String 'Affectation des Variables DossierPhoto = ThisWorkbook.Path & "\Photos Employés\" Dim no_ligne As Integer no_ligne = ComboBox11.ListIndex + 2 ... TextBox22.Value = shData.Cells(no_ligne, 20).Value TextBox21.Value = shData.Cells(no_ligne, 21).Value If shData.Cells(no_ligne, 22) <> "Imagevide" Then Me.CheckBox1 = True Else Me.CheckBox1 = False End If Me.lblNomImage.Caption = Me.TextBox16 & " " & Me.TextBox15 'On affiche l'image du Salarié dans le Formulaire NomImage = Me.lblNomImage.Caption [COLOR=rgb(184, 49, 47)]Me.Image3.Picture = LoadPicture(DossierPhoto & NomImage & ".jpg")[/COLOR]

Merci énormément!

Isabellisa
 
Solution
Me.lblNomImage.Caption = Me.TextBox16 & " " & Me.TextBox15
'On affiche l'image du Salarié dans le Formulaire
NomImage = Me.lblNomImage.Caption
Me.Image3.Picture = LoadPicture(DossierPhoto & NomImage & ".jpg")
Il est important de savoir ce que vous mettez dans Textbox15 et Textbox16 (potentiellement nom et prénom) :
Si Textbox16 est vide et Textbox15 = "toto" => Nomimage = " Toto" ( avec un espace en début)
Si Textbox16 = "toto" et Textbox15 est vide => Nomimage = "Toto " ( avec un espace en fin)
Si les 2 sont vides => Nomimage = " " ( un espace )
Ces 3 cas provoqueront une erreur 53 au loadPicture ( ainsi qu'une image non existante )

Vous pouvez pallier à ce problème :
VB:
    Me.lblNomImage.Caption = Me.TextBox16 & " " &...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Isabellisa, Fanch,

Rajoutez cette ligne dans votre code.
Est ce que le message vous donne bien le bon chemin de l'image à afficher ?
VB:
Me.lblNomImage.Caption = Me.TextBox16 & " " & Me.TextBox15
    'On affiche l'image du Salarié dans le Formulaire
    NomImage = Me.lblNomImage.Caption
    Msgbox DossierPhoto & NomImage & ".jpg"        ' LIGNE A RAJOUTER'
   [COLOR=rgb(184, 49, 47)]Me.Image3.Picture = LoadPicture(DossierPhoto & NomImage & ".jpg")[/COLOR]
 

Isabellisa

XLDnaute Nouveau
Bonjour, qu'y a-t-il dans NomImage ( donnez un exemple )
L'erreur 53 indique un fichier introuvable .
C'est le nom de l'image exemple : Georges de la Jungle.jpg ". Pour les photos d'employés ça les affichent, Donc, il trouve le fichier. C'est l'image qui représente une image vide qu'il ne trouve pas et pourtant l'image s'intitule Imagevide.jpg. Et c'est là que l'erreur 53 apparaît!

Merci ! ;)
 

Isabellisa

XLDnaute Nouveau
Que cette phrase que tu as rajouté a une erreur de syntaxe!
🤷‍♀️

Me.Image3.Picture = LoadPicture(DossierPhoto & NomImage & ".jpg")
Bonsoir Isabellisa, Fanch,

Rajoutez cette ligne dans votre code.
Est ce que le message vous donne bien le bon chemin de l'image à afficher ?
VB:
Me.lblNomImage.Caption = Me.TextBox16 & " " & Me.TextBox15
    'On affiche l'image du Salarié dans le Formulaire
    NomImage = Me.lblNomImage.Caption
    Msgbox DossierPhoto & NomImage & ".jpg"        ' LIGNE A RAJOUTER'
   [COLOR=rgb(184, 49, 47)]Me.Image3.Picture = LoadPicture(DossierPhoto & NomImage & ".jpg")[/COLOR]

Me.Image3.Picture = LoadPicture(DossierPhoto & NomImage & ".jpg")
 

fanch55

XLDnaute Barbatruc
Me.lblNomImage.Caption = Me.TextBox16 & " " & Me.TextBox15
'On affiche l'image du Salarié dans le Formulaire
NomImage = Me.lblNomImage.Caption
Me.Image3.Picture = LoadPicture(DossierPhoto & NomImage & ".jpg")
Il est important de savoir ce que vous mettez dans Textbox15 et Textbox16 (potentiellement nom et prénom) :
Si Textbox16 est vide et Textbox15 = "toto" => Nomimage = " Toto" ( avec un espace en début)
Si Textbox16 = "toto" et Textbox15 est vide => Nomimage = "Toto " ( avec un espace en fin)
Si les 2 sont vides => Nomimage = " " ( un espace )
Ces 3 cas provoqueront une erreur 53 au loadPicture ( ainsi qu'une image non existante )

Vous pouvez pallier à ce problème :
VB:
    Me.lblNomImage.Caption = Me.TextBox16 & " " & Me.TextBox15
    'On affiche l'image du Salarié dans le Formulaire
    Nomimage = Trim(Me.lblNomImage.Caption)
    If Nomimage = "" Then
        Nomimage = DossierPhoto & "ImageVide" & ".jpg"
    Else
        Nomimage = DossierPhoto & Nomimage & ".jpg"
        If Dir(Nomimage) = "" Then Nomimage = DossierPhoto & "ImageVide" & ".jpg"
    End If
    Image3.Picture = LoadPicture(Nomimage)
 

Isabellisa

XLDnaute Nouveau
Il est important de savoir ce que vous mettez dans Textbox15 et Textbox16 (potentiellement nom et prénom) :
Si Textbox16 est vide et Textbox15 = "toto" => Nomimage = " Toto" ( avec un espace en début)
Si Textbox16 = "toto" et Textbox15 est vide => Nomimage = "Toto " ( avec un espace en fin)
Si les 2 sont vides => Nomimage = " " ( un espace )
Ces 3 cas provoqueront une erreur 53 au loadPicture.

Vous pouvez pallier à ce problème :
VB:
    Me.lblNomImage.Caption = Me.TextBox16 & " " & Me.TextBox15
    'On affiche l'image du Salarié dans le Formulaire
    Nomimage = Trim(Me.lblNomImage.Caption)
    If Nomimage = "" Then
        Nomimage = DossierPhoto & "ImageVide" & ".jpg"
    Else
        Nomimage = DossierPhoto & Nomimage & ".jpg"
        If Dir(Nomimage) = "" Then Nomimage = DossierPhoto & "ImageVide" & ".jpg"
    End If
    Image3.Picture = LoadPicture(Nomimage)
Ok, je me disais justement ce matin, que si je veux les noms qui sont affichés dans les textbox 15 et 16, ce n'est pas le nom de la photo... (Désolée, problèmes de mémoire, je me remets d'une maladie et ça me prend plus de temps pour trouver mes erreurs) Donc, j'arrivais à cerner l'erreur ce matin (après des mois)! Merci pour le code je l'essaie!

Si ça fonctionne, je ne saurai comment vous remercier!
 

fanch55

XLDnaute Barbatruc
Merci de votre réponse,
Si cela a pu vous aider et que vous considérez que cela puisse être "une" solution,

n'oubliez pas de le faire savoir, cela évitera à d'autres contributeurs d'analyser un sujet clos .

1680530689419.png
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 266
Membres
103 167
dernier inscrit
miriame