Comment faire évoluer ma Macro VBA ?? pour tenir cpte de 3 points :
Bonjour à tous et toutes !!
J’ai une macro VBA qui est la suivante :
Mon besoin de fonds est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Sub Remplir() Dim i As Byte, dl&, p As Range With Sheets("Matrice principale") dl = .Cells(Rows.Count, "B").End(3).Row On Error Resume Next Set p = .Range("B10:AB" & dl).SpecialCells(xlCellTypeConstants, 5) For Each c In p If c = 1 Then .Cells(c.Row, "AD").Resize(, 4).Copy Sheets(CStr(.Cells(8, c.Column))).Cells(Rows.Count, "B").End(3).Offset(1, 0) End If Next End With End Sub
J’ai une matrice principale dans laquelle il y a des lignes de données…ces lignes de données seront complétées au cours du temps. Ensuite je veux envoyer ces lignes de données dans différents onglets numérotés de 1 à 27.
Lorsque je vais lancer la macro «Remplir », en fonction de la présence du « 1 » ou pas dans le tableau de la matrice la Macro va affecter la donnée x dans l’onglet 20 par exemple.
Ensuite, ayant par exemple 50 lignes de données dans cet onglet 20 je vais les trier manuellement selon une méthode empirique et non automatisable….
Et la ç’est le gros Hic !! parce que lorsque je vais vouloir ajouter des lignes de données dans ma « Matrice Principale « , si je relance cette Macro « Remplir » il va remettre une seconde fois dans les onglets les données qui y sont déjà …donc pour éviter ça je dois utiliser la fonction RAZ pour nettoyer tous mes onglets..…mais la du coup je perds tous les tri manuel que j’aurais fait dans chacun des 27 onglets ….bref il me reste plus qu’à prendre une corde en gros ……
Et donc avec cette Macro, j’ai 3 problèmes :
1/ je voudrais délimiter une zone d’analyse de l’onglet « Matrice Principale », par exemple de ‘‘B10 à AB1000 ’’, parce que tel que c’est rédigé…si je mets des « 1 » au milieu du tableau alors qu'il n'y en a aucun dans les 100 premières ligne, la macro s’arrête avant de les avoir trouvé à priori…
2/ Cette macro envoie des lignes de données de l’onglet « Matrice Principale » vers 27 autres onglets. Le problème c’est que si j’ajoute une ligne de donnée à ma "Matrice Principale", et que je re-lance la macro « Remplir » il va remettre une seconde fois les données dans chacun des onglets ….et donc je me retrouve avec 2 fois les données dans chaque onglet….
Ce que je voudrais c’est que quand je relance la Macro « Remplir », avant d’incrémenter une nouvelle fois la donnée z dans l’onglet x, la Macro vérifie si cette ligne de donnée est déjà ou non présente dans cet onglet (on peut définir dans ce cas également une zone d’analyse dans chaque onglet de B3 à E 1000 par exemple).
3/ Enfin si au cours du temps, je souhaite enlever dans la « Matrice Principale » le «1» pour l’onglet 27 de la ligne de donnée 56, ce que j’aimerais c’est qu’il y ait une vérification inverse….. c'est-à-dire par exemple dans l’Onglet 27 on a la donnée de la ligne 56 de la matrice….donc on va voir dans l’onglet « Matrice Principale » à la ligne 56 et dans la colonne 27 si il y a bien un 1. Si ça n’est pas le cas, on efface cette ligne de donnée de l’onglet 27 et on remonte les données qui sont en-dessous d’une ligne (pour avoir un tableau uniforme).
Cette fonction ou cette seconde macro permettrait de prendre en compte les éventuellement changements que je ferai en cours de route dans la « Matrice Principale »….
Je sais ça fera sans doute des macros qui vont mettre du temps à s’éxécuter mais si vous avez une autre approche de programmation plus ergonomique mais qui respectera le fait que je ne veux pas perdre le tri manuel que je vais faire dans chacun des onglets …je suis preneur !!!!!!! ;-))
Merci beaucoup pour votre aide, je vous joint en annexe le fichier excel sur lequel je travaille …Test 3 -03MAR2015.xlsm
Partager