Texte d'une forme

Bonjour à tous,

Problème :

Je désire qu'en fonction du choix de l'utilisateur, le texte qui s'affiche dans une forme soit alimenté automatiquement.

Private Sub Worksheet_Change(ByVal Target As Range)

If [Q3] = 1 Then
Shapes("Essaiforme1").DrawingObject.Text = Range("Ex_N")

ElseIf [Q3] <> 1 Then
Shapes("Essaiforme1").DrawingObject.Text = Range("Ex_N_1")

End If

End Sub

Mon code ne fonctionne pas.

Une âme charitable pourrait pallier mon incompétence ?

Je vous en remercie par avance.

JFL

Bonjour

Enlèves les Range

Private Sub Worksheet_Change(ByVal Target As Range)
If [Q3] = 1 Then
Shapes("Essaiforme1").DrawingObject.Text = "Ex_N"
ElseIf [Q3] <> 1 Then
Shapes("Essaiforme1").DrawingObject.Text = "Ex_N_1"
End If
End Sub

Merci Banzai64 pour cette réactivité.

J'ai mal exposé mon problème.

Le "Ex_N" et le "Ex_N_1" sont les noms de deux cellules d'une feuille.

Et bien évidemment..... je désire affecter le contenu de ces cellules dans la forme.

Cordialement.

JFL

Bonjour,

Essaie :

Shapes("Essaiforme1").DrawingObject.Formula = Range("Ex_N").Address

A+

Bonjour,

Si ce sont des noms.. C'est comme l'a dis Banzaï mais sans les guillemets.

A+

Bonjour

JFL a écrit :

Le "Ex_N" et le "Ex_N_1" sont les noms de deux cellules d'une feuille.

Regardes le fichier

lermite a écrit :

Bonjour,

Si ce sont des noms.. C'est comme l'a dis Banzaï mais sans les guillemets.

A+

galopin01 a écrit :

Bonjour,

Essaie :

Shapes("Essaiforme1").DrawingObject.Formula = Range("Ex_N").Address

A+

Merci à vous deux.

Hélas après test, vos propositions ne semblent pas fonctionner.

Banzai64 a écrit :

Bonjour

JFL a écrit :

Le "Ex_N" et le "Ex_N_1" sont les noms de deux cellules d'une feuille.

Regardes le fichier

Votre fichier, avec un code strictement identique au mien, fonctionne............si les cellules nommées figurent dans la même feuille que la forme.

Sinon, et c'est le cas dans mon fichier réel, je suis en erreur.

Mais bon... je sens que la solution est toute proche !

Cordialement.

JFL

Bonjour

Si avec mon fichier cela fonctionne et qu'avec le tien que nenni, pour trouver une solution il faudrait ton fichier

A suivre

Bonjour,

Il ne faut pas utiliser de contrôle image ActiveX issu de l'onglets Développeur.

Pour l'anecdote en ce qui concerne ma formule elle ne concerne que certains contrôle image issus des anciennes versions d'Excel mais ne fontionne pas sur les contrôles Insertion "Formes" . Toutefois on peut l'appliquer au contrôles issus de Insertion "Images"

On retrouve ce type de contrôle et de code en particulier si on utilise l'outil "Appareil Photo" d'Excel.

A+

Banzai64 a écrit :

Bonjour

Si avec mon fichier cela fonctionne et qu'avec le tien que nenni, pour trouver une solution il faudrait ton fichier

A suivre

Je vous reviens après quelques jours d'absence.

Je vous retourne votre fichier avec les cellules Ex_N et Ex_N_1 déplacées en Feuil2.

Hélas.... dans cette configuration... le code VBA ne fonctionne pas.

Cordialement.

JFL

Bonjour,

Mets :

Shapes("Essaiforme1").DrawingObject.Text = Feuil2.Range("Ex_N")

Shapes("Essaiforme1").DrawingObject.Text = Feuil2.Range("Ex_N_1")

Nota :

Attention Feuil2 est le CodeName (dans VBA) de ta Worksheet("Feuil2")

Donc si ta Feuil2 est nommée "blabla" le code ne change pas

de la même manière si cette Feuille2 est déplacée en troisième place, le code est également inchangé

Si tu préfères, tu peux aussi mettre :

Shapes("Essaiforme1").DrawingObject.Text = WorkSheets("blabla").Range("Ex_N")

Shapes("Essaiforme1").DrawingObject.Text = WorkSheets("blabla").Range("Ex_N_1")

A+

Bonjour

Je n'ai pas de solution miracle juste une béquille

En attendant une meilleure solution, que je n'ai pas

Private Sub Worksheet_Change(ByVal Target As Range)
  If [Q3] = 1 Then
    Shapes("Essaiforme1").DrawingObject.Text = Sheets(2).Range("Ex_N")
  ElseIf [Q3] <> 1 Then
    Shapes("Essaiforme1").DrawingObject.Text = Sheets(2).Range("Ex_N_1")
  End If
End Sub
Banzai64 a écrit :

Bonjour

Je n'ai pas de solution miracle juste une béquille

En attendant une meilleure solution, que je n'ai pas

Merci tout de même !

Il semblerait que l'on perde en VBA la "portée" du nom même si ce dernier est accessible depuis l'intégralité du Classeur.

Effectivement..... si une solution existe.... je suis preneur !

Cordialement.

JFL


galopin01 a écrit :

Bonjour,

Mets :

Shapes("Essaiforme1").DrawingObject.Text = Feuil2.Range("Ex_N")

Shapes("Essaiforme1").DrawingObject.Text = Feuil2.Range("Ex_N_1")

Merci !

Et comment faire si le "nom" correspond juste à une formule dans le gestionnaire de noms, c'est à dire qu'il ne fait pas référence à une cellule de destination ?

Cordialement.

JFL

Bonjour,

ça n'a rien à voir avec la portée du nom : Worksheet_Change est une évènementielle d'une Private Module de feuille : A l'intérieur d'un Private Module si tu veux adresser un élément extérieur, il faut préciser expressément à quel Objet tu fais référence.

C'est ça la POO !

A+

galopin01 a écrit :

Bonjour,

ça n'a rien à voir avec la portée du nom : Worksheet_Change est une évènementielle d'une Private Module de feuille : A l'intérieur d'un Private Module si tu veux adresser un élément extérieur, il faut préciser expressément à quel Objet tu fais référence.

C'est ça la POO !

A+

Et visiblement..... le simple "nom" est insuffisant.

D'accord.

Merci pour ces précisions...... Je suis très légèrement moins incompétent maintenant.

Cordialement.

JFL

JFL a écrit :

Et comment faire si le "nom" correspond juste à une formule dans le gestionnaire de noms, c'est à dire qu'il ne fait pas référence à une cellule de destination ?

On mettra :

Shapes("Essaiforme1").DrawingObject.text = ThisWorkbook.Names("Bidon")

Mais dans ce cas tu n'auras que le contenu de ta formule et non pas le résultat de la formule : Il faut rester pratique. Inutile de chercher à faire compliqué quand on peut faire simple !

A+

Bonjour tou(te)s,

A essayer..

Private Sub Worksheet_Change(ByVal Target As Range)
    If [Q3] = 1 Then
        Shapes("Essaiforme1").DrawingObject.Text = [Feuil2!Ex_N]
    Else
        Shapes("Essaiforme1").DrawingObject.Text = [Feuil2!Ex_N_1]
    End If
End Sub

Et tes cellules nommées peuvent êtres le résultat d'une formule.

A+

Rechercher des sujets similaires à "texte forme"