Largeur colonne

Résolu
Bonjour,

Je cherche le code pour mettre une colonne en forme par rapport à son plus grand contenu, mais je veux commencer à la ligne A18 et finir à la dernière de mon tableau, qui varie suivant les données récupérées.

Merci pour votre aide.

10 réponses

  1. Bonjour à tous,

    Bon je pense que j'ai réussi à mettre le code qui correspond à ma mise en page, je vous remercie tous pour voter aide, et désolé de ne pas répondre et remercier en temps réel les personnes qui m'aident ( tout particulièrement Via55, Pingou, et Eriiic ), mais je prends beaucoup de temps pour comprendre et mettre en pratique vos données, qui pour moi représente des nuits sans sommeil, mais je crois que je devient accro à l'informatique.
    En retour la seule aide que je peux vous apporter est ma connaissance sur les plantes méditerranéennes,

    Mais bon je n'ai pas encore fini mon projet, j'avance très lentement, alors à bientôt.

    le code :

    Sub largeurdecolonnes()
    ' met les largeurs de colonnes suivant le besoin de la mise en page avec centrage du texte horiz + verti

    Dim nbli As Integer
    nbli = Cells(Rows.Count, 1).End(xlUp).Row
    Range("A18:AI" & nbli).Columns.AutoFit
    Columns("B:B").ColumnWidth = 16
    Columns("F:F").ColumnWidth = 14.5
    Columns("K:K").ColumnWidth = 16
    Columns("L:L").ColumnWidth = 16
    Columns("M:M").ColumnWidth = 38
    Columns("P:P").ColumnWidth = 15
    Columns("Q:Q").ColumnWidth = 15
    Columns("R:R").ColumnWidth = 16
    Columns("S:S").ColumnWidth = 18.5
    Columns("T:T").ColumnWidth = 15
    Columns("U:U").ColumnWidth = 18
    Columns("V:V").ColumnWidth = 19.5
    Columns("W:W").ColumnWidth = 15
    Columns("X:X").ColumnWidth = 14.5
    Columns("Y:Y").ColumnWidth = 17
    Columns("AF:AF").ColumnWidth = 12
    Columns("AH:AH").ColumnWidth = 14
    Columns("AI:AI").ColumnWidth = 14
    With Range("A16:AI" & nbli)
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    End With

    ' centrage du texte horiz + retrait gauche

    With Range("C18:D18" & nbli)
    .HorizontalAlignment = xlLeft
    .VerticalAlignment = xlCenter
    End With

    End Sub

    Sub engrasA1aAI13()

    ' mettre en gras la plage de A1:AI13

    Range("A1:AI13").Font.Bold = True

    End Sub

    Sub policeencalibri28()
    ' met le texte en police Calibri et en 28
    Dim nbli As Integer
    nbli = Cells(Rows.Count, 1).End(xlUp).Row
    Range("A1:AI" & nbli).Select
    With Selection.Font
    .Name = "Calibri"
    .Size = 28
    .Underline = xlUnderlineStyleNone
    .ThemeColor = xlThemeColorLight1
    .TintAndShade = 0
    .ThemeFont = xlThemeFontMinor
    End With

    End Sub

    Sub inserimagelogo()

    ' insere le logo dans l'entete

    Dim Gauche, Sommet, Largeur, Hauteur As Single

    Gauche = Range("D3").Left
    Sommet = Range("D3").Top
    Largeur = Range("D3").Width = 40
    Hauteur = Range("D3").Height

    Feuil1.Shapes.AddPicture "W:\logo\logo palmacea entete.jpg", True, True, Gauche, Sommet, Largeur, Hauteur

    End Sub
    0
    1. Bonjour le fil,

      une petite proposition après la bronzette, ce code dans les propriétés de la feuille (clic droit sur l'onglet/visualiser le code) paramètrera les colonnes de A à E (1 à 5) sur un simple clic dans la plage A5:E30

      Option Explicit

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Target.Column >= 1 And Target.Column <= 5 And Target.Row > 5 And Target.Row < 30 Then
      Columns("A:E").EntireColumn.AutoFit
      Else
      Columns("A:E").ColumnWidth = 2
      End If
      End Sub

      0
      1. Bonsoir,
        C'est une telle salade pour suivre la discussion ...... !
        Sans compter que l'on ne sait même ce qu'il en est des propositions .... !
        Merci de prendre note que je quitte le poste, désolé.

        Salutations.
        Le Pingou
        0
        1. Contributeur
          Ouais ben pareil.
          Il discute dans son coin, et aucun retour sur les propositions (sans parler de remerciements...).
          Et bien qu'il continue tout seul.
          eric
          0
        2. Bonsoir eriiic,
          J'en profite pour te souhaiter une bonne nuit et excellente fin de semaine.
          Amicales salutations
          Le Pingou
          0
        3. Contributeur
          Merci, bon we estival :-)
          0
      2. Bonjour pascalou83400,
        Essayez donc avec cette procédure :
        Sub colonnes()
        Dim nbli As Integer
        nbli = Cells(Rows.Count, 1).End(xlUp).Row
        Range("A18:AI" & nbli).Columns.AutoFit
        Columns("B:B").ColumnWidth = 13
        Columns("C:C").ColumnWidth = 15.5
        Columns("F:F").ColumnWidth = 13.5
        Columns("K:K").ColumnWidth = 14.5
        Columns("L:L").ColumnWidth = 14.5
        Columns("M:M").ColumnWidth = 38
        Columns("P:P").ColumnWidth = 14.5
        Columns("Q:Q").ColumnWidth = 14.5
        Columns("U:U").ColumnWidth = 17
        With Range("A18:B" & nbli & "," & "E18:AI" & nbli)
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        End With
        With Range("C18:D" & nbli)
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlBottom
        End With
        End Sub

        1
        1. Bon j'avance à petit pas, j'ai fait qq modifs et ca marche , sauf que je veux mettre en gras la plage A1:AI13 et que je ne trouve pas le code (j'ai fais une macro pour voir le code et voila ce que j'en ai tiré)
          merci les gars.
          0
        2. le code ;

          Sub colonnes()
          Dim nbli As Integer
          nbli = Cells(Rows.Count, 1).End(xlUp).Row
          Range("A18:AI" & nbli).Columns.AutoFit
          Columns("B:B").ColumnWidth = 16
          Columns("F:F").ColumnWidth = 14.5
          Columns("K:K").ColumnWidth = 16
          Columns("L:L").ColumnWidth = 16
          Columns("M:M").ColumnWidth = 38
          Columns("P:P").ColumnWidth = 15
          Columns("Q:Q").ColumnWidth = 15
          Columns("R:R").ColumnWidth = 16
          Columns("S:S").ColumnWidth = 18.5
          Columns("T:T").ColumnWidth = 15
          Columns("U:U").ColumnWidth = 18
          Columns("V:V").ColumnWidth = 19.5
          Columns("W:W").ColumnWidth = 15
          Columns("X:X").ColumnWidth = 14.5
          Columns("Y:Y").ColumnWidth = 17
          Columns("AF:AF").ColumnWidth = 12
          Columns("AH:AH").ColumnWidth = 14
          Columns("AI:AI").ColumnWidth = 14
          With Range("A16:AI" & nbli)
          .HorizontalAlignment = xlCenter
          .VerticalAlignment = xlCenter
          End With

          With Range("C18:D18" & nbli)
          .HorizontalAlignment = xlLeft
          .VerticalAlignment = xlCenter
          End With

          End Sub

          Sub engrasA1aAI13()
          ' mettre en gars la plage de A1:AI13

          Range("A1:AI13").Selection.Font.Bold = True

          End Sub

          Sub policeencalibri28()

          Dim nbli As Integer
          nbli = Cells(Rows.Count, 1).End(xlUp).Row
          Range("A1:AI" & nbli).Select
          With Selection.Font
          .Name = "Calibri"
          .Size = 28
          .Underline = xlUnderlineStyleNone
          .ThemeColor = xlThemeColorLight1
          .TintAndShade = 0
          .ThemeFont = xlThemeFontMinor
          End With

          End Sub
          0
        3. Contributeur
          Bonjour,

          Range("A1:AI13").Font.Bold = True
          eric
          0
        4. je continue , je cherche à inserer une image jpg dans mon entete, j'ai trouvé ce code, mais je ne sais pas comment indiquer le chemin ou se troove l'image.

          mon chemin est W:\logo\logo palmacea entete, je mets le code

          Sub Macro1()
          Dim Photo As Variant
          Dim Gauche, Sommet, Largeur, Hauteur As Single

          Photo = Application.GetOpenFilename("Images JPEG (*.jpg), *.jpg")
          Gauche = Range("C2").Left
          Sommet = Range("C2").Top
          Largeur = Range("C2").Width
          Hauteur = Range("C2").Height

          If Photo <> False Then
          Feuil1.Shapes.AddPicture Photo, True, True, Gauche, Sommet, Largeur, Hauteur
          End If
          End Sub
          0
      3. Bonjour,

        Est ce qu'il y des données en dehors de votre Tableau dans la colonne A ?

        Si la réponse est non, alors utilsez le code suivant :

        Columns("A:A").EntireColumn.AutoFit

        Si la réponse est oui :
        Après avoir jeté un petit coup d'oeil, je ne pense que ce soit possible. A vrai dire :

        - soit on autoajuste une colonne en fonction de toutes les données de celle ci. D'ailleur manuellement on est Obligé de cliquer sur A pour ensuite double cliquer sur le bord pour l'autoajuster.

        - soit on impose une taille manuellement et dans ce cas on utlise le code :
        Columns("A:A").ColumnWidth = 15 (plus la valeur est grande plus la largeur de la colonne est grande)
        0
        1. Bonjour pascalou83400,
          Est-ce que le code que je vous ai proposé fonctionne chez-vous... ?
          Vous dites ; j'ai mis ce code, mais j'ai une erreur
          Pour pouvoir vous aider il faut aussi mettre le message d'erreur et la ligne de code concerné... !

          0
          1. Contributeur
            Désolé ; je n'y connais rien en macros ...
            0
            1. Bonjour,
              Essayez avec le code qui suit :
              Range("A18:A" & Cells(Rows.Count, 1).End(xlUp).Row).Columns.AutoFit 

              0
              1. Bonjour,

                Bon j'ai eu le temps de voir ton code, ca ne marche pas, je pense que je rentre mal le cde :

                Sub colonne()

                Range("A18:A" & Cells(Rows.Count, 1).End(xlUp).Row).Columns.AutoFit

                end sub

                il ne manque pas qq chose , comme style la feuille du classeur ?

                activeworksheets

                je commence mon apprentissage vba, je pense que ca va etre coton.

                a+

                Pascal
                0
            2. Bonjour Raymond,

              Je sais et je veux une seule taille, mais je veux étirer ma colonne avec la plus grande valeur, mais je dois commencer à la ligne A18, car au dessus j'ai des entêtes trop volumineuses.

              Je fais le code suivant qui marche bien, sauf que je ne trouve pas comment me baser sur ma ligne A18 jusqu'à la dernière ligne utilisée.

              Sub largeurdecolonne()

              Columns("A:A").EntireColumn.AutoFit

              End Sub

              Merci

              bonne journée
              0
              1. Bonsoir Pascalou

                Où as tu mis ton code ?
                Sub colonne()

                Range("A18:A" & Cells(Rows.Count, 1).End(xlUp).Row).Columns.AutoFit

                end sub

                Il fonctionne bien si tu le mets dans dans le Worksheet de la feuille en question

                (Ouvrir l'éditeur VBA Cliquer sur la feuille dans l'arborescence et mettre le code dans la page blanche)

                Si au contraire tu mets le code dans un module il faut indiquer la feuille,
                tu as plusieurs manières de proceder, soit :

                Activesheet.Range("A18:A" & Cells(Rows.Count, 1).End(xlUp).Row).Columns.AutoFit

                qui appliquera le code dans la feuille active (tu peux ainsi appeler la macro de n'importe quelle feuille et elle s'appliquera sur celle-ci

                soit Sheets("Feuil2").Range("A18:A" & Cells(Rows.Count, 1).End(xlUp).Row).Columns.AutoFit

                et la macro ne s'appliquera qu'à la feuille nommée Feuil2

                soit enfin Sheets(3).Range("A18:A" & Cells(Rows.Count, 1).End(xlUp).Row).Columns.AutoFit

                et la macro s'appliquera à la 3eme feuille du classeur (en partant de la gauche) quelque soit son nom

                Cdlmnt
                0
              2. Bonjour Via55,

                meme le vba n'a pas de secret pour toi...

                alors je vais encore profiter de tes explications qui sont au top.

                j'ai mis ce code , mais j'ai une erreur :

                Sub colonnes()

                Range("A18:AI18" & Cells(Rows.Count, 1).End(xlUp).Row).Columns.AutoFit
                Columns("B:B").ColumnWidth = 13
                Columns("C:C").ColumnWidth = 15.5
                Columns("F:F").ColumnWidth = 13.5
                Columns("K:K").ColumnWidth = 14.5
                Columns("L:L").ColumnWidth = 14.5
                Columns("M:M").ColumnWidth = 38
                Columns("P:P").ColumnWidth = 14.5
                Columns("Q:Q").ColumnWidth = 14.5
                Columns("U:U").ColumnWidth = 17

                Range("A18:B18" & Cells(Rows.Count, 1).End(xlUp).Row).Columns.HorizontalAlignment = xlCenter.Columns.VerticalAlignment = xlBottom

                Range("C18:D18" & Cells(Rows.Count, 1).End(xlUp).Row).Columns.HorizontalAlignment = xlLeft.Columns.VerticalAlignment = xlBottom

                Range("E18:AI18" & Cells(Rows.Count, 1).End(xlUp).Row).Columns.HorizontalAlignment = xlCenter.Columns.VerticalAlignment = xlBottom
                End Sub

                et je cherche à macrotiser la police calibri en 30 et les marges.

                Bon je vais me coucher, car je n'en peu plus.

                a+

                Pascal
                0
              3. Bonjour Pascal

                Le Pingou (que je salue au passage) a été plus rapide que moi et te donnes la solution

                A+

                Cdlmnt
                0
              4. Bonjour via55,
                Merci.
                En utilisant [Ajouter un commentaire] cela a pour effet de voir les réponses toujours plus loin dans le fil, c'est vraiment dommage pour le suivi... mais bon chacun si retrouveras .... !
                Salutations.
                Le Pingou
                0
            3. Contributeur
              Non : une colonne ne peut pas avoir des largeurs différentes !
              Tu ne peux faire cela que sur Word, où les tableaux sont dessinés, et non automatiques comme dans Excel.

              C'est bien, la retraite ! Surtout aux Antilles ... :-)
              Raymond (INSA, AFPA, CF/R)
              0