Simplification attributs cellule/colonne sur une ligne

Résolu/Fermé
dhaze Messages postés 109 Date d'inscription mardi 27 septembre 2011 Statut Membre Dernière intervention 6 février 2020 - Modifié par dhaze le 11/03/2015 à 14:29
dhaze Messages postés 109 Date d'inscription mardi 27 septembre 2011 Statut Membre Dernière intervention 6 février 2020 - 9 avril 2015 à 18:39
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 351 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 25 janvier 2024 119
11 mars 2015 à 15:24
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 109 Date d'inscription mardi 27 septembre 2011 Statut Membre Dernière intervention 6 février 2020
Modifié par dhaze le 11/03/2015 à 16:48
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 14403 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 24 avril 2024 2 703
12 mars 2015 à 00:42
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 109 Date d'inscription mardi 27 septembre 2011 Statut Membre Dernière intervention 6 février 2020
7 avril 2015 à 19:11
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 109 Date d'inscription mardi 27 septembre 2011 Statut Membre Dernière intervention 6 février 2020
9 avril 2015 à 09:08
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 109 Date d'inscription mardi 27 septembre 2011 Statut Membre Dernière intervention 6 février 2020
9 avril 2015 à 18:39
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