Affichage photo en UF

Bonjour à tous,

il y a un bug que je n'ai pas réussit à résoudre dans mon application pour une école. La photo de la première ligne n'apparait pas.

Elle apparait que si on revient dessus avec les boutons de défilement aprés et avant. Les autres photos apparaissent aussi.

image
'remplissage cols listbox avec eleves selon les matiéres des classes
    If Me.lstElev.ListCount = 0 Then 'pour ne pas doubler la liste
         For i = 2 To drl1
            If ws1.Cells(i, 10).Value = Me.cmbCl.Value Then
                ecole.lstElev.AddItem
                Me.lstElev.List(Me.lstElev.ListCount - 1, 0) = ws1.Cells(i, 1)    'matricule
                ecole.lstElev.List(ecole.lstElev.ListCount - 1, 1) = ws1.Cells(i, 2)    'nom
                ecole.lstElev.List(ecole.lstElev.ListCount - 1, 2) = ws1.Cells(i, 3)    'prenom
                ecole.lstElev.List(ecole.lstElev.ListCount - 1, 3) = ws1.Cells(i, 4)    'sexe
                cpt = cpt + 1
            End If
         Next i
    End If
'msg classe inexistante
    If cpt = 0 Then
        MsgBox "Classe inexistante."
        Exit Sub
    End If
    If Me.lstElev.ListCount <> 0 Then
        Me.lstElev.ColumnWidths = "50;100;100;30" 'largeur cols listbox
        Me.lstElev.Selected(0) = True 'remplissage champs UF avec notes devoirs selon matiére
    End If
'affichage photo             1ere photo pas affichée directement
    For j = 0 To Me.lstElev.ListCount - 1
        For i = 2 To drl2
            If Me.lstElev.Selected(0) = True And ws2.Cells(i, 1).Value = Me.lstElev.List(0, 0) Then
                chemin = "C:\Users\Pairaud\OneDrive\Documents\EXCEL\JOB\ecole\Photos Eleves\" & ws2.Cells(i, 1) & ".jpg"
                chemin2 = "C:\Users\Pairaud\OneDrive\Documents\EXCEL\JOB\ecole\Photos Eleves\0.jpg"
                        If Dir(chemin) <> "" Then
                            Me.photoN.Picture = LoadPicture(chemin)
                            Me.photoN.PictureSizeMode = 3
                ElseIf Dir(chemin) = "" Then
                    Me.photoN.Picture = LoadPicture(chemin2)
                    Me.photoN.PictureSizeMode = 3
                End If
            End If
        Next i
    Next j

La macro s'appelle Private Sub listNot_Click() sous l'UF ecole.

Merci de votre aide.

18ecole.zip (315.41 Ko)

Bonjour, le problème c'est qu'il y a plusieurs événements qui devraient déclencher l'affichage de la photo.

Le plus simple pour ne pas répéter 10 fois le même code : mettre la macro dans un module.

Puis dans tous les événements qui nécessite le changement d'affichage de la macro ( liste clic sur un nom , flêche droite , fléche gauche , userform initialyze ....)

indiquer le nom de la macro.

Bonjour Xmenpl,

Je vais essayer tout çà.

Pour le moment, J'ai essayé un call juste pour l'affichage de la photo , mais çà fait pareil. Pire si je mets le même call dans les boutons avant et aprés, les photos n'apparaissent plus ...

11ecole.zip (334.93 Ko)

Bonsoir Fronck, Xmenpl,

Modifier ainsi la partie affichage de la première photo lors du click sur le bouton LISTER.

'affichage photo: Première photo en affichage directe par le matricule
            chemin = "C:\Users\Pairaud\OneDrive\Documents\EXCEL\JOB\ecole\Photos Eleves\" & ws2.Cells(2, 1) & ".jpg"
                        If Dir(chemin) <> "" Then
                            Me.lstElev.ListIndex = 1
                            Me.photoN.Picture = LoadPicture(chemin)
                            Me.photoN.PictureSizeMode = 3
                ElseIf Dir(chemin) = "" Then
                chemin2 = "C:\Users\Pairaud\OneDrive\Documents\EXCEL\JOB\ecole\Photos Eleves\0.jpg"
                    Me.photoN.Picture = LoadPicture(chemin2)
                    Me.photoN.PictureSizeMode = 3
                End If

'msg classe inexistante

Toutes les boucles (i et j) dans cette partie ont été enlevées car ici elles ne servent à rien. Ainsi qu'un IF et son End IF

La liste est affichée suite à l'appui sur le bouton de commande. Et le premier de la classe s'affichera.

Etant donné que tu n'est pas dans le code événementiel du contrôle ListBox.

Bonjour xcellius,

J'ai besoin des boucles parce que le 1er de la liste ne commence pas toujours en ligne 2 de la feuille.

J'ai essayé avec ce code, mais pas de changement pour le 1er de la listbox.

    For j = 0 To ecole.lstElev.ListCount - 1
        For i = 2 To drl2
            If ws2.Cells(i, 1).Value = ecole.lstElev.List(0, 0) Then
                chemin = "C:\Users\Pairaud\OneDrive\Documents\EXCEL\JOB\ecole\Photos Eleves\" & ws2.Cells(2, 1) & ".jpg"
                chemin2 = "C:\Users\Pairaud\OneDrive\Documents\EXCEL\JOB\ecole\Photos Eleves\0.jpg"
                        If Dir(chemin) <> "" Then
                            ecole.lstElev.ListIndex = j
                            ecole.photoN.Picture = LoadPicture(chemin)
                            ecole.photoN.PictureSizeMode = 3
                ElseIf Dir(chemin) = "" Then
                    ecole.photoN.Picture = LoadPicture(chemin2)
                    ecole.photoN.PictureSizeMode = 3
                End If
            End If
        Next i
    Next j

Cdt

Bonjour Fronck,

J'ai essayé avec ce code, mais pas de changement pour le 1er de la listbox.

J'ai besoin des boucles parce que le 1er de la liste ne commence pas toujours en ligne 2 de la feuille.

Normal, car tu as gardé ws2.Cells(2, 1) ce qui cible la ligne 2 et non ws2.Cells(i, 1) qui cible lui l'index de ta boucle (inutile à mon sens).

Ton premier de la liste commence alphabétiquement selon la classe couplée à la matière.

Or tu le fais déjà par le remplissage cols listbox avec élèves selon les matières des classes

Cette première boucle est suffisante pour te permettre de cibler le premier de la liste.

Pas besoin d'aller le chercher par ta comparaison If ws2.Cells(i, 1).Value = ecole.lstElev.List(0, 0) Then ...

Ton premier (classe + matière) c'est Me.lstElev.List(0, 0)

Insère le code ci-dessous après le commentaire 'affichage photo: Première photo en affichage directe par le matricule

Elv = Me.lstElev.List(0, 0)
Me.lstElev.ListIndex = 0
Stop ' A enlever lorsque test effectué

Et au survol souris de la variable Elv tu auras bien le matricule de l'élève premier par ordre alphabétique classe + matière ciblées.

Ainsi que sa surbrillance. Donc il serait plus simple de faire

chemin = "C:\Users\Pairaud\OneDrive\Documents\EXCEL\JOB\ecole\Photos Eleves\" & Me.lstElev.List(0, 0) & ".jpg"

ou si tu souhaites garder la variable Elv

chemin = "C:\Users\Pairaud\OneDrive\Documents\EXCEL\JOB\ecole\Photos Eleves\" & Elv & ".jpg"

En souhaitant que cette proposition te convienne.

re excellius,

Voilà le code, avec le code pour la listbox, puis le tiens pour la 1ere ligne de la listbox.

'effacement liste précédente
ecole.lstElev.Clear
'remplissage cols listbox avec eleves selon les matiéres des classes
    If Me.lstElev.ListCount = 0 Then 'pour ne pas doubler la liste
         For i = 2 To drl1
            If ws1.Cells(i, 10).Value = Me.cmbCl.Value Then
                ecole.lstElev.AddItem
                Me.lstElev.List(Me.lstElev.ListCount - 1, 0) = ws1.Cells(i, 1)    'matricule
                ecole.lstElev.List(ecole.lstElev.ListCount - 1, 1) = ws1.Cells(i, 2)    'nom
                ecole.lstElev.List(ecole.lstElev.ListCount - 1, 2) = ws1.Cells(i, 3)    'prenom
                ecole.lstElev.List(ecole.lstElev.ListCount - 1, 3) = ws1.Cells(i, 4)    'sexe
                cpt = cpt + 1
            End If
         Next i
    End If
'affichage photo
Elv = Me.lstElev.List(0, 0)
Me.lstElev.ListIndex = 0

Et ce que çà donne.

image

Est-ce que tu essaies avec des photos de ton côté ?

Cdt

A nouveau,

Est-ce que tu essaies avec des photos de ton côté ?

Oui, bien sur. Voir ci-dessous. Pour la 5ième1

1

Et pour la 5ième2

2

Bon, ces deux élèves sont un peu turbulents, mais leur professeur LUC est assez Lucky...

Je rappelle la partie du code. En remettant tes chemins habituels.

'affichage photo: Première photo de la classe & matière en affichage directe
Elv = Me.lstElev.List(0, 0)
            chemin = C:\Users\Pairaud\OneDrive\Documents\EXCEL\JOB\ecole\Photos Eleves\" & Elv & ".jpg"           
                            Me.photoN.Picture = LoadPicture(chemin)
                            Me.photoN.PictureSizeMode = 3
                            Me.lstElev.ListIndex = 1
                If Dir(chemin) = "" Then
                chemin2 = "C:\Users\Pairaud\OneDrive\Documents\EXCEL\JOB\ecole\Photos Eleves\0.jpg"
                    Me.photoN.Picture = LoadPicture(chemin2)
                    Me.photoN.PictureSizeMode = 3
                End If

Super çà fonctionne avec

            Elv = Me.lstElev.List(0, 0)

Merci X cellus.

Bonjour fronck, le fil, le forum,

Super intéressant ce projet ...

ric

Bonjour ric, X cellus,

Merci Ric, le fichier est en appli ici, avec une vidéo.

Peut-être que des écoles seront intéressées.

Cdt

Bonjour, Fronck, Le Forum,

As tu mis ton application à jour? sur le Forum Applications.

Bonjour X cellus,

Oui c fait, t'inquiètes.

Cdt

Rechercher des sujets similaires à "affichage photo"