Simplification attributs cellule/colonne sur une ligne

Résolu
dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   -  
dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   -
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.

5 réponses

  1. 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
  2. dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  4. dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
       
      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