Ma macro de mise en forme sur la largeur des cellules ne fonctionne pas

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

chris6999

XLDnaute Impliqué
Bonjour

Je souhaiterais rédiger un code me permettant de mettre en forme en imposant la largeur des colonnes.
J'ai relevé pour chaque colonne la largeur souhaitée puis j'ai répété le code suivant pour chaque colonne
Sub MacroMEF()
Columns("A:A").Select
Selection.ColumnWidth = 2.5
Columns("B:B").Select
Selection.ColumnWidth = 2.86
Columns("D😀").Select
Selection.ColumnWidth = 17
....

Mais voilà lorsque je lance la macro cela va super lentement car il y a beaucoup de colonnes..
De plus je n'obtiens pas du tout les largeurs demandées.

Quelqu'un peut-il m'aider pour optimiser ce code (un peu minable mais je débute) et surtout trouver la solution pour qu'il fonctionne.

Je mets un fichier test en pièce jointe

Merci d'avance
Cordialement
 

Pièces jointes

Re : Ma macro de mise en forme sur la largeur des cellules ne fonctionne pas

Bonjour

Ce que tu peux faire déjà c'est
  • enlever les select
  • si plusieurs colonnes ont la même dimension, les régler en même temps
    Code:
    Columns("B:C").ColumnWidth = 2.86
  • ajouter
    Code:
    Application.ScreenUpdating = False
    en début du code
 
Re : Ma macro de mise en forme sur la largeur des cellules ne fonctionne pas

Merci

Je vais essayer de retirer les select.
Par contre lorsque tu écris b:c cela signifie de B à C.
Comment écrire b et c et g et h par exemple.
En effet j'ai des colonnes de même taille mais non adjacentes

Cordialement
 
Re : Ma macro de mise en forme sur la largeur des cellules ne fonctionne pas

Bonjour à tous,

Voici le début de ce que tu peux écrire pour des colonnes non contiguës :

VB:
Sub MEF()
Columns("A:A").ColumnWidth = 2.5
Union(Columns("B:C"), Columns("F:G"), Columns("W:X"), Columns("N:N")).ColumnWidth = 2.86
Columns("D:D").ColumnWidth = 17
Columns("E:E").ColumnWidth = 3
Columns("H:H").ColumnWidth = 2.14
Columns("I:I").ColumnWidth = 3.29
Columns("J:J").ColumnWidth = 12.86
Columns("K:K").ColumnWidth = 5.57
Columns("M:M").ColumnWidth = 3.29
Columns("O:O").ColumnWidth = 4.71
Columns("P:P").ColumnWidth = 17.86
Union(Columns("Q:Q"), Columns("AG:AG")).ColumnWidth = 1.29

Bises à Chris
A + à tous
 
Re : Ma macro de mise en forme sur la largeur des cellules ne fonctionne pas

Merci pour votre aide
J'ai retapé le code en regroupant les colonnes de même largeur mais la macro reste longue à l'exécution.
Dommage
Bonne fin d'après-midi à vous tous
Cordialement
 
Re : Ma macro de mise en forme sur la largeur des cellules ne fonctionne pas

Re
Bise à JCGL

As-tu bien enlevé toute référence à Select ou Selection et ajouté la ligne
Code:
Application.ScreenUpdating = False

Tu peux aussi mettre
Code:
Application.Calculation = xlCalculationManual
au début et
Code:
Application.Calculation = xlCalculationAutomatic
à la fin

Même si la modification de la largeur de colonnes n'est pas sensée provoquer de calcul, j'ai remarqué que cela change parfois la vitesse d'exécution
 
Re : Ma macro de mise en forme sur la largeur des cellules ne fonctionne pas

Bonjour à tous,

Voici le temps que met le code à s'exécuter :

Capture_1.png

Pour moi, c''est relativement court... Avec ce code


