Automatiser un copier coller selon des critères
Bonjour !
Dans le fichier joint j'ai une grande matrice.
J'aimerais copier coller cette matrice automatiquement dans une nouvelle feuille avec uniquement les colonnes et les lignes de ma matrice qui sont en rose. Selon les données en entrée ces case colorés changes ....
Est-ce possible ? Attention il y a des Colonnes et lignes qui son masqué autour de la matrice.
Merci a cette communauté par ailleurs, très réactive !
Du Vba il faut utiliser je suppose ?
Bonsoir,
Il faudrait que tu expliques pourquoi elles sont roses ! ?
Car elles existent dans les données qui sont dans le tableau a coté (tu peux afficher mes lignes/colonnes masquées). Si A3 n'existe pas dans le tableau alors pas de couleur.
Tu n'as pas bien compris la question, du moins la question sous-jacente.
Je n'ai pas demandé comment tu faisais en sorte que les cellules se colorent en rose par MFC, pour cela j'ai consulté la formule !
Et j'en arrive en remontant aux données fixes des colonnes A à F pour lesquelles, plutôt que de me livrer à des conjectures abstraites, je pose la question de ce préside à leur établissement.
Cordialement.
Alors en gros : ma matrice peux avoir 6 entrées maximum, j'ai donc créer la matrice la plus grande possible pour parer toutes éventualités.
Les données représentent des carrefours et leur nombres de branche (11 carrefours max & 6 branches par carrefour max). Chaque branche est composé de mouvement directionnels, c'est a dire le nombre de voiture allant d'une branche a une autre (A1 >A2, A1 > A3 ...... dans le sens inverse des aiguilles d'une montre). Voila un schéma (en PJ) qui aidera peux être a comprendre.
Mais selon les cas d'études le nombre de branche et de carrefour change. Je colore donc en rose selon existence ou non des données dans mon tableau d'entrée. Le vert c'est autre chose, c'est la connexion inter-carrefour (la branche B3 est connectée au carrefour C & la branche B1 au carrefour A) . C'est un peu long a expliquer et surement pas très clair.
Ma matrice finale doit juste contenir les carrefours et les branches qui existent, sans les connexions. Donc ce qui est coloré en rose.
Je suis actuellement en train de développer cela en BDD. L'outil sur excel est fonctionnel mais pas ergonomique
Mais si j'arrive a une matrice final propre de toute données inutile ce serait vraiment une belle réussite. C'est pour cela que j'ai besoin de votre aide
PS: J'ai répondu a ta question ? Du coup le tableau qui sert a alimenter la matrice est créer préalablement sous access pour établir un "patron" de carrefour selon l'étude en cours (3 ou 8 ou 5 carrefours avec x branches par carrefour), les données concernant les mouvements tournants sont récupérées par des équipes sur le terrain.
Je ne pense pas avoir tout digéré mais je crois avoir trouvé où m'"accrocher"...
Procédure ci-dessous, à lancer avec le bouton ICI pour tester :
Sub TestTableau()
Dim Tablo(), n%, i%, j%, h%, k%, TS As Range
Application.ScreenUpdating = False
With ActiveSheet
.Range("G3:H1000").AdvancedFilter xlFilterCopy, , .Range("X3:Y3"), True
.Range("X3:Y1000").Sort key1:=.Range("Y3"), order1:=xlAscending, Header:=xlYes
Do While .Range("Y" & n + 4) = ""
n = n + 1
Loop
ReDim Tablo(n, n)
For i = 1 To n
Tablo(i, 0) = .Range("X" & i + 3)
Tablo(0, i) = Tablo(i, 0)
Next i
.Range("X3:Y1000").Clear
i = .Range("AB" & .Rows.Count).End(xlUp).Row
j = .Cells(3, .Columns.Count).End(xlToLeft).Column
Set TS = Range(.Cells(3, 28), .Cells(i, j))
For i = 1 To n
h = WorksheetFunction.Match(Tablo(i, 0), TS.Columns(1), 0)
For j = 1 To n
k = WorksheetFunction.Match(Tablo(0, j), TS.Rows(1), 0)
Tablo(i, j) = TS.Cells(h, k)
Next j
Next i
End With
With Worksheets("Tableau")
.Cells.Clear
With .Range("A1").Resize(n + 1, n + 1)
.Value = Tablo()
.Borders.LineStyle = xlContinuous
End With
.Activate
End With
Application.ScreenUpdating = True
End SubTu me diras si c'est le résultat attendu.
A noter :
1) Ce n'est pas du copier-coller (le presse-papier n'est pas mis à contribution), c'est mauvais réflexe qui fait parle de copier-coller dès qu'on veut prendre des valeurs quelque part pour les mettre ailleurs...
2) La procédure utilise les colonnes G et H pour déterminer ce qui est à prélever, elle pourra prendre en compte un tableau plus étendu (on prend en considération la plage G3:H1000, ce qui laisse une marge, et on peut augmenter le 1000).
2bis) Pareil pour le tableau où l'on prélève, on calcule ses dimensions, il peut donc varier. Le point fixe est la cellule supérieure gauche du tableau : AB3. Si cette cellule change, il suffit de modifier les références dans les 3 lignes qui servent à dimensionner ce tableau et à l'affecter à la variable TS, soit le 3 pour la ligne, AB ou 28 pour la colonne.
Cordialement.
Oua !
Super c'est exactement ce que je voulais. Il a juste fallu que je fasse une feuille qui s’appelle Tableau. Je l'ai intégré a un bouton et ça fonctionne comme sur des roulettes. Je suis pas très doué en VBA mais je vais essayer de mieux comprendre ce que tu as fait.
Maintenant il faut que j'ajoute au bout de chaque ligne et colonne, de ce beau tableau, des totaux et des différences entre les entrées et les sorties par branche
Je vais essayer de me débrouiller pour ce coup ci. Si j'ai besoin d'aide je reviens vers votre site !
Je te remercie !
C'est possible de définir dans le code le format des cellules ? Car dans mon exemple ce sont des produit complexe et j'ai besoin d'une valeur arrondi. Quand le tableau se crée j'ai des valeurs avec beaucoup décimales
Alors j'ai un petit problème ...
J'ai une erreur (6), dépassement de capacité. J'ai regarder sur internet cela viens apparemment d'un problème de type de variable .... Peux être les pourcentage ? Enfin ça a fonctionné mais la ça veux plus ...
Bonjour,
Sur quelle ligne, l'erreur ?
C'est un peu étrange, si j'ouvre un nouveau fichier excel que je copie colle mon projet et que je re-tape le code et cela fonctionne. Comme si il y avait une limite. J'ai fait du pas a pas, j'ai pas l'impression qu'il y est d'erreur sur une ligne. J'arrive pas a aller plus loin que le Loop mais c'est normal je pense
Pour le format, tu ajoutes la ligne surlignée :
With .Range("A1").Resize(n + 1, n + 1)
.Value = Tablo()
.NumberFormat = "0"
.Borders.LineStyle = xlContinuous
End WithPour l'erreur, tu me diras sur quelle ligne quand tu l'auras retrouvée.
Cordialement.