Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Mettre un shape dans une cellule avec condition

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

libellule85

XLDnaute Accro
Bonjour le forum,

J'aimerais quand j'écris par exemple AM dans une cellule qu'un shape ou une forme vienne se mettre dans la cellule qui a été renseignée de cette façon. Et si on supprime AM le shape ou la forme disparaisse de la cellule.
Je pense que le vba est la meilleure solution !
D'avance merci beaucoup pour votre aide.
 

Pièces jointes

Bonjour libellule85,

Juste 2 questions à 100 sous :

- faut-il autant de Shapes qu'il y a de cellules "AM" ou une seule qu'on déplace sur la dernière entrée ?

- comment voulez-vous faire pour effacer "AM" une fois que la Shape la recouvre ?

A+
 
Bonsour® Pourquoi faire une usine à gaz ...
utiliser les MEFC
 

Pièces jointes

Re, salut Pierre, Modeste geedee,

Pas encore regardé ton code Pierre.

Voyez le fichier joint et ce code dans la 1ère feuille :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False
For Each r In r 'si entrées multiples
  If LCase(r) = "am" Then
    Feuil2.Shapes(1).Copy 'CodeName de la feuille source
    Me.Paste
    With Selection
      .Left = r.Left
      .Top = r.Top
      .Name = r.Address
    End With
  End If
Next
ActiveCell.Activate
End Sub

Sub Effacer()
On Error Resume Next
Range(Application.Caller) = ""
Shapes(Application.Caller).Delete
End Sub
A+
 

Pièces jointes

Bonsour®
Voyez le fichier joint et ce code dans la 1ère feuille :
pour continuer dans ce sens 🙄

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False
For Each r In r 'si entrées multiples
  If LCase(r) = "am" Then
    Feuil2.Shapes(1).Copy 'CodeName de la feuille source
    Me.Paste
    With Selection
      .Left = r.Left
      .Top = r.Top
      .Name = r.Address
    End With
  End If
  If LCase(r) = "pm" Then
    Feuil2.Shapes(2).Copy 'CodeName de la feuille source
    Me.Paste
    With Selection
      .Left = r.Left
      .Top = r.Top
      .Name = r.Address
    End With
  End If
  If LCase(r) = "nuit" Then
    Feuil2.Shapes(3).Copy 'CodeName de la feuille source
    Me.Paste
    With Selection
      .Left = r.Left
      .Top = r.Top
      .Name = r.Address
    End With
  End If
  If LCase(r) = "jour" Then
    Feuil2.Shapes(4).Copy 'CodeName de la feuille source
    Me.Paste
    With Selection
      .Left = r.Left
      .Top = r.Top
      .Name = r.Address
    End With
  End If
Next
ActiveCell.Activate
End Sub
 
Bonsoir pierrejean, Modes Geedee, Bisson Nicole, Re job75,

Je suis sur une autre planète, avec toutes vos super réponses ! Je voulais tous vous adresser un grand grand merci d'avoir pris du temps pour moi.
Je vais regarder de plus près toutes vos réponses et je reviens vers vous.
 
Bonsoir le forum,
Je reviens vers vous et plus particulièrement vers job75 et sa solution en post #7 : par contre peut-on mettre un choix dans la même macro ? Si on tape AM c'est le triangle 1 et si on tape PM c'est le triangle 2 qui s'affiche, est ce possible ?
D'avance merci pour votre aide.

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False
For Each r In r 'si entrées multiples
  If LCase(r) = "am" Then
    Feuil2.Shapes(1).Copy 'CodeName de la feuille source
    Me.Paste
    With Selection
      .Left = r.Left
      .Top = r.Top
      .Name = r.Address
    End With
  End If
Next
ActiveCell.Activate
End Sub

Sub Effacer()
On Error Resume Next
Range(Application.Caller) = ""
Shapes(Application.Caller).Delete
End Sub
 
Bonsoir libellule85, bonsoir les autres,

Nommez AM et PM les formes sources et modifiez 2 lignes de la macro :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False
For Each r In r 'si entrées multiples
  If LCase(r) = "am" Or LCase(r) = "pm" Then
    Feuil2.Shapes(r).Copy 'CodeName de la feuille source
    Me.Paste
    With Selection
      .Left = r.Left
      .Top = r.Top
      .Name = r.Address
    End With
  End If
Next
ActiveCell.Activate
End Sub
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
280
W
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…