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!

70exemple.xls (17.50 Ko)

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...

Bonsoir

Juste pour le fun

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 Sub

Là 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.

Rechercher des sujets similaires à "utilisation formes vba"