Ajuster automatiquement la hauteur d'une ligne fusionnée
#1
Débutant XLPages

Inscription: 10/08/2009

Messages: 11

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 26-08-2009 11h44
Bonjour,

Alors voilà un nouveau problème que j'ai à vous poser.

Je copie d'une feuille vers une autre des lignes de texte, sous forme de listing : une ligne = une "prestation".

Jusque là tout va bien.

Le truc c'est que dans la feuille source, le listing n'ayant pas besoin d'avoir une forme particulière, les lignes sont parfois assez longues.  En revanche sur la feuille finale la largeur est fixée par un nombre de cellules fusionnées que je ne peux pas modifier pour la bonne tenue de la pagination de toute la feuille.

J'ai donc trouvé ce petit bout de code que je place dans une boucle allant du début à la fin de la partie ou je liste les prestations et qui test chaque cellule afin de voir s'il faut ou non l'ajuster :


Sub AutoFitMergedCellRowHeight()

Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim CurrCell As Range
Dim ActiveCellWidth As Single, PossNewRowHeight As Single
 
 If ActiveCell.MergeCells Then
   With ActiveCell.MergeArea
     .WrapText = True 'enclenche le renvoi à la ligne automatique (modif fs)
     If .Rows.Count = 1 Then 'And .WrapText = True Then
       Application.ScreenUpdating = False
       CurrentRowHeight = .RowHeight
       ActiveCellWidth = ActiveCell.ColumnWidth
       For Each CurrCell In Selection
           MergedCellRgWidth = CurrCell.ColumnWidth + MergedCellRgWidth
       Next
      .MergeCells = False
      .Cells(1).ColumnWidth = MergedCellRgWidth
      .EntireRow.AutoFit
       PossNewRowHeight = .RowHeight
      .Cells(1).ColumnWidth = ActiveCellWidth
      .MergeCells = True
      .RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, CurrentRowHeight, PossNewRowHeight)
     End If
   End With
 End If
 
End Sub


Le soucis que je rencontre est qu'il me réajuste parfois des lignes qui n'en ont pas besoin, et je me retrouve alors avec un paquet de ligne bien trop grandes qui désorganisent ma pagination en faisant déborder le texte de fin de page sur une deuxième page.

D'après un de mes amis ce serait un problème au niveau du test de la longueur des caractères, et de la taille de cellule...  Je vous avouerai que sur ce morceau de code j'ai un peu de mal à m'y retrouver et à comprendre ce qu'il se passe...

Je vous joins un petit fichier Excel de test pour vous donner une meilleure idée de la chose, sachant qu'évidemment la manipulation que j'essaye de vous exposer ne fonctionne pas dans cet exemple.... 
Le problème affiché par le débugeur me revient assez souvent et je ne sais pas comment y remédier à part en changeant de méthode de sélection de la cellule.  Dans ce cas là j'ai épuisé mon stock d'idées... 


Merci d'avance pour votre aide !



Pièce jointe:
xls Classeur1.xls   [ Taille: 33.50 Ko - Téléchargements: 663 ]
Hors Ligne
Rapport   Haut 

Re: Ajuster automatiquement la hauteur d'une ligne fusionnée
#2
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 26-08-2009 13h22
Bonjour dedechseb,

Est-ce que la mise en page de la feuille finale peut souffrir des lignes plus hautes dans le cas de dépassement de largeur?

En d'autres termes, un retour à la ligne dans le cas d'un texte trop long implique une hauteur de ligne plus grande.

Guy

Hors Ligne
Rapport   Haut 

Re: Ajuster automatiquement la hauteur d'une ligne fusionnée
#3
Débutant XLPages

Inscription: 10/08/2009

Messages: 11

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 26-08-2009 14h39
Bonjour Guy,

Oui, le but du code que j'avais trouvé était justement d'agrandir la cellule en hauteur afin d'afficher le texte sur plusieurs lignes lorsque la largeur est dépassée.
Un retour à la ligne ne me pose aucun problème du moment tant que chaque "prestations" (ou gribouilli dans mon exemple ) reste dans une seule cellule.

Le problème que je rencontre est que lors du passage en revue de la largeur des lignes par rapport à la longueur du texte afin d'augmenter la hauteur si besoin, certaines "prestations" dont la longueur rentre tout a fait dans la cellule fusionnée vont quand même engendrer une augmentation de la hauteur...  ce qui rend la pagination plus que médiocre sur mon fichier personnel (que je ne peux vous fournir car il contient des données confidentielles).

La solution m'importe donc peu, tant que 1 prestation = 1 cellule fusionnée.

En revanche si vous trouvez une solution qui fonctionne, ne soyez pas avare en explications !!

Hors Ligne
Rapport   Haut 

Re: Ajuster automatiquement la hauteur d'une ligne fusionnée
#4
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 26-08-2009 17h01
Re bonjour,

J'ai modifié quelque peu le classeur et les procédures et commenté le code un tant soit peu.

Il n'y a plus de référence à Selection, la mise en forme des cellules cibles (dans Feuille Finale) s'effectue par l'intermédiaire d'une variable Plage.
Attention à la largeur initiale des cellules cibles (colonnes B à F); dans certains cas une légère différence de hauteur de ligne est observée.
Tu pourras potasser la chose jusqu'à satisfaction. Dans le classeur envoyé et avec les textes copiés tout semble marcher au mieux.

