VBA – Inscription dans une cellule de l’adresse de la dernière cellule couverte
Résolu
DanGg
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J’ai, dans une feuille excel, un TextBox (zone de texte) destinée à recevoir de longs textes. J’ai pour cela réglé cette TextBox dans FORMAT DE FORME, en choisissant ‘’Zone de texte’’ et j’ai coché ‘’Ajuster la forme au texte’’. La forme s’allonge ou diminue suivant longueur du texte. Sa largeur est fixe et la première cellule de la feuille couverte par la TextBox est fixe.
En vue d’impression par VBA, j’ai besoin de déterminer l’adresse de la dernière cellule couverte par cette TextBox, d’où je déduirai le nombre de pages à imprimer.
J’ai appris comment déterminer cette adresse et comment me la retourner par un MsgBox, mais je ne trouve pas comment inscrire cette adresse dans une cellule de la feuille, d’où je pourrai la retrouver pour calculer le nombre de pages.
La macro que j’utilise pour un retour de l’information depuis une MsgBox est celle-ci :
Fichier exemple joint : https://mon-partage.fr/f/eN2pN0Uo/
Pouvez-vous m’aider ? Le sujet parait peu débattu. merci.
J’ai, dans une feuille excel, un TextBox (zone de texte) destinée à recevoir de longs textes. J’ai pour cela réglé cette TextBox dans FORMAT DE FORME, en choisissant ‘’Zone de texte’’ et j’ai coché ‘’Ajuster la forme au texte’’. La forme s’allonge ou diminue suivant longueur du texte. Sa largeur est fixe et la première cellule de la feuille couverte par la TextBox est fixe.
En vue d’impression par VBA, j’ai besoin de déterminer l’adresse de la dernière cellule couverte par cette TextBox, d’où je déduirai le nombre de pages à imprimer.
J’ai appris comment déterminer cette adresse et comment me la retourner par un MsgBox, mais je ne trouve pas comment inscrire cette adresse dans une cellule de la feuille, d’où je pourrai la retrouver pour calculer le nombre de pages.
La macro que j’utilise pour un retour de l’information depuis une MsgBox est celle-ci :
Sub AdresseCelluledeFinTextBox() ' Activation de la TextBox2 ActiveSheet.Shapes.Range(Array("TextBox 2")).Select For Each Target In Selection.ShapeRange MsgBox ActiveSheet.Shapes(Target.Name).BottomRightCell.Address Next ' Mettre le résultat dans la cellule K1 de la feuille (cette formule ne fonctionne pas, ce qui précède fonctionne) Range("K1").Value = ActiveSheet.Shapes(Target.Name).BottomRightCell.Address End Sub
Fichier exemple joint : https://mon-partage.fr/f/eN2pN0Uo/
Pouvez-vous m’aider ? Le sujet parait peu débattu. merci.
Configuration: Windows / Edge 88.0.705.53
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- VBA – Inscription dans une cellule de l’adresse de la dernière cellule couverte
- Aller à la ligne dans une cellule excel - Guide
- Darkino nouvelle adresse - Guide
- Excel cellule couleur si condition texte - Guide
- Proteger cellule excel - Guide
- Excel compter cellule couleur sans vba - Guide
4 réponses
Bonjour,
Avec VBA, il faut absolument éviter d'utiliser .Select (et donc Selection) et plus généralement éviter tous les objets actifs.
C'est la première source d'erreurs de code.
A mon avis, il est inutile d'écrire les résultats dans des cellules, il faut gérer au niveau de la macro.
Avec VBA, il faut absolument éviter d'utiliser .Select (et donc Selection) et plus généralement éviter tous les objets actifs.
C'est la première source d'erreurs de code.
Option Explicit Sub AdresseZoneDeTexte() Dim shp As Shape Dim rng As Range With Worksheets("feuill1") Set shp = .Shapes("ZoneTexte 2") .Range("J1").Value = shp.TopLeftCell.Address(False, False) .Range("J2").Value = shp.BottomRightCell.Address(False, False) ' Ou plutôt : Set rng = .Range(shp.TopLeftCell, shp.BottomRightCell) .Range("J3").Value = rng.Address(False, False) End With End Sub
A mon avis, il est inutile d'écrire les résultats dans des cellules, il faut gérer au niveau de la macro.
La première partie de la macro proposée résout totalement mon souci.
Merci.
La seconde partie optionnelle (venant à la place de la précédente à partir de 'Set') ne fonctionne pas chez moi. Pour info
Mais merci !
vous avez raison par ailleurs ; je vais gérer le reste à partir de la macro.
Merci.
La seconde partie optionnelle (venant à la place de la précédente à partir de 'Set') ne fonctionne pas chez moi. Pour info
Mais merci !
vous avez raison par ailleurs ; je vais gérer le reste à partir de la macro.
Correction : la totalité de votre macro fonctionne parfaitement si l'on met ensemble les deux parties, remplacement le "Et plutôt" indicatif par "Et en sus", pour donner l'adresse de la plage, comme vous l'avez fait.
il n'y avait pas lieu, semble t-il, à séparer les deux parties.
il n'y avait pas lieu, semble t-il, à séparer les deux parties.
Ok, Merci Parfait et résolu
(je ne sais comment on l'inscrit. Acceptez-vous de le faire pour moi : c'est résolu. Merci
Pourquoi excel ? parce que le classeur réel est bien plus complexe que ce que montre cette feuille. Celle-ci n'est qu'un accessoire à nos fichiers et présente l'avantage, puisque inclue parmi les autres feuilles de calcul, de faire l'objet d'une impression groupée avec numérotation de pages cohérente pour l'ensemble. Au surplus, cette feuille sera peu couramment utilisée, alors que les autres le seront.
Merci de votre aide !
(je ne sais comment on l'inscrit. Acceptez-vous de le faire pour moi : c'est résolu. Merci
Pourquoi excel ? parce que le classeur réel est bien plus complexe que ce que montre cette feuille. Celle-ci n'est qu'un accessoire à nos fichiers et présente l'avantage, puisque inclue parmi les autres feuilles de calcul, de faire l'objet d'une impression groupée avec numérotation de pages cohérente pour l'ensemble. Au surplus, cette feuille sera peu couramment utilisée, alors que les autres le seront.
Merci de votre aide !