VB:
Sub MEF()    Dim T As Single
    T = Timer


    With Application
        .ScreenUpdating = 0
        .Calculation = xlCalculationManual
    End With


    Columns("A:A").ColumnWidth = 2.5
    Union(Columns("B:C"), Columns("F:G"), Columns("W:X"), Columns("N:N")).ColumnWidth = 2.86
    Columns("D:D").ColumnWidth = 17
    Columns("E:E").ColumnWidth = 3
    Columns("H:H").ColumnWidth = 2.14
    Columns("I:I").ColumnWidth = 3.29
    Columns("J:J").ColumnWidth = 12.86
    Columns("K:K").ColumnWidth = 5.57
    Columns("M:M").ColumnWidth = 3.29
    Columns("O:O").ColumnWidth = 4.71
    Columns("P:P").ColumnWidth = 17.86
    Union(Columns("Q:Q"), Columns("AG:AG")).ColumnWidth = 1.29
    Union(Columns("R:S"), Columns("Y:Y"), Columns("AL:AL"), Columns("AV:AV"), Columns("BP:BP")).ColumnWidth = 1
    Columns("T:T").ColumnWidth = 4
    Columns("U:U").ColumnWidth = 7
    Union(Columns("Z:Z"), Columns("AO:AO")).ColumnWidth = 2.71
    Columns("AA:AA").ColumnWidth = 20.71
    Columns("AB:AB").ColumnWidth = 5.57
    Columns("AD:AD").ColumnWidth = 5.29
    Columns("AE:AE").ColumnWidth = 3.43
    Columns("AF:AF").ColumnWidth = 7.14
    Columns("AI:AI").ColumnWidth = 7.43
    Union(Columns("L:L"), Columns("V:V"), Columns("AN:AN"), Columns("AC:AC"), Columns("AH:AH"), Columns("AJ:AJ"), Columns("AW:AW"), Columns("BB:BB"), Columns("BL:BL"), Columns("BY:BY"), Columns("AY:AY"), Columns("BJ:BJ"), Columns("CA:CA")).ColumnWidth = 3
    Columns("AK:AK").ColumnWidth = 4.43
    Columns("AM:AM").ColumnWidth = 2
    Columns("AP:AP").ColumnWidth = 11.86
    Columns("AQ:AQ").ColumnWidth = 9.86
    Columns("AR:AR").ColumnWidth = 12.43
    Columns("AS:AS").ColumnWidth = 10.71
    Columns("AT:AT").ColumnWidth = 17
    Columns("AU:AU").ColumnWidth = 9
    Columns("AX:AX").ColumnWidth = 4.71
    Columns("AZ:AZ").ColumnWidth = 5.71
    Columns("BA:BA").ColumnWidth = 0.58
    Columns("BC:BC").ColumnWidth = 5.57
    Columns("BD:BD").ColumnWidth = 10.57
    Columns("BE:BE").ColumnWidth = 8.43
    Union(Columns("BF:BF"), Columns("BR:BR")).ColumnWidth = 9.29
    Columns("BG:BG").ColumnWidth = 25
    Columns("BH:BH").ColumnWidth = 10.43
    Columns("BK:BM").ColumnWidth = 5.43
    Columns("BN:BN").ColumnWidth = 1.57
    Columns("BO:BO").ColumnWidth = 0.67
    Union(Columns("BQ:BQ"), Columns("BT:BT")).ColumnWidth = 10.71
    Columns("BU:BU").ColumnWidth = 13.43
    Columns("BV:BV").ColumnWidth = 9.71
    Columns("BW:BW").ColumnWidth = 5.29
    Union(Columns("BI:BI"), Columns("BX:BX"), Columns("CD:CD")).ColumnWidth = 0.5
    Columns("BZ:BZ").ColumnWidth = 5.86
    Columns("CB:CB").ColumnWidth = 4.71
    Columns("CC:CC").ColumnWidth = 2
    Columns("CE:CL").ColumnWidth = 12.25


    With Application
        .ScreenUpdating = 1
        .Calculation = xlCalculationAutomatic
    End With


    MsgBox Format(Timer - T, "0.000 s"), vbInformation, "Exécution du code"
End Sub

A + à tous

Edition : Bise à Chris
 

Pièces jointes

  • Capture_1.png
    Capture_1.png
    4.3 KB · Affichages: 59
  • Capture_1.png
    Capture_1.png
    4.3 KB · Affichages: 62
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour