VBA – Inscription dans une cellule de l’adresse de la dernière cellule couverte

Résolu/Fermé
DanGg - Modifié le 30 janv. 2021 à 13:28
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 30 janv. 2021 à 18:31
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 :

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:

4 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
30 janv. 2021 à 13:21
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.

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.
0
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.
0
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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 30 janv. 2021 à 16:46
C'est les lignes 8,9, 10 (et 12) qui sont inutiles, ensuite il faut gérer le rng

Pourquoi utilises-tu Excel, Word me semble plus approprié ?
0
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 !
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
30 janv. 2021 à 18:31
Excel est spécialisé dans le calcul mais pour une mise en page destinée à l'impression c'est très loin d'être aussi performant que Word.
J'aurais fait l'inverse, en incluant des feuilles Excel dans un document Word.
0