XL 2016 22 Actions en fonction de la valeur de 17 variables

soan

XLDnaute Accro
Bonjour @Phillip, le fil,

dans le fichier joint, je te propose une solution sans test If ni Select Case. ;)

fais Alt F11 pour voir le code VBA ; puis Alt F11 pour revenir sur Excel.

si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. :)


soan
 

Fichiers joints

Phillip

XLDnaute Occasionnel
Bonjour @Phillip, le fil,

dans le fichier joint, je te propose une solution sans test If ni Select Case. ;)

fais Alt F11 pour voir le code VBA ; puis Alt F11 pour revenir sur Excel.

si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. :)


soan
Bonjour Soan,

Merci pour ce code très.."propre" et qui fonctionne, mais...
1) Ca me remplit correctement et comme attendu mon onglet avec mes images (toutes !), mais ça plante à la dernière occurence (il dit qu'il ne trouve pas le fichier spécifié)
2) pour l'array po = Array(5, 2, 19, 17, 16, 13, 13, 14, 10, 22, 11, 2, 13, 20, 10, 20, 1, 0, 0, 0, 0, 0)
les valeurs 5,2...sont des exemples...Cela signifie-t'il que si je mets
po=array(poste1, poste2, poste3,...Poste17, 0,0,0,0,0) car mes poste"x" de cet array sont des variables et non des constantes, cela fonctionnera pareil ?

En tous cas merci, super boulot !
 

Phillip

XLDnaute Occasionnel
re,
VB:
Sub InsereImage()
Dim chemin As String
Dim nomfichier As String
Dim item As Variant

Dim Img As Object
'
For Each Img In ActiveSheet.Pictures
Img.Delete
Next

Dim Tablo_fichiers() As Variant
    ReDim Tablo_fichiers(1 To 2, 1 To 17)

poste3 = 5: Tablo_fichiers(1, 1) = "poste1": Tablo_fichiers(2, 1) = poste1
poste2 = 2: Tablo_fichiers(1, 2) = "poste2": Tablo_fichiers(2, 2) = poste2
poste3 = 19: Tablo_fichiers(1, 3) = "poste3": Tablo_fichiers(2, 3) = poste3
poste4 = 17: Tablo_fichiers(1, 4) = "poste4": Tablo_fichiers(2, 4) = poste4
poste5 = 16: Tablo_fichiers(1, 5) = "poste5": Tablo_fichiers(2, 5) = poste5
poste6 = 13: Tablo_fichiers(1, 6) = "poste6": Tablo_fichiers(2, 6) = poste6
poste7 = 13: Tablo_fichiers(1, 7) = "poste7": Tablo_fichiers(2, 7) = poste7
poste8 = 14: Tablo_fichiers(1, 8) = "poste8": Tablo_fichiers(2, 8) = poste8
poste9 = 10: Tablo_fichiers(1, 9) = "poste9": Tablo_fichiers(2, 9) = poste9
poste10 = 22: Tablo_fichiers(1, 10) = "poste10": Tablo_fichiers(2, 10) = poste10
poste11 = 11: Tablo_fichiers(1, 11) = "poste11": Tablo_fichiers(2, 11) = poste11
poste12 = 2: Tablo_fichiers(1, 12) = "poste12": Tablo_fichiers(2, 12) = poste12
poste13 = 13: Tablo_fichiers(1, 13) = "poste13": Tablo_fichiers(2, 13) = poste13
poste14 = 20: Tablo_fichiers(1, 14) = "poste14": Tablo_fichiers(2, 14) = poste14
poste15 = 10: Tablo_fichiers(1, 15) = "poste15": Tablo_fichiers(2, 15) = poste15
poste16 = 20: Tablo_fichiers(1, 16) = "poste16": Tablo_fichiers(2, 16) = poste16
poste17 = 1: Tablo_fichiers(1, 17) = "poste17": Tablo_fichiers(2, 17) = poste17

    For i = LBound(Tablo_fichiers, 2) To UBound(Tablo_fichiers, 2)
    chemin = "C:\Users\JTMQ6376\Desktop\testetoile\arcane" & Tablo_fichiers(2, i) & ".jpg"
    Debug.Print chemin
    Debug.Print i & " (pour i) " & " = Poste " & Tablo_fichiers(1, i)
    'place du fichier correspondant au poste1
    'place du fichier correspondant au poste1
    'place du poste1
    If Tablo_fichiers(1, i) = "poste1" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=167, Top:=1269, Width:=100, Height:=140
    'place du poste2
    ElseIf Tablo_fichiers(1, i) = "poste2" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=2, Top:=988, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste3" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=385, Top:=1417, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste4" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=0, Top:=460, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste5" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=665, Top:=1263, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste6" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=842, Top:=985, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste7" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=838, Top:=462, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste8" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=665, Top:=268, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste9" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=166, Top:=266, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste10" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=467, Top:=1138, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste11" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=467, Top:=1001, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste12" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=467, Top:=860, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste13" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=467, Top:=719, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste14" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=467, Top:=575, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste15" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=467, Top:=429, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste16" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=467, Top:=285, Width:=100, Height:=140
    ElseIf Tablo_fichiers(1, i) = "poste17" Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=385, Top:=4, Width:=100, Height:=140
    End If
Next i
End Sub
Merci Laurent950 pour ce code qui fonctionne parfaitement, mais j'ai la même question que pour Soane : tu as codé en "dur" poste1=5, poste2=2, poste3=19, etc... Comment adapter ce code pour que mes poste"x" ne soient pas en dur mais soient variables car proviennent du résultat de calculs plus haut dans la macro ?
En tous cas, merci de ta patience !
 

soan

XLDnaute Accro
@Phillip

tu as écrit :

« mais ça plante à la dernière occurence (il dit qu'il ne trouve pas le fichier spécifié) »

oui, tu as raison ! c'est car j'ai oublié qu'il y a 0 pour les arcanes inutilisées ! :oops:

fichier joint corrigé. :) (donc il y a quand même un test If, finalement ! 😜)

dans la sub InsereImage(), la modif est juste avant le Next i :

VB:
For i = 1 To 22
  k = i - 1 'car pour les 3 arrays po, pg, ph : c'est à partir de 0, pas à partir de 1
  If po(k) > 0 Then ActiveSheet.Shapes.AddPicture Filename:=fp & po(k) & ".jpg", linktofile:=msoFalse, _
    savewithdocument:=msoTrue, Left:=pg(k), Top:=ph(k), Width:=100, Height:=140
Next i
soan
 

Fichiers joints

Dernière édition:

soan

XLDnaute Accro
@Phillip

pour ta question 2) : mon array po est pour remplacer
toutes tes variables poste1, poste2, poste3, ..., Poste22

je suis pas sûr que ça va marcher en mettant :
po=array(poste1, poste2, poste3,...Poste17, 0,0,0,0,0)
mais essaye toujours ; si ça marche, tant mieux !
sinon, faudra faire une adaptation.


soan
 

Phillip

XLDnaute Occasionnel
Bonjour à toutes et tous, et à Soan,

Merci beaucoup ! Pour l'instant, ton code marche à la perfection, avec la modif sur "if" et en remplissant po comme suit
VB:
po = Array(poste1, poste2, poste3, poste4, poste5, poste6, poste7, poste8, poste9, poste10, poste11, poste12, poste13, poste14, poste15, poste16, poste17, 0, 0, 0, 0, 0)
Donc je continue mes tests, mais pour l'instant c'est parfait !

Merci encore

Cordialement

Phillip
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas