Forcer la hauteur de ligne (private sub)

BOnjour,

Quelqu'un pourrait-il me donner un coup de main avec cette macro que j'ai déposé dans This workbook.

Je tente de forcer le renvoi automatique qui fonctionne très bien habituellement mais comme j'ai déterminé la hauteur des lignes des lignes 1 à 20 à une hauteur de 30, elles restent figées à 30 et ne tient pas compte de l'ajout de texte dans la colonne G.

Donc je voudrais que mes lignes aient toujours 30 minimum de haut sauf si on ajoute du texte et qu'elle s'ajuste automatiquement au texte ajouté.

Je joint le fichier au cas où.

Merci à l'avance à tous.

Private Sub Worksheet_Activate()

On Error Resume Next

For Each cel In Range("G1:G50")

If cel <> "" Then

.Rows.AutoFit

End If

Next

End Sub

Bonjour,

Le classeur a ses propres procédures évènementielles et ce n'est pas en collant dans son module la procédure "Activate" d'une feuille que ça va fonctionner. Pour y avoir accès, tu choisi Workbook dans le ComboBox de gauche et dans celui de droite tu auras la liste des procédures évènementielles qui lui sont propre. Tu n'est pas non plus obliger de boucler, ça peut se faire en une seule fois :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    If Sh.Name = "Feuil1" Then

        Range("G1:G50").Rows.AutoFit
        'ou encore :
        'Range("G1:G50").EntireRow.AutoFit

    End If

End Sub

Bonjour Theze,

Merci pour la réponse rapide,

Suite à tes suggestions,

J'ai ajusté la macro puisque j'avais besoin qu'elle se déclenche avec l'insertion de nouveau texte... et ça fonctionne à merveille MERCI BEAUCOUP.

Cependant j'aurais besoin d'un autre petit coup demain pour forcer la hauteur des lignes à un minimum de 30

Ce que je tente ne fonctionne pas.

Private Sub Worksheet_Change(ByVal Target As Range)

Range("G1:G50").Rows.AutoFit

' je voudrais ajouter la notion de hauteur minimum de 30

'après le Rows.Autofit

' With Range("G1:G50")

' if .RowHeight < 30

' then . RowHeight = 30

End Sub

Bonjour,

Comme ceci :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    Dim Cel As Range

    Application.ScreenUpdating = False

    Range("G1:G50").Rows.AutoFit

    'ici de A1 à A100
    For Each Cel In Range("A1:A100")

        If Cel.RowHeight < 30 Then Cel.RowHeight = 30

    Next Cel

    Application.ScreenUpdating = True

End Sub

Merci Encore pour la justesse et la précision,

ça fonctionne parfaitement.

Je me demandais,

Est-ce possible de faire en sorte qu'aussitôt que je fais un ajout de texte la macro ajuste le tout sans que je sois obligé de changer d'onglet et de revenir à mon onglet pour activer la macro???

Ou tout simplement impossible?

Bonjour spage, (theze)

Pour rendre automatique "ta dernière question" tu devrais utiliser SelectionChange au lieu de Activate et de plus tu devrais à mon avis placer ta procédure sur la feuille et non sur le classeur !

Worksheets_SelectionChange et non Workbook_SelectionChange

Parce que si tu laisses l'évènement dans Workbook Excel va le faire sur toutes les feuilles (à chaque changement de cellules) et cela peut vite devenir long, si tu as beaucoup de lignes, de colonnes, de feuilles.

Pour opérer sur plusieurs feuilles tu peux copier le code Worksheet_SelectionChange sur chaque feuille concerné par "l'autofit"

Bonsoir,

C'est encore plus simple !

Si toutes les feuilles sont concernées, à mettre dans le module du classeur :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    Target.Rows.AutoFit
    If Target.RowHeight < 30 Then Target.RowHeight = 30

End Sub

si c'est une feuille en particulier, à mettre dans son module :

Private Sub Worksheet_Change(ByVal Target As Range)

    Target.Rows.AutoFit
    If Target.RowHeight < 30 Then Target.RowHeight = 30

End Sub

ah!

C'est encore mieux

MErci encore et vive la simplicité.

Merci à tous ceux qui prennent le temps de nous accompagner lors de nos pelligrinations excelliennes.

Bonne soirée

Rechercher des sujets similaires à "forcer hauteur ligne private sub"