Selectionner un tableau puis mettre en forme avec VBA
Bonjour, j'ai un gros souci sur excel et ses VBA;
Je ne sais vraiment pas comment faire ma formule.
Mon problème est le suivant:
J'ai fait un tableau de relevé.
Dedans j'y ai relevé les tailles des boites (entre autres) appellé tableau de base.
Puis j'ai fait un tableau à côté --> tableau récap, reprenant grosso modo les dimensions de mes boites (vides ou pleines)
Pour finir, en-dessous de ce dernier, j'ai représenté la solution; c'est ce que je doit obtenir mais en faisant cela avec des macros.
ou dit autrement j'aimerais qu'en selectionnant le tableau récap; le graphique (comme celui qui est sur ma feuille) se cré à côté.
Si quelqu'un a une solution à me proposer je sui preneur
Merci d'avance
Bonjour,
merci beaucoup, c'est exactement ce qu'il me fallait
Encore une question; parfois j'ai plusieurs tableaux récap sur une feuille (max 4) toujours différents.
Comment faire pour selectionner chaque tableau récap et en faire son tableau graphique?
Dois selectionner le tableau puis faire test ? ou faut-il refaire une macro pour chaque tableau récap?
J'en demande peut-être beaucoup, mais je n'ai jamais utilisé de macro avant cette semaine...
Bonjour,
Si tu es vraiment novice en macro, cela va être un peu épineux !
Le classeur que tu as mis, avec une feuille, n'étant qu'un extrait de ton travail, j'ai donc construit une macro autonome, à lancer à partir de ton programme, selon la façon dont tu entendais réaliser cette visualisation graphique...
La macro GraphRécap se lance avec 3 arguments qui sont des objets de type Range (soit des plages de cellules) :
1) La plage constituée par le tableau Récap :
à cet égard la macro est souple, elle dimensionnera ta visualisation graphique en fonction du tableau, si tu augmentes ou diminues le nombre de racks, si tu augmentes ou diminues les boîtes elle s'adaptera, et si les racks ne sont pas également remplis, elle s'ajustera sur la longueur de rack la plus importante...
2) Une plage fournissant les couleurs de boîtes dans l'ordre des catégories :
en effet, dans la mesure où les couleurs que l'on peut utiliser ne sont plus limitées, il est devenu quasiment obligatoire de récupérer les codes de couleur à partir d'une cellule colorée, c'est du moins le moyen le plus simple ;
là la macro n'offre pas la même souplesse que précédemment, elle est cadrée sur 4 types de boîtes et donc 4 couleurs, mais le cas échéant il serait facile de la rendre adaptable à un nombre de type de boîtes (et donc de couleurs) variable.
Il suffirait que tu aies une plage où sont listées les T1, T2... en gardant une numérotation continue des T à partir de 1, sans l'inscrire, mais en mentionnant à la place la dimension (en nombre de cellules en largeur) et bien sûr en les colorant. La macro pourrait alors récupérer simultanément dans cette plage les couleurs et les dimensions de boîtes dans l'ordre, et donc s'adapter à des variations en la matière.
3) La plage de positionnement : la cellule supérieure gauche de cette plage suffit, les dimensions résultant des autres éléments fournis.
La macro Test n'était là que pour :
- d'une part permettre de tester ! (puisque la macro doit être lancée avec arguments, il fallait donc le faire à partir d'une autre)
- d'autre part pour t'indiquer la façon la plus adéquate de la lancer :
Donc, où que ce soit dans ton code dans la procédure qui doit la lancer, tu déclares 3 variables Range, tu leur affectes les plages demandées (en utilisant l'instruction Set, car il s'agit de références d'objets et non de valeurs), puis tu lances la procédure en indiquant ces variables en argument.
Cordialement.
Bonjour,
après avoir revu votre VBA, je n'ai pas trouvé où modifier la cellule de destination pour le graphique.
Ci-joint le document définitif avec les tableaux.
Seulle la feuille D09 a ses tableaux récap.
A la base, ce que je souhaitais faire; c'était: lorsque je clique sur un bouton; tous les graphiques pour tous les tableaux récaps se créent. Le souci si je fais cela est que lorsque je vais lancer la macro, les feuilles ayants moins de tableaux créeront un graphique vide à côté du tableau récap.....
Je pense donc à une autre solution:
- est il possible de faire apparaitre une fenêtre demandant quel tableau récap selectionner (car plusieur tableaux mais pas toujours)
ou simplement pouvoir selectionner le tableau de donnée à chaque lancement de macro
- indiquer la cellule de destination du graphique (à moins qu'il commence toujours à la cellule (2;AO)
J'ai rajouté à la formule de base une suppression, une décoloration, une défusion et un désencadrement des cellules.
J'ai aussi réussi à modifier les cellules désignant les couleurs et les longueures de fusion.
PS: certaines marges ont étés masquées étant donné que la largeur est variable (le plus grands est = à 12 boites)
Si quelqu'un pouvait jeter un coup d'oeil à ce tableau ce serait sympa
Merci d'avance
J'ai un peu de mal à suivre ce que tu veux faire !
S'il s'agit de faire tous les schémas à la suite, il faut des critères pour trouver les tableaux, qu'on les cherche toujours dans la même colonne par exemple, et un indice pour les identifier et les dimensionner... De même, un critère pour positionner le schéma, par exemple une position relative par rapport au tableau...
S'il s'agit de déclencher l'opération unitairement à la demande, par bouton, il faut naturellement un bouton dans chaque feuille concernée, le tableau peut être défini par sélection avant clic sur le bouton, et pour la destination, soit la position est définie relativement au tableau, soit on questionne l'utilisateur pour la désigner.
j'aimerais plutôt avoir la possibilité de déclencher l'opération des graphiques à la chaîne
c'est à dire qu'avec 1 seul bouton, le graphique se réinitialise et se régénère à côté du tableau récap cellule AO2
J'ai fais en sorte que tous les tableaux récap commencent en cellule AA2
Il faut effectivement un critère pour trouver tous les tableaux mais lequel???
J'ai essayé de transférer votre formule dans le nouveau tableau mais la commande surlignée me pose problème.
J'ai beau la changer mais rien n'y fait:
With Pst
.Cells(1, 1).Resize(n).Font.FontStyle = "Gras italique"
.Cells(1, 2).Resize(n, lng - 1).ColumnWidth = 4
With .Cells(1, 1).Resize(n, lng)
.HorizontalAlignment = xlCenter
With .Borders
.LineStyle = xlContinuous
.Weight = xlThin
End With
End With
End With
Application.ScreenUpdating = True
End Sub
Il ne faut pas changer cette ligne si tu veut que le graphique corresponde à ce que tu attends ! Cette ligne ajuste la largeur de colonne du graphique une fois que sa largeur en nombre de colonnes a été déterminée.
Je ne sais pas pourquoi il y a erreur là, et n'ai pas vu ce que tu as modifié... Je regarde quand j'ai un moment... a+
Merci par contre je crois bien qu'il n'y a pas la macro sur le document que j'ai mis en ligne.
Voici le même fichier avec la formule.
Je viens de faire une modif; il me dit encore autre chose...
Si tu enregistres en .xlsx, les macros sont supprimées à l'enregistrement !
Voici enfin le fichier avec macros
Considérant que tout code enregistré est MAUVAIS par définition, je n'apprécie pas outre mesure que l'on insère dans une procédure que j'ai émis un tel code
Une macro s'ECRIT selon ce que l'on souhaite faire à partir des données existantes. Hors de question que j'analyse le code enregistré inséré !
Considérant que mon code est conçu pour s'exécuter en l'état, à partir de paramètres qui lui sont fournis, il n'y a aucune raison de le modifier. La seule intervention à opérer repose sur la façon de le lancer avec les paramètres adéquats selon les résultats à obtenir.
Je n'examinerai donc la question que sur ces bases...
J'ai modifié la macro principale pour qu'elle prenne en compte les dimensions des boîtes dans les mêmes conditions que leurs couleurs, à partir d'une plage nommée Boites sur la première feuille (J16:O19).
De cette façon des variations de couleurs aussi bien que de dimensions pourront être prises en compte.
Ce qui élimine le 2e argument de la procédure.
D'autre part, le nombre de tableauRécap d'une feuille sera défini automatiquement par une fonction qui renverra à partir du nom de la feuille un tableau d'éléments ainsi constitué : élément 0 = nombre de tableaux sur la feuille, élément 1 = ligne du 1er tableau, élément 2 = 1er tableau lui-même en tant que plage (objet Range), élément 3 = ligne 2e tableau (éventuel), élément 4 = 2e tableau, etc. pour les éléments suivants éventuels.
La ligne permettra de positionner le schéma à construire en AO. Cette fonction élimine donc les 1er et 3e arguments de la procédure initiale. Les 3 sont donc éliminés, mais sont à remplacer par un nom de feuille ou une liste de noms de feuille.
Il me reste à la réaménager dans ce sens.
Quelques modifications depuis mon dernier post.
La procédure conserve un argument qui sera la plage tableauRécap.
Elle procéde à l'effacement et à la défusion d'une plage plus large (dans la mesure ou la largeur utilisée par le schema graphique n'est définie qu'à la fin).
Et les mises en forme ont dû être complétées un peu...
La fonction ne renvoie plus que le nombre de tableaux et les plages. Les lignes ne sont pas utiles, le positionnement pouvant être fait à partir de la plage.
Pour pouvoir amorcer de déroulement global, j'ai nommé une plage listF destiné à accueillir une liste de feuilles à traiter. Placée sur a première feuille, avec le bouton "Test". La plage est nommée en dynamique...
Le bouton lance une procédure, qui appelle la fonction pour chaque feuille contenue dans la liste, et lance la procédure de confection du schéma pour chaque tableau.
Pas de test de masse effectué, un seul tableauRécap se trouvant en AA.
Cordialement.