Mise en forme avec une Macro
Bonjour à tous
J'ai réussi à me débrouiller seul jusqu'ici mais là, ça bloque !
J'ai crée un tableau dynamique croisé (TDC) qui pioche ses sources dans une base externe.
Le tableau fonctionne bien (sauf la mise à jour des données, pourtant l'option mettre à jour à l'ouverture du fichier est coché... je dois appuyer sur actualiser)
Voilà mon problème :
Si mon tableau est correct, sa mise en forme laisse à désirer, je voudrais créer une macro faisant cela :
- Définir la largeur des colones A / B / C (après il y a un export vers word, en général) (Ces dernières changent lorsque le contenu des celulles changent)
- Forcer sur l'ensemble de la table : centrer dans la cellule, renvoyer à la ligne automatiquement
- Forcer bordures exterieur des colones A B C
- Le must serait enfin que ça copie tout de la cellule A6 (débaut à gauche de mon tableau résultant des filtres) à la cellule C?
Cette macro est, je l'espère, pas trop compliqué à réaliser. J'ai déjà trouvé sur le site comment créer une macro et sélectionner des colones mais pour faire les modifs taille, format etc... :/
Merci pour vos futurs conseil !
Bonne journée
Bonjour,
mettre en forme le texte et les cellules est tout à fait faisable par macro,
Je ferais un petit fichier démo avec une macro si j'ai le temps.
Bonne journée
Merci pour le lien je vais tenter de m'exercer un peu
Génial votre lien MERCI
Voilà où j'en suis : (je pense que le code n'est pas très optimisé mais bon ça fonctionne, c'est lisible)
Sub Exportation()
Range("A:A").EntireColumn.ColumnWidth = 25
Range("B:B").EntireColumn.ColumnWidth = 25
Range("C:C").EntireColumn.ColumnWidth = 35
Columns("A:C").HorizontalAlignment = xlCenter
Columns("A:C").VerticalAlignment = xlCenter
Range("A:C").Font.Size = 9
Rows("6:6").RowHeight = 25
Range("A6:C6").Font.Size = 11
Range("A6:C6").Font.Bold = True
Range("A:C").Font.Bold = False
Range("A:C").WrapText = True
[b]Range("A6").Select
Selection.Copy[/b]End SubBon je suis bien sur la cellule A6 maintenant, je dois faire CTRL-A mais là, je ne trouve pas de fonction pour faire ça...
cells.select
cela selectionne toute les cellules.
sheets(i).cells.select selectionne toutes les cellules de la feuille i.
Edit: petite astuce, si vous cherchez le code d'une manip que vous savez faire "manuellement" ,
en bas à gauche se trouve un petit bouton pour enregistrer une macro (juste sous les onglets), cliquez, donnez lui un nom au pif puis effectuez vos manip, une fois fini recliquez sur ce bouton puis :
=> Alt + F11
=> déployez les modules dans le menu à gauche, sélectionnez le dernier module, dans celui ci devrait se trouver la macro qui réalise les manip que vous venez d’exécuter, cela permet de trouver certaines fonctions que l'on a oublié etc...
En effet, j'utilise l'outils enregistrement pour trouver le nom des fonctions.
J'avais essayé "cells.select" mais ça sélectionne toute la feuille. Alors que je me place bien sur A6 qui est dans le TDC.
Je vais continuer de creuser pour trouver une solution, sinon on fera ça à la main, tant pis. La mise en forme automatique, c'est déjà top !!
J'ai bien trouvé un début de piste pour copier mon tableau, le problème est que ça sélectionne tout le tableau (mieux que cells.select) mais avec en plus mon tableau de filtre
Donc mon idée c'est de dire :
1 - Sélectionne tout le tableau
2 - Supprime dans cette selection A1 à C5.
3 - copie la nouvelle sélection
Je sais faire 1 & 3 mais l'étape 2, est-ce possible ?
Je connais pas de fonction pour ça, mais pourrais-tu t'en sortir en comptant le nombre de cellules non vides dans ta colonne C pour sélectionner le tableau par les deux bouts ?
Alors voilà mes pistes mais j'arrive pas à le coder :
Pour rappel
Ma feuille est uniquement sur trois colonnes A B & C
A1 -> C3 c'est ma table de filtre (il y en a 3 au total)
A4 -> C5 c'est une plage vide
A6 -> C? c'est mon tableau dont le nombre de lignes est variable en fonction des filtres.
Première piste :
L idée ici c'est de masquer les 5 premiers lignes. De ce fait quand ma Macro sélectionne ne tableau ça commence bien à A6 (puisque les autres sont masqués MAIS je peux plus modifier mes filtres
Donc je dois créer un formulaire qui me permet de modifier les filtres (je ne peux pas déplacer les filtres à cause du format du TDC)
Deuxième piste : (celle qui me plait le moins)
Je crée un tableau temporaire.
J'exporte le tableau complet vers une nouvelle feuille de calcul. Je supprime dans celle-ci les 5 premiers lignes puis je décale tout de 5 lignes vers le haut et je sélectionne tout puis copier. C'est pas pro du tout..............................................
Troisième piste :
Je trouve un moyen de déterminer la taille de mon tableau PUIS je fais copier de A6 jusqu'à la taille déterminé. Mais je sais pas comment trouver la taille du tableau.
C'est ce que vous me proposez mais comment y parvenir ??
Hum, avec calcul de la taille du tableau :
Je ne sais pas ou vous voulez le copier alors je me suis arrêté là.
bonne journée
edit. : je viens de voir que votre 5 eme ligne est vide, ça va surement gêner la macro, si c'est le cas,
changer
Range(Cells(5, 1), Cells(nbcells, 3)).Select
par
Range(Cells(6, 1), Cells(nbcells+1, 3)).Select
edit 2 : Mea culpa bis, les lignes 5 ET 6 sont vides x)
Range(Cells(5, 1), Cells(nbcells, 3)).Select
par
Range(Cells(7, 1), Cells(nbcells+2, 3)).Select
Bon déjà, merci beaucoup de prendre du temps sur mon problème.
Votre code marche à merveille sur votre xls. Sur le mien c'est pas mal mais il y a bug.
Plus le tableau est grand plus la sélection devient grande. Mais il manque toujours des cases, c'est proportiennelle.
Je me suis dit qu'il fallait compter sur une autre colonne. J'ai essayé de modifié la colonne pour compter, avec succès mais ça ne fonctionne pas.
nbcells = WorksheetFunction.CountA(Columns(3))Etrange, car vous ça marche impécable !
ça marche, petit problème de logique en réalité à la seconde ligne :
Range(Cells(6, 1), Cells(nbcells, 3)).Select
alors qu'en réalite on termine à nbcells.... +5 (les 5 premières)
donc :
Range(Cells(6, 1), Cells(5 + nbcells, 3)).Select
et ça tourne niquel ! Tout est parfait !!!!
merci infiniment !
Ce sujet est résolu grâce à l'aide de Guitouille
Merci
Hum,
dans ce cas, tu sélectionne aussi des lignes vides en fin de tableau (et la ligne 6 aussi), ça n'a aucune incidence sur le résultat mais c'est pour éclaircir la chose,
nbcells est le nombre de cellules de la colonne A non vide,
ce que l'on veut, c'est avoir le numéro de la ligne de la dernière cellule de la colonne C pour définir la plage à sélectionner
Avec 2 lignes vides, la dernière cellule est à la ligne nbcells +2
ps: J'ai fais "quelques" edit dans mon dernier post lorsque j'avais remarqué mon erreur ^^
edit: deux ligne vides mais on veut copier la deuxième, décidément, il me faut du café...
En effet
Il me reste plus qu'à trouver une option pour que le tableau se découpe dès qu'il fait la taille d'une page (word) mais j'avais déjà réussi à le faire dans ma version alpha mais comment....
Ca va le faire !
Merci encore pour votre précieux soutien !