lier une textbox à une plage de cellules

CMoa

XLDnaute Occasionnel
Bonjour le forum
Est-il possible de lier une textbox à une plage de cellules et que dans la propriété linkedcell la valeur de la cellule liée se modifie en fonction du déplacement de la textbox?
Merci à tous ceux qui prendront un peu de leur temps à essayer de répondre.
 

job75

XLDnaute Barbatruc
Re : lier une textbox à une plage de cellules

Bonjour CMoa,

Cette macro dans le fichier joint :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
TextBox1.Visible = False
If Intersect(ActiveCell, [C5:F27]) Is Nothing Then Exit Sub
With TextBox1
  .Top = ActiveCell.Top
  .Left = ActiveCell.Offset(, 1).Left
  .LinkedCell = ActiveCell.Address
  .Visible = True
End With
End Sub
A+
 

Pièces jointes

  • TextBox(1).xls
    29 KB · Affichages: 45
  • TextBox(1).xls
    29 KB · Affichages: 47
  • TextBox(1).xls
    29 KB · Affichages: 49

CMoa

XLDnaute Occasionnel
Re : lier une textbox à une plage de cellules

Merci job75
je joint un fichier pour plus amples explications.
Je ne sais pas si ce que je demande est réalisable ou pas.
 

Pièces jointes

  • textbox_liées_à_cellules - XLD.xlsm
    12.8 KB · Affichages: 35

CMoa

XLDnaute Occasionnel
Re : lier une textbox à une plage de cellules

Re,
si je place la textbox (...)
=> ceci est pour dire que si je déplace la textbox dans la plage;la valeur de la textbox s'affiche dans la cellules de la plage sous la textbox.
Effectivement le déplacement n'est possible qu'en mode création.J'ai omis ce petit détail!!!.
Existe-il un autre moyen d'arriver à ce résultat?Labels ou autres?
 

job75

XLDnaute Barbatruc
Re : lier une textbox à une plage de cellules

Re,

Fichier (2) avec cette nouvelle macro :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim P As Range, o As OLEObject, x$, nom$
Set P = [F2:I6,H7:I9,F10:I11]
If Intersect(Target, P) Is Nothing Then Exit Sub
Cancel = True
'---au cas où les propriétés LinkedCell ne seraient pas renseignées---
For Each o In OLEObjects
  If TypeName(o.Object) = "TextBox" Then _
    If Not Intersect(o.TopLeftCell, P) Is Nothing Then _
      o.LinkedCell = o.TopLeftCell.Address
Next
'---Déplacement---
1 x = UCase(InputBox("Nom ou numéro de la TextBox à déplacer :", , x))
If x = "" Then Exit Sub
For Each o In OLEObjects
  nom = o.Name
  If nom = x Or nom = "T" & x Then
    o.LinkedCell = "": o.TopLeftCell = ""
    Target = o.Object.Value: o.LinkedCell = Target.Address
    o.Top = Target.Top + 5
    o.Left = Target.Left + 5
    x = Replace(nom, "T", "") 'numéro
    OLEObjects("Label" & x).Top = o.Top
    OLEObjects("Label" & x).Left = o.Left + o.Width
    Exit Sub
  End If
Next
GoTo 1
End Sub
Les TextBoxes sont renommées T1 T2 T3... Et les numéros des Labels associés sont les mêmes.

Bonne soirée.
 

Pièces jointes

  • TextBox(2).xls
    57.5 KB · Affichages: 45
Dernière édition:

CMoa

XLDnaute Occasionnel
Re : lier une textbox à une plage de cellules

Bonjour job75;le forum
merci pour l'amélioration est-il possible de garder la valeur des textbox qoi qu'il arrive?
j'explique:
Si je met les 3 textbox dans la même cellule;2 des 3 gardent leur valeur.J'aimerais que cette valeur ne soit pas modifiée.
Si cela est possible bien sûr.
 

CMoa

XLDnaute Occasionnel
Re : lier une textbox à une plage de cellules

Si j'ai bien compris il suffisait de supprimer ces 3 parties du code.

Code:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim P As Range, o As OLEObject, x$, nom$
Set P = [F2:I6,H7:I9,F10:I11]
If Intersect(Target, P) Is Nothing Then Exit Sub
Cancel = True
'---au cas où les propriétés LinkedCell ne seraient pas renseignées---
For Each o In OLEObjects
  'If TypeName(o.Object) = "TextBox" Then _
    If Not Intersect(o.TopLeftCell, P) Is Nothing Then _ ' <=Partie du code supprimée
      o.LinkedCell = o.TopLeftCell.Address
Next
'---Déplacement---
1 x = UCase(InputBox("Nom ou numéro de la TextBox à déplacer :", , x))
If x = "" Then Exit Sub
For Each o In OLEObjects
  nom = o.Name
  If nom = x Or nom = "T" & x Then
   ' o.LinkedCell = "":  o.TopLeftCell = ""  '<=Partie du code supprimée
    Target = o.Object.Value:
    'o.LinkedCell = Target.Address      ' <=Partie du code supprimée
    o.Top = Target.Top + 5
    o.Left = Target.Left + 5
    x = Replace(nom, "T", "")  'numéro
    OLEObjects("Label" & x).Top = o.Top
    OLEObjects("Label" & x).Left = o.Left + o.Width
    Exit Sub
  End If
Next
GoTo 1
End Sub
 
Dernière édition:

CMoa

XLDnaute Occasionnel
Re : lier une textbox à une plage de cellules

Merci Titiak pour cette proposition qui a aussi son inconvénient:
afin de déplacer la textbox il faut faire un clic droit dessus puis un clic gauche afin de reporter le résultat dans la cellule sinon:
passer par une boucle sur tous les textbox afin de les activer du style for each textbox&i....ou individuellement.
j'aurais aimé déplacer l'objet directement.
 

Discussions similaires

Statistiques des forums

Discussions
312 555
Messages
2 089 555
Membres
104 210
dernier inscrit
mjub