insertion d'une photo dans un userform

kikou017

XLDnaute Nouveau
Bonjour,

J'ai créé un formulaire personnalisé qui me permet d'alimenter une base de données.
Il y a quelques champs classiques : nom, prénom, date de naissance, photo...
Dans mon formulaire, on retrouve la photo. En fait, elle s'insère automatiquement lorsque l'on tape le nom et prénom (la macro va chercher dans un dossier donné la photo prénom.nom.jpg).

Le souci que je rencontre est que j'ai une erreur lorsque je tape le nom car elle va chercher le fichier "première lettre du nom".jpg. Je n'arrive pas à lui faire "attendre" d'avoir terminé de taper le nom pour qu'elle aille chercher la photo.

Le code utilisé est le suivant :

Code:
Private Sub TextBox2_Change()

Dim chemin As String

    'on definit une variable en taille, le dim au dessus, et sa valeur, la ligne en dessous
    chemin = TextBox2.Value 'donc chemin = le nom
    'pour afficher l'image, nous avons la ligne suivante
     UserForm1.Image1.Picture = LoadPicture("Z:\home\Athlétisme\11 - Photos\" & chemin & ".jpg")
    'ou nous retrouvons le repertoire par defaut des images et notre variable
 
End Sub

Savez-vous comment faire ?
Merci
 

Dranreb

XLDnaute Barbatruc
Re : insertion d'une photo dans un userform

Bonjour.

Il y a de multiples solutions.
Mettre On Error Resume Next devant l'instruction qui peut ainsi planter tout à fait logiquement.
Mettre le code dans l'évènement Exit plutôt que Change
Faire chemin = Dir("Z:\home\Athlétisme\11 - Photos\" & TextBox2.Text & "*.jpg") et n'essayer le LoadPicture que si elle n'est pas vide.
Récupérer tous les noms de fichiers existant dans une table à affecter au List d'un ComboBox qu'on utilisera pour le choix à la place de TextBox2. C'est celle qui aurait ma préférence.

P.S. Ou plutôt non, celle qui aurait ma préférence serait de gérer la BD avec ma solution standard à ComboBox liés et ne faire le LoadPicture que lorsqu'une ligne est ramenée ou qu'une nouvelle est en voie de création suffisamment avancée.
 
Dernière édition:

kikou017

XLDnaute Nouveau
Re : insertion d'une photo dans un userform

Bonjour,

Merci pour ta réponse.
Comment faut-il faire pour ta dernière proposition ? (je débute à peine en vba).
Par ailleurs, pour être tout à fait exact, les fichiers prénom.nom.jpg devraient être constitués du contenu de TextBox1 + "." + Contenu du TextBox2 (comme tu l'auras deviné, textbox1=prénom et textbox2=nom).

Merci
 

Dranreb

XLDnaute Barbatruc
Re : insertion d'une photo dans un userform

Mon avant dernière solution (j'ai fait un édit depuis) ne va pas bien s'il y a plusieurs contrôles pour former le nom de fichier. Dans le principe, c'est :
VB:
NomFic = Dir("Z:\home\Athlétisme\11 - Photos\*.*.jpg")
Do While NomFic <> ""
    N = N + 1
    TNF(N) = NomFic
    NomFic = Dir
    Loop
 

kikou017

XLDnaute Nouveau
Re : insertion d'une photo dans un userform

Ah,

Dans ce cas, est-il possible plutôt d'ajouter un bouton de commande "afficher la photo" dans l'userform qui permet d'afficher la photo si tous les champs sont remplis ?
Si la photo est présente -> Elle s'affiche
Si elle ne l'est pas, soit rien ne se passe, soit un texte apparaît disant qu'il n'y a pas de photo de profil ?

Merci
 

Dranreb

XLDnaute Barbatruc
Re : insertion d'une photo dans un userform

Mais bien sûr, quand vous voudrez, si jamais vous voulez un jour.
Ce qui est sûr c'est que je ne vais pas ouvrir un nouveau classeur pour vous, qui risquerait de présenter trop de différences par rapport au vôtre.
 

kikou017

XLDnaute Nouveau
Re : insertion d'une photo dans un userform

Non, non, bien sûr,

Je pensais que quelques lignes comme celles que j'a insérées au début de ce fil seraient suffisantes et que je pourrai les ajouter à mon classeur.
C'est plus compliqué que ça ? Si oui, ne vous embêtez pas.
J'ai pour le moment 3 Commandbutton dans ma macro. Ce serait le 4ème.
Le bouton de modification des champs ressemble à ça :

Code:
'Pour le bouton Modifier

Private Sub CommandButton2_Click()

    Dim Ligne As Long

    Dim I As Integer

    If MsgBox("Confirmez-vous la modification de ce contact ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
        
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        
        Ligne = Me.ComboBox1.ListIndex + 2

        Ws.Cells(Ligne, "B") = ComboBox2

        For I = 1 To 5

            If Me.Controls("TextBox" & I).Visible = True Then

                Ws.Cells(Ligne, I + 2) = Me.Controls("TextBox" & I)

            End If

        Next I

    End If

    Unload Me
    UserForm1.Show

End Sub

On ne peut pas l'adapter à un bouton 'charger la photo' ?

Merci
 

Dranreb

XLDnaute Barbatruc
Re : insertion d'une photo dans un userform

Moi je n'alourdirais pas les manœuvres par un bouton pour faire afficher la photo. Je m'arrangerais pour qu'elle soit affichée automatiquement dès que ce serait possible. C'est à dire dès qu'une ligne existante de la base est reproduite dans les autres contrôles ou qu'on commence à renseigner ceux ci alors que de nouveaux nom et prénom figurent dans les ComboBox et que le fichier image correspondant existe.
 

Dranreb

XLDnaute Barbatruc
Re : insertion d'une photo dans un userform

C'est pour ça que j'ai créé un module de classe ComboBoxLié, très compliqué à l'intérieur, faisant appel à plein d'autres modules de service, et pourtant très simple à utiliser pour un débutant. Il lui suffit d'avoir une idée claire de ce qu'est un objet, une propriété, une méthode ou un évènement. ￾Évidemment ! Ce serait complètement idiot de se mettre au VBA sans avoir acquis ces notions de bases fondamentales, puisque toute les interfaces tant avec Excel qu'avec MSForms ne sont constituées que de ces choses là !
 

Discussions similaires

Réponses
1
Affichages
269
Compte Supprimé 979
C

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T