XL 2013 Réduire un code

maval

XLDnaute Barbatruc
Bonjour

Voila j'ai un code pour afficher des images en fonction du nom qui se trouve sur le label correspondant tous ceci fonctionne très bien mais j'aimerai si possible réduire le code ou le rendre plus propre pour éviter répéter le code 4 fois ?
Voici mon code

Code:
    ' Image Acteur Principal
    Image1.Visible = True
       nom = Me.Label426
       répertoire = "J:\Acteur\"
   If Dir(répertoire & nom & ".jpg") <> "" Then
       Me.Image1.Picture = LoadPicture(répertoire & nom & ".jpg") 
   Else
       Me.Image1.Picture = LoadPicture
  End If

    ' Image Second Acteur
    Image2.Visible = True
       nom = Me.Label427
       répertoire = "J:\Acteur\"
   If Dir(répertoire & nom & ".jpg") <> "" Then
       Me.Image2.Picture = LoadPicture(répertoire & nom & ".jpg") 
   Else
       Me.Image2.Picture = LoadPicture
  End If

    ' Image Troisième Acteur
    Image3.Visible = True
       nom = Me.Label428
       répertoire = "J:\Acteur\"
   If Dir(répertoire & nom & ".jpg") <> "" Then
       Me.Image3.Picture = LoadPicture(répertoire & nom & ".jpg") 
   Else
       Me.Image3.Picture = LoadPicture
  End If

    ' Image réalisateur
    Image4.Visible = True
       nom = Me.TextBox12
       répertoire = "J:\Réalisateur\"
   If Dir(répertoire & nom & ".jpg") <> "" Then
       Me.Image4.Picture = LoadPicture(répertoire & nom & ".jpg")
   Else
       Me.Image4.Picture = LoadPicture
  End If

Je vous remercie d'avance
 

MJ13

XLDnaute Barbatruc
Re : Réduire un code

Bonjour Max

Je ne vois pas trop l'intérêt de le faire :confused:. Ton code n'est pas si long.

Sinon, si tu veux vraiment le faire alors il faudra passer par un array et faire une boucle for i= 1 to 4 ... Next, mais là, cela va être plus compliqué à trouver la bonne syntaxe.
 

tototiti2008

XLDnaute Barbatruc
Re : Réduire un code

Bonjour Maval, Bonjour Michel, :)

ça n'a en effet rien d'indispensable, mais si tu y tiens

Code:
For i = 1 To 4        
Me.Controls("Image" & i).Visible = True
        nom = Me.Controls("Label" & 425 + i).Caption
        répertoire = "J:\Acteur\"
        If Dir(répertoire & nom & ".jpg") <> "" Then
            Me.Controls("Image" & i).Picture = LoadPicture(répertoire & nom & ".jpg")
        Else
            Me.Controls("Image" & i).Picture = LoadPicture
        End If
    Next i
 

Dranreb

XLDnaute Barbatruc
Re : Réduire un code

Bonjour.

Personnellement je préfèrerais:
VB:
AffImage Image1, "J:\Acteur\", Me.Label426.Caption
AffImage Image2, "J:\Acteur\", Me.Label427.Caption
AffImage Image3, "J:\Acteur\", Me.Label428.Caption
AffImage Image4, "J:\Réalisateur\", Me.TextBox12.Text
' …
End Sub

Sub AffImage(ByVal Img As MSForms.Image, ByVal Rép As String, ByVal NomFic As String)
Img.Visible = True
If Dir(Rép & NomFic & ".jpg") <> "" Then
   Img.Picture = LoadPicture(Rép & NomFic & ".jpg")
Else
   Img.Picture = LoadPicture: End If
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Réduire un code

je l'aurais mis ByRef instinctivement
Je comprend un peu ça.
Mais dans le cas d'un objet, l'attribut s'applique en quelque sorte au pointeur vers les emplacements mémoire contenant l'objet.
Ça ne change donc rien à l'accessibilité de l'objet, simplement avec ByVal un Set qui serait fait dessus dans la procédure ne réinitialiserait pas l'objet qui lui à été passé en paramètre par la procédure appelante.

C'est d'ailleurs pour ça que dans une Worksheet_Change Target est passé ByVal.
Vous pouvez refaire un Set dessus de taille différente si ça vous arrange, c'est juste un variable locale initialisée par la procédure appelante, et non l'adresse d'une variable externe.
 
Dernière édition:

Discussions similaires

Réponses
12
Affichages
487
Réponses
1
Affichages
333
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 446
Messages
2 088 491
Membres
103 870
dernier inscrit
didiexcel