Utilisation des formes avec Excel/VBA
Bonjour!
Je crois avoir une très bonne question, ne sachant même pas si cette procédure existe... J'aimerais pouvoir affecter une 'Shapes' à un endroit très précis de ma feuille en VBA. Comme par exemple, dans le fichier joint, j'indiquerais que je veux un triangle pointant sur 7140, et le résultat obtenu serait ce que vous voyez. J'ai déjà les lignes de code pour le 'Template' et je crois savoir comment définir moi-même mes 'Shapes', tout ce qu'il me manque, c'est de savoir comment arriver à les placer à l'endroit voulu.
Merci pour toute aide éventuelle!
Bonjour Mondapar,
Dans le fichier joint :
1. Tu entres une valeur en G5
2. Tu cliques sur le bouton "Bouger le triangle"
Voici la procédure associée :
Option Explicit
Sub BougerLeTriangle()
Dim trouve As Range
Dim x As Double, LargeurShape As Double
'on cherche la valeur saisie en G5 dans la ligne 12
Set trouve = Rows(12).Find([G5], LookIn:=xlValues)
'si la valeur saisie est trouvée, on récupère sa position avec la propriété Left
'ici on ajoute le Width (largeur) de la cellule car on a une cellule fusionnée
If Not trouve Is Nothing Then
x = Range(trouve.Address).Left + Range(trouve.Address).Width
'on place ensuite le "Shape" qui a pour nom "AutoShape 1" en jouant sur la propriété Left
'ici on utilise également le Width pour placer la pointe du triangle plutôt que le sommet gauche
LargeurShape = ActiveSheet.Shapes("AutoShape 1").Width
ActiveSheet.Shapes("AutoShape 1").Left = x - LargeurShape / 2
Else
MsgBox "J'ai pas trouvé la valeur !", vbExclamation
End If
End Sub
Wow! Génial comme réponse, merci beaucoup!
Selon toi, si je veux être plus précis dans le placement de mon triangle, si je souhaite par exemple le placer à 7135(valeur qui ne se trouve pas dans la ligne G5), cela est-il possible? C'est que je ne veux pas encombrer le tableau en mettant toute les valeurs possibles dans la ligne G5...
Salut tout le monde,
Joli Banzai.
Une autre solution répondant à la dernière question de Mondapar. Remplace la procédure actuelle par celle-ci :
Option Explicit
Sub BougerLeTriangle()
Dim trouve As Range
Dim x As Double, LargeurCell As Double, LargeurShape As Double
'on cherche la valeur saisie en G5 dans la ligne 12
Set trouve = Rows(12).Find([G12], LookIn:=xlValues)
LargeurCell = [A1].Width
'si la valeur saisie est trouvée, on récupère sa position avec la propriété Left
'ici on ajoute le Width (largeur) de la cellule car on a une cellule fusionnée
If Not trouve Is Nothing Then
x = Range(trouve.Address).Left + Range(trouve.Address).Width + ([G5].Value - [G12].Value) / 5 * LargeurCell
'on place ensuite le "Shape" qui a pour nom "AutoShape 1" en jouant sur la propriété Left
'ici on utilise également le Width pour placer la pointe du triangle plutôt que le sommet gauche
LargeurShape = ActiveSheet.Shapes("AutoShape 1").Width
ActiveSheet.Shapes("AutoShape 1").Left = x - LargeurShape / 2
Else
MsgBox "J'ai pas trouvé la valeur !", vbExclamation
End If
End SubLà tu entres n'importe quelle valeur en G5 (faut que ça soit supérieur à la valeur en G12 c'est-à-dire l'origine de ton axe).
L'astuce ici est de définir une échelle. Ici une cellule correspond à 5 unités. Donc si tu entres par exemple la valeur 7135, cela équivaudra à (7135-7125)/5=2 cellules
T'as plus qu'à multiplier ce nombre de cellules par la largeur d'une cellule (définie ici par la largeur de A1) et tu as le résultat attendu.