Simplification attributs cellule/colonne sur une ligne

Résolu
dhaze Messages postés 113 Statut Membre -  
dhaze Messages postés 113 Statut Membre -
Bonjour à tous,

Est-il possible de simplifier cette formule ?

Range("G1").Value = "[DOC]"
Range("G1").Select
With Selection
	.Orientation = 90
End With
Columns("G:G").Select
With Selection
	.EntireColumn.AutoFit
End With

Pour la mettre sur une seule ligne.
Du genre :

Cells(1, 7) = "[DOC]" + .Orientation = 90 + .EntireColumn.AutoFit

Pourquoi ?

J'ai énormément d'attributs différents pour chaque colonne, et je voudrais préparer ma macro en faisant une ligne = une colonne.
Plus clair et plus facile à élaborer...

Merci de vos lumières

Lo.
A voir également:

5 réponses

redaiwa Messages postés 370 Statut Membre 119
 
Salam dhaze.

Personnellement, j'opterais pour ce code :
Range("A1") = "[DOC1]"
Range("B1") = "[DOC2]"
Range("C1") = "[DOC3]"
Range("D1") = "[DOC4]"
Range("E1") = "[DOC5]"
Rows(1).Orientation = 90
Cells.EntireColumn.AutoFit


Le code affecte d'abord les valeurs aux cellules puis, en une seule fois, fixe à 90 l'orientation de la ligne 1 et applique la fonction Autofit.

NB : les "Value" et "Select" sont inutiles, ils ne sont générés que lors de l'enregistrement automatique des macros.

Est-ce bien cela que tu voulais ?

:)
0
dhaze Messages postés 113 Statut Membre
 
Merci pour cette réponse.
Mais c'est pas exactement ça.

Mon problème, c'est que le ou les attributs ".format de cellule"
sont différents dans chaque colonne.

Cela peut être l'orientation, la largeur(fixe ou auto), etc...

Cells(1,7) = "[DOC]" + .Orientation = 90 + .EntireColumn.AutoFit
Cells(1,8) = "Titre" + .ColumnWidth = 50 + .EntireColumn.WrapText
Cells(1,9) = "Auteur" + .ColumnWidth = 30
Cells(1,10) = "Fond"  + .ColumnWidth = 20

Ne pas se fier à la "grammaire" de ce code qui est bien sûre fausse !

En moyenne, j'ai une soixantaine de colonnes par feuille...
Toutes avec des attributs différents !

Surtout des largeurs, et parfois une orientation à 90° quand il y a des accolades (ce qui pourrait être géré en fin de macro par un .Find("[") ).

Je pense que la difficulté c'est qu'il y ait, à la fois des attributs liés à la première cellule, puis à la colonne entière...

Lo.
0
via55 Messages postés 14730 Statut Membre 2 749
 
Bonsoir Dhaze

Et pourquoi ne pas préparer dans un tableau les différents attributs par colonne et faire ensuite par macro lire le tableau affecter les attributs sur une autre feuille ?
Exemple :
https://www.cjoint.com/?0CmaZeh0KTA

Cdlmnt
0
dhaze Messages postés 113 Statut Membre
 
Merci !

Pas mal ta solution, je la garde au chaud ;-)

Mais pour des raisons de sécurité tout doit se trouver dans des macros verrouillées. Le reste du tableau étant "libre"...

J'ai bien pensé à xlSheetVeryHidden, mais je voudrais bien trouver une solution uniquement par macro.

Beau boulot, merci encore.

Lo.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dhaze Messages postés 113 Statut Membre
 
Bonjour via55,

Après avoir fait quelques essais,
je crois que ton approche est bien la bonne ;-)

Je vais mettre toutes mes en-têtes et leurs formats dans
une feuille xlSheetVeryHidden.

Comme CJoint a fait le ménage, je me permets de mettre
ta macro en clair pour ceux que cela pourrait aider.

+---+-----------------+-------+--------+--------+-------+
| | A | B | C | D | E |
+---+-----------------+-------+--------+--------+-------+
| 1 | N° colonne | 7 | 8 | 9 | 10 |
+---+-----------------+-------+--------+--------+-------+
| 2 | ligne 1 | [DOC] | Titre | Auteur | Fond |
+---+-----------------+-------+--------+--------+-------+
| 3 | orientation | 90 | 0 | 0 | 0 |
+---+-----------------+-------+--------+--------+-------+
| 4 | largeur | | 50 | 30 | 20 |
+---+-----------------+-------+--------+--------+-------+
| 5 | Colonne entiere | A | W | | |
+---+-----------------+-------+--------+--------+-------+

Sub mise_en_page()
dercol = Sheets(1).Cells(1, Cells.Columns.Count).End(xlToLeft).Column
For n = 2 To dercol
With Sheets(1)
colonne = .Cells(1, n)
titre = .Cells(2, n)
orient = .Cells(3, n)
largeur = .Cells(4, n)
entiere = .Cells(5, n)
End With
With Sheets(2)
.Cells(1, colonne) = titre
If orient > 0 Then .Cells(1, colonne).Orientation = orient
If largeur > 0 Then .Cells(1, colonne).ColumnWidth = largeur
If entiere = "A" Then .Cells(1, colonne).EntireColumn.AutoFit
If entiere = "W" Then .Cells(1, colonne).EntireColumn.WrapText = True
End With
Next
End Sub

Merci
Lo.
0
dhaze Messages postés 113 Statut Membre
 
Juste pour info...

'En début de macro, je commence par:

    Worksheets("Feuille_source").Visible = xlSheetVisible
    Sheets("Feuille_source").Select

 'Et fini par :

    Worksheets("Feuille_source").Visible = xlSheetVeryHidden

Ça fonctionne parfaitement.

Lo.
0