Commentaire de cellule fourni par VB
Résolu
KelvinZer0
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Après moult recherche, sur ce forum et sur le net, je n'arrive pas à débugger mon code. Je vous explique ce que je cherche à faire, et ensuite mon code (défaillant).
J'ai créé un formulaire (UserForm1), dans lequel j'ai 6 TextBox modifiables.
L'utilisateur peut entrer 6 chiffres, qui définiront ensuite le contenu de 6 cellules sur ma feuille principale. Les cellules sont définies en utilisant un bouton du type "Save and Exit", en utilisant la commande "Unload Me". Jusque là, tout baigne ; les cellules sont peuplées par un nouveau contenu défini par l'utilisateur, et la fenêtre se ferme.
Mais voilà, ce que je cherche à faire, c'est que les commentaires d'autres cellules possèdent ces six chiffres, sous la forme (par exemple), de 0-1-2-3-4-5, en commentaires. Voici mon code
Donc, pour commencer, ma variable SZ_comm semble bien fonctionner ; en passant ma souris par dessus, l'infobulle indique "SZ_comm = "0-1-2-3-4-5". Les chiffres des cellules sont là, et la chaîne semble s'être bien concaténé.
Seulement, c'est au moment d'attribuer ce String en tant que commentaire pour la plage de cellules BB7:BB308 qui fait défaut. J'ai essayé toutes les formes qui m'ont été proposées sur bien des forums, mais rien à faire!...
Quelqu'un voit-il ce qui cloche? Et comment pouvons-nous faire pour attribuer un même commentaire à une plage de cellules de façon correcte en VB ?
Merci à vous!
Cordialement,
Kelvin
Après moult recherche, sur ce forum et sur le net, je n'arrive pas à débugger mon code. Je vous explique ce que je cherche à faire, et ensuite mon code (défaillant).
J'ai créé un formulaire (UserForm1), dans lequel j'ai 6 TextBox modifiables.
L'utilisateur peut entrer 6 chiffres, qui définiront ensuite le contenu de 6 cellules sur ma feuille principale. Les cellules sont définies en utilisant un bouton du type "Save and Exit", en utilisant la commande "Unload Me". Jusque là, tout baigne ; les cellules sont peuplées par un nouveau contenu défini par l'utilisateur, et la fenêtre se ferme.
Mais voilà, ce que je cherche à faire, c'est que les commentaires d'autres cellules possèdent ces six chiffres, sous la forme (par exemple), de 0-1-2-3-4-5, en commentaires. Voici mon code
Private Sub Bouton1_Click()
Dim SZ_comm As String
SZ_comm = Range("BR9") & "-" & Range("BR10") & "-" & Range("BR11") & "-" & Range("BR12") & "-" & Range("BR13") & "-" & Range("BR14")
With Range("BB7:BB308")
.DeleteComments
.Comment.Text Text:=SZ_comm
End With
Unload Me
End Sub
Donc, pour commencer, ma variable SZ_comm semble bien fonctionner ; en passant ma souris par dessus, l'infobulle indique "SZ_comm = "0-1-2-3-4-5". Les chiffres des cellules sont là, et la chaîne semble s'être bien concaténé.
Seulement, c'est au moment d'attribuer ce String en tant que commentaire pour la plage de cellules BB7:BB308 qui fait défaut. J'ai essayé toutes les formes qui m'ont été proposées sur bien des forums, mais rien à faire!...
Quelqu'un voit-il ce qui cloche? Et comment pouvons-nous faire pour attribuer un même commentaire à une plage de cellules de façon correcte en VB ?
Merci à vous!
Cordialement,
Kelvin
A voir également:
- Commentaire de cellule fourni par VB
- Commentaire word - Guide
- Excel cellule couleur si condition texte - Guide
- Vb - Télécharger - Langages
- Proteger cellule excel - Guide
- Aller à la ligne dans une cellule excel - Guide
5 réponses
Bonjour,
je ne pense pas que tu puisse travailler sur la plage.
eric
je ne pense pas que tu puisse travailler sur la plage.
Sub test() Dim c As Range For Each c In Range("A2:A5") If c.Comment Is Nothing Then c.AddComment c.Comment.Text Text:="test" c.Comment.Shape.TextFrame.AutoSize = True Next c End Sub
eric
Bonjour,
pour supprimer tes commentaires le code n'est pas
.DeleteComments
mais
.ClearComments
ensuite que veux tu faire avec cette ligne
.Comment.Text Text:=SZ_comm
pour supprimer tes commentaires le code n'est pas
.DeleteComments
mais
.ClearComments
ensuite que veux tu faire avec cette ligne
.Comment.Text Text:=SZ_comm
Re,
Alors prends le code d'Eriiic que je salue et adapte le
Dim c As Range
Dim SZ_comm As String
SZ_comm = Range("BR9") & "-" & Range("BR10") & "-" & Range("BR11") & "-" & Range("BR12") & "-" & Range("BR13") & "-" & Range("BR14")
For Each c In Range("BB7:BB308")
If c.Comment Is Nothing Then c.AddComment
c.Comment.Text Text:=SZ_comm
c.Comment.Shape.TextFrame.AutoSize = True
Next c
Alors prends le code d'Eriiic que je salue et adapte le
Dim c As Range
Dim SZ_comm As String
SZ_comm = Range("BR9") & "-" & Range("BR10") & "-" & Range("BR11") & "-" & Range("BR12") & "-" & Range("BR13") & "-" & Range("BR14")
For Each c In Range("BB7:BB308")
If c.Comment Is Nothing Then c.AddComment
c.Comment.Text Text:=SZ_comm
c.Comment.Shape.TextFrame.AutoSize = True
Next c
Bonjour
peux être comme ça
A+
Maurice
peux être comme ça
With Range("BB7:BB308") .ClearContents .Value = SZ_comm End With
A+
Maurice
Bonjour Maurice,
Celà ne fonctionne pas. Avec ton code, toutes les cellules sont peuplées par SZ_comm, mais pas les commentaires. C'est ce que je cherche à faire : modifier les commentaires des cellules de BB7 jusqu'à BB308, pas le contenu des cellules elles-mêmes.
Merci tout de même pour cette tentative. J'apprécie beaucoup.
Celà ne fonctionne pas. Avec ton code, toutes les cellules sont peuplées par SZ_comm, mais pas les commentaires. C'est ce que je cherche à faire : modifier les commentaires des cellules de BB7 jusqu'à BB308, pas le contenu des cellules elles-mêmes.
Merci tout de même pour cette tentative. J'apprécie beaucoup.
Re Bonjoup
j'ais mal lu HI
test avec cette macro
A+
Maurice
j'ais mal lu HI
test avec cette macro
Sub Bouton() Dim SZ_comm As String SZ_comm = Range("BR9") & "-" & Range("BR10") & "-" & Range("BR11") & "-" & Range("BR12") & "-" & Range("BR13") & "-" & Range("BR14") Range("BB7:BB308").Delete For L = 7 To 308 Range("BB" & L).AddComment SZ_comm Next End Sub
A+
Maurice
Bonjour Mike
oui je vais un peux vite
voila j'ais fini
A+
Maurice
oui je vais un peux vite
voila j'ais fini
Sub Bouton()
Dim SZ_comm As String
SZ_comm = Range("BR9") & "-" & Range("BR10") & "-" & Range("BR11") & "-" & Range("BR12") & "-" & Range("BR13") & "-" & Range("BR14")
For L = 7 To 308
Range("BB" & L).ClearComments
Range("BB" & L).AddComment SZ_comm
Next
End Sub
A+
Maurice
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Donc voici.
Après test (et adaptation du code d'Ériiic), celà fonctonne très bien. Donc voici à nouveau ce même code :
Cependant, celà génère un lag (ralentissement sévère) de l'application lorsque le code est exécuté. J'ai soutiré la ligne contenant le "Shape. TextFrame.Autosize", et le code s'exécute de façon éclair sans aucun lag. Je comprends que cette ligne sert à rendre l'infobulle de la même taille que son contenu, mais c'est si pesant à exécuter qu'on a l'impression que Excel va planter...
Puisque le contenu de cette infobulle devrait être relativement toujours de la même grosseur, existe-t-il un moyen de lui donner une dimension précise sans la confronter à un redimensionnement "auto" ?
Merci à vous tous!
Cordialement,
Kelvin
Après test (et adaptation du code d'Ériiic), celà fonctonne très bien. Donc voici à nouveau ce même code :
Dim SZ_comm As String
Dim c As Range
SZ_comm = Range("BR9") & "-" & Range("BR10") & "-" & Range("BR11") & "-" & Range("BR12") & "-" & Range("BR13") & "-" & Range("BR14")
For Each c In Range("BB7:BB308")
If c.Comment Is Nothing Then c.AddComment
c.Comment.Text Text:=SZ_comm
c.Comment.Shape.TextFrame.AutoSize = True
Next c
Cependant, celà génère un lag (ralentissement sévère) de l'application lorsque le code est exécuté. J'ai soutiré la ligne contenant le "Shape. TextFrame.Autosize", et le code s'exécute de façon éclair sans aucun lag. Je comprends que cette ligne sert à rendre l'infobulle de la même taille que son contenu, mais c'est si pesant à exécuter qu'on a l'impression que Excel va planter...
Puisque le contenu de cette infobulle devrait être relativement toujours de la même grosseur, existe-t-il un moyen de lui donner une dimension précise sans la confronter à un redimensionnement "auto" ?
Merci à vous tous!
Cordialement,
Kelvin
Effectivement !
Le code s'exécute de façon instantané si les valeurs de dimension sont précises, et que la fonction "AutoSize" n'est pas sollicitée. Cette dernière faisant vraiment ralentir l'application au point mort durant 5 à 6 secondes... effrayant!
Je m'approche rapidement d'une réponse entièrement satisfaisante à tous mes besoins présents (et futurs!). Ce que je cherche maintenant à faire pour conclure, vous expliquant textuellement, c'est ceci :
Serait-il possible que le premier commentaire soit "Autosize", mais que par la suite, les commentaires suivants empruntent la nouvelle dimension du premier commentaire? Nous aurions donc affaire à un seul autosize, et le reste des commentaires emprunteraient cette dernière dimension.
Je pense qu'après ça, mon problème serait résolu de façon totale.
Vous ne pouvez pas imaginer ma joie d'avoir des réponses si rapides.
Vous faites ma journée! Merci!
Cordialement,
Kelvin
Le code s'exécute de façon instantané si les valeurs de dimension sont précises, et que la fonction "AutoSize" n'est pas sollicitée. Cette dernière faisant vraiment ralentir l'application au point mort durant 5 à 6 secondes... effrayant!
Je m'approche rapidement d'une réponse entièrement satisfaisante à tous mes besoins présents (et futurs!). Ce que je cherche maintenant à faire pour conclure, vous expliquant textuellement, c'est ceci :
Serait-il possible que le premier commentaire soit "Autosize", mais que par la suite, les commentaires suivants empruntent la nouvelle dimension du premier commentaire? Nous aurions donc affaire à un seul autosize, et le reste des commentaires emprunteraient cette dernière dimension.
Je pense qu'après ça, mon problème serait résolu de façon totale.
Vous ne pouvez pas imaginer ma joie d'avoir des réponses si rapides.
Vous faites ma journée! Merci!
Cordialement,
Kelvin
Alors voilà !
J'ai joué un peu avec le code (et mon peu de connaissance excel) pour en arriver à une formule qui fonctionne tel que je l'ai décrit. J'ai simplement créé 2 variables supplémentaires, contenant les valeur X et Y des dimensions du premier commentaire :
Bien que je trouve le code un peu plus compliqué (peut-être pour rien, si vous voyez, dites!), Excel semble toutefois trouver cette formule plus élégante et l'exécute de façon automatique (au lieu d'un délai critique de 5 à 6 secondes).
Merci à tous pour votre aide! Ériiic, Mike et Maurice !
Vous m'avez grandement aidé aujourd'hui! :-)
À Bientôt!
Cordialement,
Kelvin
J'ai joué un peu avec le code (et mon peu de connaissance excel) pour en arriver à une formule qui fonctionne tel que je l'ai décrit. J'ai simplement créé 2 variables supplémentaires, contenant les valeur X et Y des dimensions du premier commentaire :
Dim SZ_comm As String
Dim c As Range
Dim SZ_x_size As Integer
Dim SZ_y_size As Integer
SZ_comm = Range("BR9") & "-" & Range("BR10") & "-" & Range("BR11") & "-" & Range("BR12") & "-" & Range("BR13") & "-" & Range("BR14")
''Création du premier commentaire :
If Range("BB7").Comment Is Nothing Then Range("BB7").AddComment
Range("BB7").Comment.Text Text:=SZ_comm
Range("BB7").Comment.Shape.TextFrame.AutoSize = True
''Requête des dimensions de ce dernier :
SZ_x_size = Range("BB7").Comment.Shape.Width
SZ_y_size = Range("BB7").Comment.Shape.Height
''Création des autres commentaires
For Each c In Range("BB9:BB308")
If c.Comment Is Nothing Then c.AddComment
c.Comment.Text Text:=SZ_comm
c.Comment.Shape.Width = SZ_x_size
c.Comment.Shape.Height = SZ_y_size
Next c
Bien que je trouve le code un peu plus compliqué (peut-être pour rien, si vous voyez, dites!), Excel semble toutefois trouver cette formule plus élégante et l'exécute de façon automatique (au lieu d'un délai critique de 5 à 6 secondes).
Merci à tous pour votre aide! Ériiic, Mike et Maurice !
Vous m'avez grandement aidé aujourd'hui! :-)
À Bientôt!
Cordialement,
Kelvin
5 lignes de plus ce n'est rien si ça fonctionne comme tu l'entends.
Seul truc que je changerais : As Integer
256 c'est souvent trop court.
Surtout que vba converti tous les entiers en Long... Du coup plutôt que de gagner du temps comme dans un autre langage en fait tu en perds (temps de la conversion) en plus de limiter en taille.
Les inconvénients sans les avantages quoi.
Seul truc que je changerais : As Integer
256 c'est souvent trop court.
Surtout que vba converti tous les entiers en Long... Du coup plutôt que de gagner du temps comme dans un autre langage en fait tu en perds (temps de la conversion) en plus de limiter en taille.
Les inconvénients sans les avantages quoi.
Rebonjour Ériiic,
Je ne comprends pas ce que tu veux dire par : "256 c'est souvent trop court", alors qu'un Integer couvre 16 bits (-32,768 à +32,768).......? Je me trompe ?
Après avoir lu un article, je conclu avec toi qu'utiliser "As Integer" n'est pas une bonne idée. Ce qui est intéressant, c'est que ce n'est pas VBA qui converti l'Integer en Long, mais le CPU ! L'ordinateur se doit de traiter les choses en 32bits minimum, et après calcul, reconverti le résultat en Integer pour VBA, qui lui en circonstance ne traitera pas autre chose.
Donc,.. que devrais-je écrire lorsque je déclare mes variables? Ne rien mettre du tout? tel :
Merci beaucoup de ton aide Ériiic.
Au plaisir!
Kelvin
Je ne comprends pas ce que tu veux dire par : "256 c'est souvent trop court", alors qu'un Integer couvre 16 bits (-32,768 à +32,768).......? Je me trompe ?
Après avoir lu un article, je conclu avec toi qu'utiliser "As Integer" n'est pas une bonne idée. Ce qui est intéressant, c'est que ce n'est pas VBA qui converti l'Integer en Long, mais le CPU ! L'ordinateur se doit de traiter les choses en 32bits minimum, et après calcul, reconverti le résultat en Integer pour VBA, qui lui en circonstance ne traitera pas autre chose.
Donc,.. que devrais-je écrire lorsque je déclare mes variables? Ne rien mettre du tout? tel :
Dim SZ_y_size = 0?
Merci beaucoup de ton aide Ériiic.
Au plaisir!
Kelvin
Je vais essayer celà au plus vite et je te reviens.
Euréka! Le code s'exécute et les commentaires sont changées pour la valeur contenu dans la variable "SZ_comm". Merci !
Seulement, j'aimerais ton commentaire (ou d'autres personnes) sur mes 3 observations suivantes :
1- Si je comprends bien ton code, la fonction "AddComment" crée un objet "comment", car sinon, cet objet n'existe pas? Je croyais que chaque cellules possédaient déjà un commentaire vide, et qu'il s'agissait de le peupler. Donc, il serait inutile d'utiliser ".Comment" si un object de commentaire n'est pas d'abord créé. C'est celà ?
2- Que vient faire la formule "c.Comment.Shape.TextFrame.AutoSize = True" ?
3- Lorsque j'appuis sur mon bouton pour exécuter ma sous-routine, je ressens un puissant LAG, alors qu'en bas à gauche, un descriptif qui dit : "Cellule #cellule commenté par User" s'incrémente graduellement, mais tout à coup gèle complètement l'application aux alentours de BB100, puis débloque pour effectuer le reste. Est-ce que ma deuxième observation serait reliée à ce problème?
Merci à toi!
Cordialement,
Kelvin