IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

ajuster la taille d'une cellule à son contenu quand on la sélectionne [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut ajuster la taille d'une cellule à son contenu quand on la sélectionne
    Bonjour les développeurs,
    J'ai un tableau avec beaucoup de case, et dans la plage D13: D50, il y'a beaucoup de texte dans chaque cellule, que je compte répartir sur 4-5 lignes avec alt-enter.
    Pour éviter d'élargir ma colonne D (et ainsi de pousser les autres hors de l'écran) j'aimerai ajuster la hauteur de la ligne, à partir du moment où je sélectionne une cellule de ma plage D13: D50.
    Si je sélectionne D15, la ligne 15 s'ajuste en hauteur au contenu de la cellule D15.
    Et quand je quitte D15 pour une autre cellule, la ligne 15 retrouve sa hauteur d'origine, à savoir 1 ligne de texte.

    J'ai trouvé le code suivant, à intégrer dans le code de ma feuille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column >= 1 And Target.Column <= 7 And Target.Row >= 3 And Target.Row <= 30 Then
    Columns("A:G").ColumnWidth = 5
    Me.Columns(Target.Column).EntireColumn.AutoFit
    End If
    End Sub
    C'est un début, je pense avoir compris comment gère la plage active, mais ça gère la largeur de la colonne (pas la hauteur de ligne) et quand je quitte la cellule, elle ne retrouve pas ça taille d'origine.

    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est un début, je pense avoir compris comment gère la plage active, mais ça gère la largeur de la colonne (pas la hauteur de ligne) et quand je quitte la cellule, elle ne retrouve pas ça taille d'origine.
    Tout objet a des propriétés. La hauteur, la largeur, la couleur, etc. d'une cellule sont des propriétés de l'objet Range et c'est également vrai pour les colonnes et pour les lignes.
    Pour que la hauteur d'une ou plusieurs lignes reprenne sa hauteur d'origine il y a lieu de la stocker avant de modifier sa valeur

    Exemple sur la modification de la hauteur d'une ligne en restituant sa hauteur d'origine après avoir cliqué sur le MsgBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t1()
      Dim HeightBefore As Double
      HeightBefore = Rows(10).RowHeight
      Rows(10).RowHeight = 30
      ' Traitement
      MsgBox "Ok "
      Rows(10).RowHeight = HeightBefore
    End Sub
    Si l'on peut modifier la valeur des propriétés de plusieurs objets en un instruction en revanche il est impossible de les lire en une instruction.
    donc soit on accepte de considérer que la hauteur d'une ligne est valable pour l'ensemble de celles que l'on traite comme dans l'exemple ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t2()
      Dim HeightBefore As Double
      HeightBefore = Rows(10).RowHeight
      Rows("10:15").RowHeight = 30
      ' Traitement
      MsgBox "Ok "
      Rows("10:15").RowHeight = HeightBefore
    End Sub
    soit il faut le faire ligne par ligne, comme le montre l'exemple ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub t3()
      Dim HeightBefore(6) As Double
      Dim r As Long
      For r = 10 To 15
        HeightBefore(r - 10) = Rows(r).RowHeight
      Next
      Rows("10:15").RowHeight = 30
      ' Traitement
      MsgBox "Ok "
      '
      For r = 10 To 15
        Rows(r).RowHeight = HeightBefore(r - 10)
      Next
    End Sub
    Ces exemples sont évidemment très simples et doivent être adaptés en fonction de vos besoins en n'oubliant pas la parentalité totale des objets Range, Row, etc. à savoir les objets Worksheet et Workbook
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    Bonjour Philippe,
    Merci pour ce retour.
    Après plusieurs aller-retour forum-essais-erreurs etc...j'arrive finalement sur ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    If Target.Column = 4 And Target.Row >= 13 And Target.Row <= 50 Then
    Target.EntireRow.AutoFit
    Else: Rows("13:50").RowHeight = 17
    End If
     
    End Sub
    Assez éloigné de ta propo (puisqu'au final une hauteur générale de 17 me suffit), mais qui me convient quasiment.
    Quand je clique sur une cellule entre D13 et D50, toute la ligne est ajustée en hauteur. Si je clique ailleurs, toutes les lignes entre 13 et 50 passe à 17 de haut.
    Le petit détail qui me manque : j'aimerai que la ligne "autofitée" revienne à 17 dès que je clique ailleurs. En fait, dès qu'elle n'est plus sélectionnée.
    Je pressent que ce détail peut changer beaucoup de chose dans ma macro...
    une idée?
    Merci

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    D'après le programme, la méthode AutoFit ne s'active que sur la ligne de la cellule sélection à condition que ce soit la colonne 4 et que les lignes soient comprises entre 13 et 50.
    Dans le cas contraire, autrement dit si l'on sélectionne n'importe quelle autre cellule, les lignes 13 à 50 auront une hauteur de 17

    Il y a donc lieu de revoir la structure décisionnelle et comme je ne sais pas ce que vous voulez exactement, je ne sais pas vous aider.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    Expliqué plus précisément :
    -quand je sélectionne une cellule entre D13 et D50, disons D20, la hauteur de la ligne 20 s'ajuste automatiquement :ok
    -si je sélectionne hors de la plage, la ligne 20 repasse à 17 : ok

    Mais :
    -si après avoir sélectionné D13, je me place en D14, la ligne 14 est ajustée, mais la ligne 13 reste ajustée. C'est ça qui me gêne. J'aimerai que quand je sélectionne D14, la ligne 13 repasse à 17. De manière à ne pas avoir plusieurs lignes ajustées en même temps.

    Y'a t'il une solution?
    Merci

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    -si après avoir sélectionné D13, je me place en D14, la ligne 14 est ajustée, mais la ligne 13 reste ajustée. C'est ça qui me gêne. J'aimerai que quand je sélectionne D14, la ligne 13 repasse à 17. De manière à ne pas avoir plusieurs lignes ajustées en même temps.
    Oui, cela je l'ai compris et c'est d'ailleurs ce que j'ai écrit "D'après le programme, la méthode AutoFit ne s'active que sur la ligne de la cellule sélection à condition que ce soit la colonne 4 et que les lignes soient comprises entre 13 et 50."
    et pourquoi ? parce-que en ligne 4 on indique que la méthode AutoFit s'applique sur la ligne entière de l'objet Target (Target étant la ou les cellules sélectionnées)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Target.EntireRow.AutoFit
    Y'a t'il une solution?
    Evidemment

    Une solution serait de placer en première ligne de la procédure événementielle l'AutoFit dès qu'il y a sélection des lignes 13 à 50 et ensuite mettre la structure décisionnelle (If...Then...Else) en testant si c'est l'une des lignes 13 à 50 et uniquement sur une colonne précise que la sélection a eu lieu

    Exemple à adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      With Target
        If .Row >= 13 And .Row <= 50 Then
           Rows("13:50").AutoFit
           If .Column = 4 Then Rows("13:50").RowHeight = 17
        End If
      End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    Merci à vous, bonne fin de journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajuster une Picturebox à son contenu
    Par Herve_be dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2019, 17h21
  2. recopier le contenu d une cellule son tottal est superieur a 4
    Par ymanot dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/11/2017, 13h02
  3. ajuster une iframe à son contenu
    Par owenho dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 10/09/2013, 13h46
  4. Réponses: 4
    Dernier message: 04/06/2009, 01h34
  5. Ajustement automatique de la taille d'une cellule
    Par milach dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/03/2008, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo