Mise en forme _ Mise en page

Bonjour,

Je souhaiterais "automatiser" la mise en forme de données pour qu'elles soient mieux exploitables, mais je ne sais pas du tout comment faire.

L'informaticien de ma boite extrait d'une base à mon intention des données qui m'intéressent.

Je les récupère sous forme brute (feuille VRAC de la PJ).

Leur structure est toujours la même, FAMILLE / Sous_familles / Codes et leurs libellés.

Je souhaiterais savoir s'il est possible de "programmer" une mise en forme automatique (feuille MIS_EN_FORME de la PJ), sachant que les quantités de FAMILLES / Sous_familles / Codes et leurs libellés ne sont jamais les mêmes

Merci d'avance pour votre aide

25miseenforme.zip (7.02 Ko)

Je me réponds à moi même...

En fait je pense que la démarche est:

Pour chaque ligne non vide de la feuille "VRAC" :

Si la valeur de la première cellule est égale à "Famille_x" (je connais tous les noms des Familles)

alors copie et mise en forme sur la même ligne de la feuille "MIS_EN_FORME"

Si la valeur de la première cellule est égale à "Sous_famille_x" (je connais tous les noms des Sous_familles)

alors copie et mise en forme sur la même ligne de la feuille "MIS_EN_FORME"

Sinon, il s'agit d'un Code, alors même traitement que ci dessus.

Que pensez vous de cette approche ?

Si c'est pas trop nul, un morceau de code m'aiderait bien.. Après j'adapterai...

Bon, mon sujet ne semble pas intéresser beaucoup de monde, alors je me réponds encore à moi même

J'ai un peu avancé.

Dans le fichier joint,

la feuille "VRAC" est celle ou je mets mes données à mettre en forme

la feuille "CL" lorsqu'elle est activée met automatiquement les données de la feuille "VRAC" en forme (les gouts et les couleurs... je verrai à la fin)

Il demeure un problème, c'est que j'aimerais bien "alimenter le "Select Case" du code vba, à l'aide des donnée de la feuille "Titres" plutôt que de les rentrer dans le code. C'est quand même plus sympa.

Pensez vous que ça soit possible ?

Merci

25miseenforme-v0.xlsm (40.83 Ko)

Bonsoir

J'ai simplifié le code

Sans doute que l'on pourrait encore supprimer des instructions

A tester

Banzai64 a écrit :

Bonsoir

J'ai simplifié le code

Sans doute que l'on pourrait encore supprimer des instructions

A tester

Merci !!!

Je suis à la fois satisfait, et très découragé...

Satisfait car c'est exactement ce que je cherchais à faire

Découragé car certaines parties de ton code semblent (pour moi) directement venues de Mars

Par exemple:

      Set Cel = WsTitre.Cells.Find(what:=.Range("A" & J), LookIn:=xlValues, lookat:=xlWhole)

Mais je ne vais pas bouder mon plaisir... ET je vais chercher à m'améliorer

Merci encore.

Super que des passionnés prennent le temps....

Bonjour

Juste pour te dire que je ne viens pas de Mars (ni d'Avril non plus )

Cette ligne sert à chercher dans la page des titres si la cellule de la page Vrac est présente

Si elle présente et la colonne = 1 ----> Titre

Si elle présente -------------------------> Sous titre

Si elle est absente ----------------------> Code

J'ai fait cette méthode parce que tu as marqué que tu connaissais les Titres et les Sous-Titres

Banzai64 a écrit :

Bonjour

Juste pour te dire que je ne viens pas de Mars (ni d'Avril non plus )

J'ai fait cette méthode parce que tu as marqué que tu connaissais les Titres et les Sous-Titres

C'est exact.

Bon, ben j'ai pas mal bossé dessus ce matin.

Pas mal modifié aussi sur la forme, mais avec un code qui tient la route, c'est tellement plus facile.

Voici ou j'en suis, à noter que l'action sur les hauteurs et largeurs de colonnes rallonge pas mal le traitement. Mais c'est sans importance.

J'ai maintenant un autre souhait, et je ne trouve pas le moyen d'y arriver.

Je souhaiterais que l'écriture dans la feuille "CL" commence à la ligne 10 ou 15 de façon à pouvoir insérer un entête dans les cellules ainsi libérées.

Est ce possible ?

En remplaçant Ligne + 1 par Ligne + 10 dans cette partie du code, je décale bien vers le bas, mais toutes les FAMILLES sont séparées aussi par 10 lignes, et ça c'est pas bon.

    If Cel.Column = 1 Then      ' Famille
    Ligne = Ligne + 1
        With Range("A" & Ligne & ":H" & Ligne)
            .MergeCells = True
            .BorderAround Weight:=xlMedium
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter

Une idée ?

23miseenforme-v6.xlsm (47.65 Ko)

Bonjour

Modifies le début de la macro

Sub MiseEnForme()
Dim J As Long, Ligne As Long
Dim Cel As Range
Dim WsVrac As Worksheet, WsTitre As Worksheet

  Clean
  Application.ScreenUpdating = False
  Ligne = 9                                        ' Pour commencer à la ligne 10
  Set WsVrac = Sheets("VRAC")
  Set WsTitre = Sheets("Titres")
  With WsVrac
Banzai64 a écrit :

Bonjour

Modifie le début de la macro

Sub MiseEnForme()
Dim J As Long, Ligne As Long
Dim Cel As Range
Dim WsVrac As Worksheet, WsTitre As Worksheet

  Clean
  Application.ScreenUpdating = False
  Ligne = 9                                        ' Pour commencer à la ligne 10
  Set WsVrac = Sheets("VRAC")
  Set WsTitre = Sheets("Titres")
  With WsVrac
Merci pour ta réactivité ! J'ai encore des progrès à faire

Je marque le sujet "résolu"

Rechercher des sujets similaires à "mise forme page"