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 automatiquement la hauteur de ligne sur une zone de taille variable [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    janvier 2020
    Messages
    47
    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 : 47
    Points : 42
    Points
    42
    Par défaut ajuster automatiquement la hauteur de ligne sur une zone de taille variable
    Bonjour,
    Grace au forum, j'ai pu créer la macro ci dessous dans le code d'un onglet

    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 Or Target.Column = 7) And Target.Row >= 13 And Target.Row <= 45 Then
    Target.EntireRow.AutoFit
    Else: Rows("13:45").RowHeight = 14
    End If
     
    End Sub
    Quand je sélectionne une cellule dans une zone comprise entre la ligne 13 et 45 et dans les colonnes 4 ou 7, la cellule ajuste sa hauteur au contenu. Sélection hors de cette zone = retour à une hauteur de 14 pour toutes les lignes 13 à 45.
    ça marche impec, mais, ma zone est amenée à variée au grès des insertion/suppression de lignes.
    La limite haute (ligne 13) restera fixe, mais je voudrais que la limite basse puisse varier.
    J'imagine donc remplacer le 45 par une variable.
    J'ai essayé d'intégrer en début de sub une boucle while qui test la valeur des cellules en colonne A, en descendant, jusqu'à tomber sur la valeur "fin". J'en tire alors le N° de ligne correspondant à la fin de ma zone et set la variable.
    Marche pas, puisque dès que je sélectionne une cellule je boucle dans ma macro.

    Quelqu'un aurait'il "LA" solution ?
    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Developpeur VBA, C# et VB.Net =]
    Inscrit en
    juillet 2007
    Messages
    13 828
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Developpeur VBA, C# et VB.Net =]
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2007
    Messages : 13 828
    Points : 31 633
    Points
    31 633
    Par défaut
    Salut,

    ton 45 est-il le nombre de lignes utilisées ?

    Tu peux stocker la valeur dans une variable, et à partir de la adapter ton code comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim TaVariable as integer
    'TaVariable=ceque tuveux donner
    If (Target.Column = 4 Or Target.Column = 7) And Target.Row >= 13 And Target.Row <= TaVariable Then
    Target.EntireRow.AutoFit
    Else: Rows("13:" & TaVariable).RowHeight = 14
    End If
     
    End Sub
    Cycle de vie d'un bon programme :
    1/ ca fonctionne 2/ ca s'optimise 3/ ca se refactorise

    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016 et Access 2019

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    janvier 2020
    Messages
    47
    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 : 47
    Points : 42
    Points
    42
    Par défaut
    Bonjour jean-Philippe,
    Merci pour ton retour.
    Ce que je souhaite c'est appliquer l’ajustement auto de la hauteur de ligne dans la zone entre ligne 13 et la ligne où se trouve "fin" en colonne A.
    Au début, "fin" est en A45, mais au fur et à mesure de l'utilisation du fichier, je vais ajouter/supprimer des lignes entre 13 et 45 et "fin" ne sera plus forcement en 45.
    Il faut donc que je définisse la ligne basse de la zone par une variable. Ce que tu me propose d'ailleurs.

    Mon pb : comment, où et quand créer cette variable?
    J'ai penser à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    private sub worksheet_selection (insertion ou suppression de ligne)
    Range("a15").Select
        While ActiveCell.Value <> "fin"
        Selection.Offset(1, 0).Activate
        Wend
        Dim lignem As Integer
        lignem = ActiveCell.Row
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If (Target.Column = 4 Or Target.Column = 7) And Target.Row >= 13 And Target.Row <= lignem Then
    Target.EntireRow.AutoFit
    Else: Rows("13:" & lignem).RowHeight = 14
    End If
    End Sub
    pas testé, car la syntaxe de la 1ère ligne n'est pas bonne. L'idée est de redéfinir la variable à chaque fois qu'on insert/supprime une ligne dans la feuille Selection.
    Pense tu que ça pourrait marché ? Avec 2 sub à la suite? Quelle serait la syntaxe pour la 1ère ligne?

    Merci d'avance
    Benoit

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    janvier 2020
    Messages
    47
    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 : 47
    Points : 42
    Points
    42
    Par défaut
    Bonjour,
    J'ai reçu un email jeudi m'informant d'une réponse de Philippe Tulliez sur ce sujet, mais en suivnat le lien, impossible de voir le message.
    Néanmoins, avec les 1ères lignes de réponse,visibles dans le mail, j'ai pu cherché du côté de la fonction find... et trouver une solution.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    Dim fin As Range
    Set fin = Sheets("selection").Range("A15:A50").Cells.Find(what:="fin")
    'MsgBox (fin.row)
    If (Target.Column = 4 Or Target.Column = 7) And Target.Row >= 13 And Target.Row <= fin.Row Then
    Target.EntireRow.AutoFit
    Else: Rows("13:" & fin.Row).RowHeight = 15
    End If
     
    End Sub
    set et find me renvoient l'adresse de la cellule où se trouve le mot "fin". J'utilise ensuite fin.row (le N° de ligne) comme une variable pour limiter la zone d'action du autofit.

    Merci à tous et bonne semaine

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

Discussions similaires

  1. [XL-2013] Ajustement de la hauteur de ligne sur une zone sélectionnée
    Par vonfelt dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/02/2015, 18h04
  2. Positionner un div sur une image de taille variable
    Par LaDentDeLait dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 27/04/2014, 01h34
  3. [XL-2007] Ajuster automatiquement la hauteur des lignes
    Par apdf1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/08/2013, 18h01
  4. Ajuster automatiquement la hauteur de ligne d'une cellule fusionné
    Par xvrpetit dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/08/2013, 09h29
  5. Inserer une ligne sur une zone verrouillée
    Par kahelie dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/02/2013, 10h32

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