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.
'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.
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
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.
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
Et pour la 5ième2
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)
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