Je souhaiterais faire une macro renvoi à la ligne automatique cellules fusionnées.
En surfant sur le net, j'ai trouvé cette macro qui marche mais je ne comprend pas tout et ne sais pas comment lui dire de le faire automatiquement sur une feuille complète :
Code :
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
En fait, mon idée est de faire une macro qui dit : tu me cherches toutes les cellules fusionnées sur une feuille nommée XXX, et tu me fais le renvoi à la ligne automatique pour toutes, ce qui se caratérise au final par la ligne qui se dimensionne correctement pour pouvoir voir tout mon texte.
En fait, mon idée est de faire une macro qui dit : tu me cherches toutes les cellules fusionnées sur une feuille nommée XXX, et tu me fais le renvoi à la ligne automatique pour toutes, ce qui se caratérise au final par la ligne qui se dimensionne correctement pour pouvoir voir tout mon texte.
Très bonne idée. C'est parti.
Découpons ce gros problème en petits problèmes simples :
Comment désigner la feuille XXX ?
Comment désigner toutes les cellules d'une feuille ?
Comment parcourir les cellules d'une plage de cellules ?
Comment déterminer si une cellule est fusionnée avec une autre ou pas ?
Comment établir le renvoi automatique à la ligne pour une cellule ?
J'ai l'intention de t'aider, mais pas de te le faire. C'est comme ça. Réponds donc à ces questions si tu peux.
Comment désigner toutes les cellules d'une feuille ?
Citation :
Comment parcourir les cellules d'une plage de cellules ?
For Each Cel In SelectSheets.UsedRange
Citation :
Comment déterminer si une cellule est fusionnée avec une autre ou pas ?
If XXX.Range(XXX.Cells(Cell.Row, Cell.Column), XXX.Cells(Cell.Row, Cell.Column + ?)).MergeCells
Citation :
Comment établir le renvoi automatique à la ligne pour une cellule ?
Un truc du genre : .WrapText = True
Ah mon avis j'ai des fautes ...
Je résume le style de fichier que j'ai :
- cellules fusionnées pouvant avoir plus de 2 cellules fusionnées entre elles
- cellules fusionnées pouvant se trouver dans n'importe quelle colonne de la feuille (donc pas forcément en colonne A)
- possibilité de plusieurs zones de cellules fusionnées sur une même ligne mais pas forcément côte à côte
Oui et Non. Sheets("XXX" ) tout court !!
Select sélectionne la feuille, ce dont nous n'aurons pas besoin.
Mais puisqu'il s'agit d'une feuille de calcul, autant utiliser WorkSheets("XXX" )
Q: Comment désigner toutes les cellules d'une feuille ?
R: ....
0/4
C'est pourtant si facile :
WorkSheets("XXX" ).Cells
Q: Comment parcourir les cellules d'une plage de cellules ?
R: For Each Cel In SelectSheets.UsedRange
4/4 Tu en fais trop !! Je n'ai demandé qu'une plage.
Disons que l'exemple n'est qu'un exemple.
Q: Comment déterminer si une cellule est fusionnée avec une autre ou pas ?
R: If XXX.Range(XXX.Cells(Cell.Row, Cell.Column), XXX.Cells(Cell.Row, Cell.Column + ?)).MergeCells 3,5/4 Tu en fait encore trop !! cel.MergeCells suffit.
Q: Comment établir le renvoi automatique à la ligne pour une cellule ?
R: Un truc du genre : .WrapText = True
4/4 Très bonne réponse.
13,5/20. Peut mieux faire
Allez on mélange tout :
Citation :
Pour chaque cellule de toutes les cellules de la feuille XXX, si cette cellule est fusionnée, mettre sa propriété WrapText à vrai :
Code :
Dim cel As Range
For Each cel In WorkSheets("XXX" ).Cells
If cel.MergeCells Then cel.WrapText = True
Next
C'est tout.
D'où l'idée de ne pas partir du bazar proposé au début.
Spoiler :
(Je ne sais pas pourquoi, je sens venir les plaintes et les jérémiades à propos d'Excel)
Je suis en train de tester mais en fait je veux bien partir sur l'idée de la plage nommée (qui ferait par exemple A1 à Z100) car là ça prend toute ma feuille cellule par cellule et ça fait 5mn que ça réfléchi ...
Est-ce que un code fait ainsi est bon monsieur le professeur :
Code :
Dim cel As Range
For Each cel In Range("PLAGENOMMEE" ).Cells
If cel.MergeCells Then cel.WrapText = True
Next
En tout cas merci de me faire participer car c'est ainsi qu'on apprend !!!
Non je ne sais pas à quoi sert la fenêtre d'exécution ...
Sinon, le code n'a rien fait de particulier sur mon fichier essai ... et avoir une fenêtre à valider cellule par cellule, on n'est pas rendu car j'ai un fichier réel bourré de cellules fusionnées à mettre à jour ...
Tu me parles chinois car je fais CTRL+G mais rien se passe ...
Question bête mais puisque la macro n'a rien fait, je voulais m'assurer que tu savais que le renvoi à la ligne automatique du menu excel ne marche pas sur les cellules fusionnées, des fois que la macro passe par cette fonction ... d'où le problème à créer.
Question bête mais puisque la macro n'a rien fait, je voulais m'assurer que tu savais que le renvoi à la ligne automatique du menu excel ne marche pas sur les cellules fusionnées, des fois que la macro passe par cette fonction ... d'où le problème à créer.
Comment ça je ne sais pas ? Clique sur spoiler pour voir.
Le renvoi à la ligne fonctionne même sur les cellules fusionnées, par contre, la hauteur de la ligne ne prend pas automatiquement la taille du texte qui y est renvoyé à la ligne.
Voila, maintenant tu peux te plaindre et faire des jérémiades