Voilà,

Guy

Pièce jointe:
xls Classeur1_Mod.xls   [ Taille: 49.00 Ko - Téléchargements: 831 ]

Hors Ligne
Rapport   Haut 

Re: Ajuster automatiquement la hauteur d'une ligne fusionnée
#5
Débutant XLPages

Inscription: 10/08/2009

Messages: 11

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 26-08-2009 17h45
Re-Bonjour,

Alors j'ai pu tester un peu votre fichier. Tout heureux que ça marche je modifie donc mon code pour le mettre à jour à l'aide du votre, mais hélas pas moyen d'obtenir le même résultat....

Cette fois çi toutes les lignes sont modifiées en hauteur,  mais au lieu que cela soit fait de façon anarchique cette fois la modification de hauteur est régulière et fonction de la hauteur de texte dedans...  On dirait qu'en fait la cellule est 2fois plus haute que le texte entré dedans.

Afin de re-tester votre fichier, j'ai modifié la taille des colonne et des lignes afin de les mettre au même valeurs que sur mon fichier final, à savoir que la feuille finale recevant les "prestations" dans des cellules fusionnées :
- a toutes ses lignes à la base d'une hauteur de 11,25  (points? cm? pouces?)
- a toutes ses colonnes à la base d'une largeur de 3 
- la cellule fusionnée recevant une prestation comprends 13 cellules de base.

Et après avoir appliqué ces modifs sur votre fichier, il s'avère que le même problème survient.

J'ai compris l'essence du code que vous avez utilisé,  même si certains points demeurent un peu obscur je pense que d'ici demain j'aurai compris complètement la manip...  Cependant je ne saurai vraiment pas dire à quel endroit cela coince ...

Merci d'avance pour votre réponse, je joint le nouveau fichier problématique.



Pièce jointe:
xls Copie de Classeur1_Mod.xls   [ Taille: 37.50 Ko - Téléchargements: 693 ]
Hors Ligne
Rapport   Haut 

Re: Ajuster automatiquement la hauteur d'une ligne fusionnée
#6
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 26-08-2009 18h06
Hôlà!

Je relis : «Attention à la largeur initiale des cellules cibles (colonnes B à F); dans certains cas une légère différence de hauteur de ligne est observée.»

Et donc tu écris : «a toutes ses colonnes à la base d'une largeur de 3»; voilà pourquoi votre fille est muette!

La largeur des cellules est exprimée en caractères et en pixels.  Lorsqu'on fait glisser la largeur ou la hauteur d'une cellule Excel affiche le nombre de caractères et, entre parenthèse, le nombre de pixels.  Donc une largeur de 3 correspond à une largeur de 3 caractères; nettement insuffisant.

À partir du fichier joint, je n'ai eu qu'à modifier la largeur des colonnes cibles (B à N) à 80 pixels et tout baigne.

Reprends l'exercice et zieute le résultat.

Re citation : «Tu pourras potasser la chose jusqu'à satisfaction. Dans le classeur envoyé et avec les textes copiés tout semble marcher au mieux.»

Guy




Hors Ligne
Rapport   Haut 

Re: Ajuster automatiquement la hauteur d'une ligne fusionnée
#7
Débutant XLPages

Inscription: 10/08/2009

Messages: 11

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 26-08-2009 18h52
Re-Bonsoir,

Alors j'ai suivi vos instructions, et en ne modifiant que la 1ere colonne (en lui posant une largeur de 80 pixels), le problème est réglé.
Je vais donc revoir un peu ma pagination pour pouvoir laisser juste cette colonne à 80pixels de large.

Cependant je m'excuse mais je ne parviens pas tout à fait à saisir le soucis rencontré avec une largeur de 3 caractères? En effet je conçois que par rapport à la longueur totale de ma ligne, ce soit très petit.

Mais lorsque je passe la largeur de la première colonne à 80 pixels soit 10,71 caractères,cela n'est pas forcément beaucoup plus gran par rapport à la longueur de ma ligne?

A quelle endroit de la procédure "AutoFitMergedCellRowHeight" cette valeur commence-t-elle à poser problème?

Merci d'avance pour vos lumières !

Hors Ligne
Rapport   Haut 

Re: Ajuster automatiquement la hauteur d'une ligne fusionnée
#8
Accro XLPages

Inscription: 09/01/2008
De Montréal, Québec

Messages: 463

Système d'exploitation:
PC
Version Excel utilisée:
97 à 2016
Posté le : 26-08-2009 19h21
Bonjour,

Effectue un pas à pas dans la procédure AutoFitMergedCellRowHeight() en commentant la ligne qui porte l'instruction        Application.ScreenUpdating = False pour pouvoir suivre le déroulement des opérations.  Pour ce faire je te suggère d'afficher l'éditeur VBA et le classeur en Feuille Finale active côte à côte puis en plaçant le curseur dans la procédure PourVoir() appuie sur F8 pour démarrer le pas à pas.  Ainsi tu pourras observer le déroulement des opérations.

Modifie la largeur de TOUTES les cellules fusionnées à ta guise et observe ce qui se passe lorsque cette largeur est diminuée au delà d'un certain seuil.

Guy


Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes