bonjour
je souhaiterais bien savoir comment on supprime un textbox ajouté par vba dynamiquement dans un sheet
e l'ajoute comme ceci:
Code:
1
2 Set T = ActiveSheet.OLEObjects.Add(ClassType:="Forms.TextBox.1") T.Name = "TextBox1"
Version imprimable
bonjour
je souhaiterais bien savoir comment on supprime un textbox ajouté par vba dynamiquement dans un sheet
e l'ajoute comme ceci:
Code:
1
2 Set T = ActiveSheet.OLEObjects.Add(ClassType:="Forms.TextBox.1") T.Name = "TextBox1"
Code:ActiveSheet.OLEObjects("TextBox1").Delete
Salut,
au feeling, je partirais sur un
Tu peux feinter ulterieurement avecCode:T.Delete
adapte deCode:
1
2
3
4
5
6
7
8
9
10 Sub OLEObjects3() 'Delete/hide only all CommandButtons from the Control Toolbox Dim obj As OLEObject For Each obj In ActiveSheet.OLEObjects If TypeOf obj.Object Is MSForms.TextBox And obj.Name= "TextBox1" Then obj.Delete ' or obj.Visible = False if you want to hide them End If Next End Sub
https://www.rondebruin.nl/win/s4/win002.htm
merci pour les retours
mais rien de toutes les propositions ne fonctionne
toujours la même erreur 438 propriété non gérée par l'objectCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Function textB(cel) Set T = ActiveSheet.OLEObjects.Add(ClassType:="Forms.TextBox.1") T.Name = "TextBox1" 'reste du code T.Delete 'marche pas 'ActiveSheet.OLEObjects.Controls("TextBox1").Delete 'marche pas 'ActiveSheet.OLEObjects("TextBox1").Delete 'marche pas 'ActiveSheet.Controls("TextBox1").Delete 'marche pas 'OLEObjects3 'marche pas End Function Sub OLEObjects3() 'Delete/hide only all CommandButtons from the Control Toolbox Dim obj As OLEObject For Each obj In ActiveSheet.OLEObjects If TypeOf obj.Object Is MSForms.TextBox And obj.Name = "TextBox1" Then obj.Delete ' or obj.Visible = False if you want to hide them End If Next End Sub
Un ou des messages d'erreur ?
J'ai fait un test avec ton code et le mien, et la textbox se fait bien supprimer...
toujours la même erreur 438 "propriété non gérée par l'object "
bon déjà on avance
en fait quand je fait ceci ca marche pas
mais quand je lance la sub "supprt" depuis VBE elle me supprime bien le textboxCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Function tableau_lignes(cel) Dim T, i Set T = ActiveSheet.OLEObjects.Add(ClassType:="Forms.TextBox.1") T.Name = "toto" T.Text = "blabla" & vbCrLf & " blabla" tableau_lignes = T.Text supprT 'T.Delete End Function Sub supprT() 'ActiveSheet.OLEObjects("toto").Delete 'les deux méthodes fonctionnent quand je lance la sub depuis VBE ActiveSheet.Shapes("toto").Select Selection.Delete End Sub
des idées ?????
Patrick
Sur une feuille, 2 commandbutton: le premier crée le Textbox, le second le supprime sans aucun souci
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Private Sub CommandButton1_Click() Dim T As Object Set T = ActiveSheet.OLEObjects.Add(ClassType:="Forms.TextBox.1") T.Name = "TextBox1" T.Height = 50 With T.Object .MultiLine = True .Text = "blabla" & vbCrLf & "blabla" End With End Sub Private Sub CommandButton2_Click() ActiveSheet.OLEObjects("TextBox1").Delete End Sub
Ce que j'ai eu comme message est que l'execution en mode pas a pas n'est pas possible :aie:
Mais si tu as la bonne solution, c'est tout bon :ccool:
re
ben non j'ai pas la solution puisque je suis obligé de lancer la sub depuis l'éditeur VBE :mouarf: ca m'arrange pas :oops:
reste a savoir pourquoi
Peux tu faire un test avec un bouton sous Excel
sur le clic tu declenches un Application.OnTime de ton code pour voir si ca marche ou toujours pas =]
oui mercatog c'est le ".object" qui ne gère pas tout
je l'ai fait par l'enregistreur de macro
mais a un moment donné dans la macro je travaille avec la propriété linecount du textbox et la je perd l'object T.object et même le oleobject("xxx")tout du moins j'ai l'erreur 438
par contre quand je supprime le travail sur linecount je ne le perd plus et je peux le supprimer
bon ben voila une chose de faite
sur la base de l'exemple de unparia pour un autre exercice
voila un sujet qui est souvent revenu sur le tapis
a savoir determiner et compter le nombre de lignes dans une cellules avec propriété wraptext a true ( ajustée a la ligne automatiquement)
j'ai prévu aussi dans cette fonction le fait que tout les saut de ligne dans la cellule ne puissent pas tous être virtuels
c'est a dire qu'il peut y avoir des sauts de ligne par l'ajustement ET!! des vrais sauts de ligne
merci a tous ;)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Sub testligne() MsgBox Join(lignes([A1]), vbCrLf) End Sub Sub testligne3() MsgBox lignes([A1])(3) 'devrait donner la même ligne que la ligne 4 dans la cellule End Sub Function lignes(cel) Dim T, i# Set T = ActiveSheet.OLEObjects.Add(ClassType:="Forms.TextBox.1", Link:=False, DisplayAsIcon:=False, Left:=1, Top:=1, Width:=cel.Width, Height:=cel.Height) With T .Name = "toto" .Activate .Object.Value = cel.Value .Object.AutoSize = False .Object.MultiLine = True .Object.WordWrap = True .Object.SelectionMargin = False .Object.Font.Size = cel.Font.Size .Object.Font.Name = cel.Font.Name .Object.Font.Bold = cel.Font.Bold .Object.Font.Italic = cel.Font.Italic For i = .Object.LineCount - 1 To 1 Step -1 .Object.CurLine = .Object.LineCount - i .Object.SelText = vbCrLf Next lignes = Split(Replace(.Object.Value, vbCrLf & vbCrLf, vbCrLf), vbCrLf) End With ActiveSheet.OLEObjects("toto").Delete End Function
Bonjour Patrick
A un "détail" près : j'y mentionnais des ajustements de précision. Je n'en vois pas dans ton code.Citation:
sur la base de l'exemple de unparia pour un autre exercice
Il ne te donnera dans ces conditions pas toujours les bons résultats. ;)
Un indice (un parmi d'autres) : les bordures de la cellule n'en modifient pas la hauteur et la largeur, mais "bouffent" du "terrain" :zoubi:
re
oui ainsi que celles du textbox ,ainsi que certain de ces effets aussi .je l'ai remarqué
a améliorer sans doute
Voilà .
Mais de toutes manières : quel serait l'intérêt de ce mécanisme (que je sais mettre en oeuvre de manière précise) ? AUCUN en ce qui concerne l'utilisation d'un tableur ... sauf à développer une usine à gaz qui consisterait (antinomique) à finir par "travailler" sur des "données" différentes mises dans une même cellule !
Ou sinon : sauf à se servir abusivement d'un tableur pour y faire du traitement de texte !
Dans un cas comme dans l'autre : totalement déconseillé, voire assez malsain.
re
je fait beaucoup de excel to html l'enregistrement sous ce format ne restitue jamais surtout les cellules wraptext a true ce qui donne des tableaux html mal conçus voir inintelligible avec les fusion etc....
cette fonction va remplacer mon ancienne qui faisait le même boulot mais usine a gaz
Hé bien -->> si tu y tiens, tu vas devoir te mettre dans l'arithmétique jusqu'au cou --->> je vais te donner d'autres pistes :
- Une cellule utilise une marge gauche imposée par Excel et dont la valeur est dépendante de la police de caractères. Cette marge gauche est différente de celle (pour la même police) imposée par Excel dans la textbox. Et celle imposée dans la textbox n'est pas dépendante de la police de caractères
- Une cellule utilise une marge droite pouvant être très réduite. La marge droite imposée d'une textbox (pour la même police) est au contraire relativement importante et elle n'est pas dépendante de la police de caractères. Elle n'est pas non plus la même que celle de la marge gauche de la textbox.
Courage et bons calculs.
heu ... le label en autosize sa te revient
le label avec le même text donc
le width textbox-le width du label j'ai la différence pour les deux marges
en css la marge gauche de la cellules est de 3 pixels
le reste c'est la marge droite
je fait exactement cela depuis plus de 4 ans et mes tableaux html sont identiques a la source excel sauf bordures qui ne se gèrent de la même façon
en effet le html a 8 bordures pour 2 cellules(TD) tandis qu'Excel en a 7
et quelques petit détails encore étant impossible a reproduire en html sauf par caneva
j'ai fait le test tout a l'heure je l'ai intégré dans ma classe excel to html ca fonctionne
après je ne cherche pas la précision au pixel près mais j'ai de bon résultat
regarde les cellules fusionnée et wraptext elle sont quasi identiques
Pièce jointe 297909