Ajustement auto des lignes

Paladin

XLDnaute Junior
Bonjour le forum,

J'ai un petit souci : je veux faire un ajustement automatique la hauteur d'une ligne par une macro (Autofit), mais cela ne marche pas.

Mon application fait en fait un copier-coller d'un fichier dans un classeur Excel vierge pour le remettre en forme.
Or, la hauteur des lignes par défaut est parfois insuffisante (suivant le contenu du fichier de base) et je dois donc faire un 'Autofit'.
Mais ça ne marche pas.

Si quelqu'un connait le code complet ou comment BIEN faire (j'ai appris par l'enregistreur de macros), je lui en serais très reconnaissant.

Merci d'avance

PS : Je ne peux malheureusement pas mettre de fichier joint car c'est impossible (ma boite ne l'autorise pas).
 

Paladin

XLDnaute Junior
En fait, ça marche aussi chez moi quand je le fais sur le classeur dans lequel est enregistré la macro.
Mais quand ce classeur doit agir sur un autre classeur (crée par la macro), ça veut plus marcher. Et j'ai beau tester diverses solutions (avec Entirerows, Range, ...), rien n'y fait.
Je comprends pas car j'ai plein d'autres fonctions qui agissent sur ce nouveau classeur (copie de cellules, masques, ...) et elles marchent !
 

Hervé

XLDnaute Barbatruc
Bonsoir paladin, le forum, la planete.

pour pouvoir travailler sur un autre fichier, il faut spécifier quel fichier :

Workbooks('classeur1.xls').Sheets('feuil1').Rows('6:6').EntireRow.AutoFit


ceci fonctionne chez moi, si tu as encore un problème, essaye de joindre un fichier

salut
 

Paladin

XLDnaute Junior
Bon alors je comprends pas ... car c'est ce que je faisais !
Est-ce que ça peut être dû au déroulement ?
1 - La macro crée un nouveau classeur
Code:
Set WBDest = Workbooks.Add
2 - Elle y recopie dans certaines cellules des données de l'ancien classeur (remise en forme)
Code:
With ActiveSheet
            .Cells(1, 3).Value = WSExport.Cells(I, 1).Value
            .Cells(2, 3).Value = WSExport.Cells(I, 3).Value
            .Cells(1, 9).Value = WSExport.Cells(I, 4).Value
End With
(où WSExport est défini comme une feuille du fichier d'origine et ActiveSheet est la feuille en cours du nouveau classeur)
3 - La macro doit afficher/masquer certaines lignes (en fonction des données d'origine)
4 - La macro fait l'ajustement des lignes

Les étapes 1,2,3 marchent parfaitement et je ne comprends donc pas pourquoi la 4 ne marche pas (même avec ton code Hervé ... qui est d'ailleurs celui que je faisais à l'origine).
Est-ce que ça peut être lié à la cellule d'origine dont je copie l'info ? Ou est-ce qu'il y a quelque chose d'autre à faire ('retour auto à la ligne' validé ne change rien).

Désolé de vous embeter pour ça, mais je me prends la tête depuis hier sur ce problème de m... :(
 

Paladin

XLDnaute Junior
Je viens de faire un test : le problème vient apparemment du fait que je veux agir sur des cellules fusionnées (mais sur la même ligne) car lorsque j'enlève la fusion, le 'Autofit' marche parfaitement.
J'ai essayé d'utiliser 'Merge' puis 'Autofit' (et l'inverse), mais ça ne résout rien.

Quelqu'un aurait une solution ?

Please .... :(
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

en effet l'autofit ne marche pas sur les cellules fusionnées

Il faut faire une petite macro qui

1- defusionne tes cellules
2- aggrandit ta colonne à la taille totale une fois fusionné
3- faite l'autofit
4-remet la colonne à la taille voulue
5- refusionne

Je dois avoir ça sur une appli que j'ai fait je te l'envoie dès que j'ai retrouvé
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bon voilà c'est retrouvé

Sheets('Rapport').Columns('A:A').ColumnWidth = 96.29 'Agrandir la colonne A à la taille qu'a la cellule une fois fusionné (dans mon cas les colonnes A à K) daonc la largeur ici 96.29 correspond à la largeur de ma colonne si je l'aggrandis pour qu'elle prenne toute la place de A à K
With Sheets('Rapport').Range('A' & MaLigne & ':K' & MaLigne )
.MergeCells = False 'enlever la fusion des cellules
.WrapText = True 'retour du texte à la ligne
.EntireRow.AutoFit 'mettre la ligne en ajustement auto de la hauteur
MaHauteur = .RowHeight 'voir quelle est la hauteur de la ligne une fois cet autofit fait
.MergeCells = True 'refusionner
.RowHeight = IIf(MaHauteur > 15, MaHauteur, 15) 'si la hauteur une fois autofit fait est inferieur à 15 je laisse 15 en minimum sinon hauteur de l'autofit (perso c'est la hauteur mini que je voulais
End With
Sheets('Rapport').Columns('A:A').ColumnWidth = 14.29 'remettre la colonne A à la bonne largeur

voilà bon courage

Message édité par: Pascal76, à: 20/07/2005 10:43
 

Discussions similaires

Statistiques des forums

Discussions
311 707
Messages
2 081 746
Membres
101 812
dernier inscrit
trufu