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

Phillip

XLDnaute Occasionnel
Bonjour,

Je me torture toujours l'esprit.... 😭

J'ai une macro qui calcule 17 variable. Les valeurs de chacune de ces variables peut prendre les valeur 1 à 22 uniquement, en fonction d'une entrée dans mon tableau excel origine...par exemple, un coup la variable 1 peut valoir 2, et lorsque je fais retourner la macro avec une entrée de tableau différente elle peut prendra la valeur 17 puis le prochain coup 15...De même pour la variable 2, 3....jusqu'à 17...
VB:
'les postes (mes variables)peuvent prendre la valeur 1 a 22. Ici, j'en ai FIXE la valeur pour des raisons de tests, mais évidemment la valeur n'est jamais fixe

poste1 = 5
poste2 = 2
poste3 = 19
poste4 = 17
poste5 = 16
poste6 = 13
poste7 = 13
poste8 = 14
poste9 = 10
poste10 = 22
poste11 = 11
poste12 = 2
poste13 = 13
poste14 = 20
poste15 = 10
poste16 = 20
poste17 = 1

Je voudrais, pour chacune des variables, en fonction de sa valeur, faire une action. (en l’occurrence, insérer une image (j'en ai 22 donc) qui vient de mon répertoire

Par exemple,
Si poste1=22, j'insère l'image 22 à la position que j'ai choisie pour le poste1,
Si poste1=8, j'insère l'image 8 à la position que j'ai choisie pour le poste1 etc. ...
(Avec la valeur de la variable poste1 plus haut j'insèrerai l'image 5 à la position que j'ai choisie pour le poste1)

Si poste2 = 3, j'insère l'image 3 à à la position que j'ai choisie pour le poste2,
Si poste2=17, j'insère l'image 17 à la position que j'ai choisie pour le poste2 etc. ...
.......
Si poste17=7, j'insère l'image 7 à à la position que j'ai choisie pour le poste17, si poste17=17, j'insère l'image 18 à la position que j'ai choisie pour le poste17 etc. ...

Il faut donc que je scanne mes 17 variables, et que je trouve leur valeur parmi 22 puis faire mon action...

Je suis perdu dans mes boucles, array et dicos....

Quelqu'un peut m'aider ?

merci

Cordialement

Phillip
 

Dudu2

XLDnaute Barbatruc
Bonjour
si poste17=17, j'insère l'image 18 à la position que j'ai choisie pour le poste17
?
Je ne vois pas trop le problème et je ne se sais pas si ça répond à ta question.
VB:
Sub a()
    Dim TabPostes(1 To 17) As Integer
    Dim NoPoste As Integer
    
    'Exemple de valorisation
    NoPoste = 5
    TabPostes(NoPoste) = ActiveSheet.[B12]
    
    'Utilisation
    For NoPoste = 1 To UBound(TabPostes)
        Call ChargerImage(NoPoste, TabPostes(NoPoste))
    Next NoPoste
End Sub

Sub ChargerImage(PostePosition As Integer, NoImage As Integer)
    .../...
End Sub
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Philip, bonjour le forum,

Sans le vrai code impossible de t'aider. L'exemple que tu donnes ne sert absolument à rien...
Comment sont calculées les variables ? Pourquoi pas un tableau pour tes 17 variables ?

[Édition]
Bonjour Dudu, nos posts ses sont croisés...
 

Phillip

XLDnaute Occasionnel
Bonjour Robert et Dudu2,

@Dudu2, ça ne répond pas à mon besoin, en tous cas, je ne sais pas le faire marcher...

@ Robert : Si j'avais le vrai code, je n'aurais pas besoin de poser la question :)...Mais je vais tenter quelque chose...
VB:
Sub cartes()

'Je calcule les postes : les valeurs de ces postes (1,4,5,6...) me permettront d'insérer les fichiers .jpg voiture1, le voiture4, le voiture5
'J'ai dans cet exemple 6 POSTES, mais qui peuvent prendre 12 VALEURS qui sont les "indices" de fichiers .jpg : voiture1, voiture2, voiture3, voiture4, voiture5, voiture6, jusqu'à voiture12
poste1 = 1
poste3 = 4
poste4 = 5
poste5 = 6
poste6 = poste4 + poste5
poste2 = poste1 + poste6

Debug.Print poste1
Debug.Print poste2
Debug.Print poste3
Debug.Print poste4
Debug.Print poste5
Debug.Print poste6

'Ici, je définis le chemin du fichier .jpg
Tablo_fichiers = Array(poste1, poste2, poste3, poste4, poste5, poste6)
    For Each i In Tablo_fichiers
    chemin = "C:\Users\Phillip\Desktop\voiture" & i & ".jpg"
 Debug.Print chemin


next i

'une fois que j'ai mon chemin pour chaque fichier en fonction de i, je voudrais
'que dans ma feuille, ou j'ai défini des endroits j'insère mes fichiers jpg voiture...

Mais je ne sais pas comment faire la relation entre la VALEUR de poste1 et son nom de variable qui me permet d'insérer le bon fichier à l'endroit du poste1..etc...
'place du fichier correspondant au poste1 (qui est le fichier voiture1.jpg=>1=valeur de poste1)
ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=2, Top:=988, Width:=100, Height:=140

place du fichier correspondant au poste2  (qui est le fichier voiture12.jpg=>12= valeur de poste1+poste4+poste5)
ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=20, Top:=1988, Width:=100, Height:=140

etc...

'place du fichier correspondant au poste6 (qui est le fichier voiture11.jpg=>11= valeur de poste4+poste5))
ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=42, Top:=2000, Width:=100, Height:=140

   
    Next i

'les places dédiées au images poste ne changent jamais : l'image du poste"x" sera toujours au même endroit
'MAIS ça ne sera pas toujours la même image puisque la valeur de poste"x" pourra changer...

'Il faut donc que je regarde la valeur de chaque poste pour trouver le nom complet de mon fichier jpg (et donc mon chemin),
'PUIS insérer ce fichier à l'endroit défini pour le poste étudié...


End Sub

Merci de votre aide

Cordialement

Phillip
 
Dernière édition:

Phillip

XLDnaute Occasionnel
Je crois que j'ai trouvé avec des if

VB:
Sub cartes()

'Je calcule les postes : les valeurs de ces postes (1,4,5,6...) me permettront d'insérer les fichiers .jpg voiture1, le voiture4, le voiture5
'J'ai dans cet exemple 6 POSTES, mais qui peuvent prendre 12 VALEURS qui sont les "indices" de fichiers .jpg : voiture1, voiture2, voiture3, voiture4, voiture5, voiture6, jusqu'à voiture12
poste1 = 1
poste3 = 4
poste4 = 5
poste5 = 6
poste6 = poste4 + poste5
poste2 = poste1 + poste6

Debug.Print poste1
Debug.Print poste2
Debug.Print poste3
Debug.Print poste4
Debug.Print poste5
Debug.Print poste6

'Ici, je définis le chemin du fichier .jpg
'chemin = "C:\Users\Phillip\Desktop\voiture" & "valeur de la variable poste1" & ".jpg"

'Je ne sais pas quoi mettre dans ce tableau
Tablo_fichiers = Array(poste1, poste2, poste3, poste4, poste5, poste6)
    For Each i In Tablo_fichiers
    chemin = "C:\Users\JTMQ6376\Desktop\voiture" & i & ".jpg"
    Debug.Print chemin
    Debug.Print i
    'place du fichier correspondant au poste1
    If i = 1 Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=2, Top:=2, Width:=100, Height:=140
    
    ElseIf i = 12 Then
    'place du fichier correspondant au poste2
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=50, Top:=2, Width:=100, Height:=140
    
    ElseIf i = 4 Then 'place du fichier correspondant au poste3
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=100, Top:=2, Width:=100, Height:=140
    
    ElseIf i = 5 Then 'place du fichier correspondant au poste4
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=200, Top:=2, Width:=100, Height:=140
    
    ElseIf i = 6 Then 'place du fichier correspondant au poste5
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=200, Top:=2, Width:=100, Height:=140
    
    ElseIf i = 11 Then 'place du fichier correspondant au poste6
ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=400, Top:=2, Width:=100, Height:=140
    
    End If
    Next i

'Dans ma feuille, j'ai défini des endroits où je veux insérer mes fichiers jpg voiture...
 



'
'les places dédiées au images poste ne changent jamais : l'image du poste1 sera toujours au même endroit
'MAIS ça ne sera pas toujours la même image puisque la valeur de poste1 pourra changer...

'Il faut donc que je regarde la valeur de chaque poste pour trouver le nom complet de mon fichier jpg (et donc mon chemin),
'PUIS insérer ce fichier à l'endroit défini pour le poste étudié...


End Sub

Qu'en pensez-vous ? Puis-je optimiser mes "if" (dans la réalité j'en ai 22...

merci

Cordialement

Phillip
 

vgendron

XLDnaute Barbatruc
Hello
Plutot qu'un If répétitif, je pencherais plutot pour un select case
VB:
Select case i 'selon la valeur de i, tu définis les paramètres de position
    Case 1
     gauche=2, haut=2, largeur=100, hauteur=140
  case 2
     gauche=50, haut=2, largeur=100, hauteur=140

...
end select
'tu ajouttes ton image
ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=gauche, Top:=haut, Width:=largeur, Height:=hauteur
 

laurent950

XLDnaute Accro
Bonjour le fil, bonjour le forum,
VB:
Sub Test()
poste1 = 1
poste3 = 4
poste4 = 5
poste5 = 6
poste6 = poste4 + poste5
poste2 = poste1 + poste6

Tablo_fichiers = Array(poste1, poste2, poste3, poste4, poste5, poste6)

    For i = LBound(Tablo_fichiers) To UBound(Tablo_fichiers)
    chemin = "C:\Users\JTMQ6376\Desktop\voiture" & Tablo_fichiers(i) & ".jpg"
    Debug.Print chemin
    Debug.Print i & " (pour i) " & " = Poste " & Tablo_fichiers(i)
    'place du fichier correspondant au poste1
    If Tablo_fichiers(i) = 1 Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=2, Top:=2, Width:=100, Height:=140
   
    ElseIf Tablo_fichiers(i) = 12 Then
    'place du fichier correspondant au poste2
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=50, Top:=2, Width:=100, Height:=140
   
    ElseIf Tablo_fichiers(i) = 4 Then 'place du fichier correspondant au poste3
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=100, Top:=2, Width:=100, Height:=140
   
    ElseIf Tablo_fichiers(i) = 5 Then 'place du fichier correspondant au poste4
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=200, Top:=2, Width:=100, Height:=140
   
    ElseIf Tablo_fichiers(i) = 6 Then 'place du fichier correspondant au poste5
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=200, Top:=2, Width:=100, Height:=140
   
    ElseIf Tablo_fichiers(i) = 11 Then 'place du fichier correspondant au poste6
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=400, Top:=2, Width:=100, Height:=140
   
    End If
    Next i
End Sub
 

Phillip

XLDnaute Occasionnel
Merci Robert de ce jugement sans me connaître...Je ne COMPRENDS pas ce que je dois faire et ne comprends pas ce que vous me dites. Je suis correct, poli, pose des questions, désolé de ne pas être aussi fort et clair que toi. J'adorerai avoir vos connaissances et aider les autres sur le forum. C'est vrai que je suis souvent demandeur, et pas toujours clair sans doute....Mais je ne demande qu'à m'améliorer...
 

Phillip

XLDnaute Occasionnel
Bonjour vgendron... C'est ce que je m'apprête à faire...

Le fichier excel n'est qu'une représentation spatiale de ce que je veux....

Module insimage....
J'efface d'abord toutes les images...
Mon code ne fonctionne pas comme je le voudrais, c'est ce bout là

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
 
'test avec valeurs de postes bidon
'J'ai 22 arcanes, mais toutes ne sont pas forcément utilisées, d'autres peuvent être en double
poste1 = 5
poste2 = 2
poste3 = 19
poste4 = 17
poste5 = 16
poste6 = 13
poste7 = 13
poste8 = 14
poste9 = 10
poste10 = 22
poste11 = 11
poste12 = 2
poste13 = 13
poste14 = 20
poste15 = 10
poste16 = 20
poste17 = 1

'
    Tablo_fichiers = Array(poste1, poste2, poste3, poste4, poste5, poste6, poste7, poste8, poste9, poste10, poste11, poste12, poste13, poste14, poste15, poste16, poste17)
    For Each i In Tablo_fichiers
    chemin = "C:\Users\JTMQ6376\Desktop\testetoile\arcane" & i & ".jpg"
    Debug.Print chemin
    Debug.Print i
    'place du fichier correspondant au poste1
    'place du poste1
    
    If i = 1 Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=167, Top:=1269, Width:=100, Height:=140
    

    'place du poste2
    ElseIf i = 2 Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=2, Top:=988, Width:=100, Height:=140
    ElseIf i = 3 Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=385, Top:=1417, Width:=100, Height:=140
    ElseIf i = 4 Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=0, Top:=460, Width:=100, Height:=140
    ElseIf i = 5 Then
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=665, Top:=1263, Width:=100, Height:=140
    ElseIf i = 6 Then
    ActiveSheet.Shapes.AddPicture Filenam



CAR : En fait il met le fichier arcane"x" à la position du poste"x"

ALORS qu'en l'occurence, comme poste1=5, il faudrait que j'ai le arcane à la position de poste1 (Left:=167, Top:=1269), le arcane2 à la position poste2 ( Left:=2, Top:=988), le arcane19 à la position du poste3 (...), etc...

Je me perds dans mes if et dans mes indices i

Merci encore

Cordialement
 

Pièces jointes

  • testtab.xlsm
    752.3 KB · Affichages: 10

vgendron

XLDnaute Barbatruc
ce code fonctionne chez moi
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
 
'test avec valeurs de postes bidon
'J'ai 22 arcanes, mais toutes ne sont pas forcément utilisées, d'autres peuvent être en double
poste1 = 5
poste2 = 2
poste3 = 19
poste4 = 17
poste5 = 16
poste6 = 13
poste7 = 13
poste8 = 14
poste9 = 10
poste10 = 22
poste11 = 11
poste12 = 2
poste13 = 13
poste14 = 20
poste15 = 10
poste16 = 20
poste17 = 1

Tablo_fichiers = Array(poste1, poste2, poste3, poste4, poste5, poste6, poste7, poste8, poste9, poste10, poste11, poste12, poste13, poste14, poste15, poste16, poste17)
For Each i In Tablo_fichiers
    chemin = "C:\Users\JTMQ6376\Desktop\testetoile\arcane" & i & ".jpg"
    'Debug.Print chemin
    Largeur = 100: Hauteur = 140
    Select Case i
        Case 1
            Gauche = 167: Haut = 1269
        Case 2
            Gauche = 2: Haut = 988
        Case 3
            Gauche = 385: Haut = 1417
        Case 4
            Gauche = 0: Haut = 460
        Case Else
            MsgBox "positions non définies"
            GoTo suivant
    End Select
    ActiveSheet.Shapes.AddPicture Filename:=chemin, linktofile:=msoFalse, savewithdocument:=msoTrue, Left:=Gauche, Top:=Haut, Width:=Largeur, Height:=Hauteur
suivant:
Next i

End Sub

1) je te laisse compléter le case 5 6 7.....
2) il faut que les images "arcane1.jpg arcane2.jpg... existent bien dans le répertoire que tu as défini
 

Discussions similaires

Statistiques des forums

Discussions
311 705
Messages
2 081 724
Membres
101 804
dernier inscrit
chefTarik