Bonjour à tous et toutes !!
Voila mon pb j'ai besoin de modifier une macro VBA et d'en créer une .....j'ai découvert le VBA il y a 3 jours et je ne m'en sort pas ....et j'ai besoin que ces macros soit opérationnelles le plus vite possible .... parce que ça bloque tout le reste de mon travail de cette semaine ....:-((((
Est-ce que qq'un peut m'aider et me dire combien cela me couterait pour modifier la première macro et créer la seconde ??? je n'ai plus d'autres solutions maintenant ....voici le détail de ce dont j'ai besoin :
J’ai un onglet « Matrice Principale » dans laquelle il y a des lignes de données (AD/AE/AF/AG) à partir de la ligne 10. 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. J’ai donc mis en place 27 colonnes de « B à AB » me permettant de mettre un chiffre 1 ou rien, si il y a 1 il faut envoyer les Données des colonnes (AD/AE/AF/AG), dans l’onglet correspondant à celle ou se trouve le chiffre 1.
Une fois ces données envoyé dans les onglets respectif, je vais MANUELLEMENT trier ces données, c'est-à-dire que la ligne de données 4 de l’onglet 10 sera placé après la ligne de donnée 7 par exemple. Le point important c’est qu’il n’y a pas moyen d’automatiser ce tri….
J’ai une Macro VBA qui est la suivante :
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 Next 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 End With End Sub
Je dois modifier cette macro pour :
1/ Délimiter une zone d’analyse de l’onglet « Matrice Principale », par exemple de ‘‘B10 à AB1000 ’’, parce que tel qu’est rédigé ma Macro VBA…si je mets des « 1 » au milieu du tableau alors qu’il n’y a aucun « 1 » auparavant (sur les 100 premières lignes par exemple) il s’arrête avant d’ avoir trouvé les « 1 » du milieu du tableau à 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 à mon onglet « 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…. Merdoummm !!!
Pour solutionner ce problème il faudrait que :
- si il y a un "1" dans la colonne 25 et la ligne 150 de ma matrice principale, avant d'affecter les données de la ligne 150 colonne AD/AE/AF/AG dans l'onglet 25, la Macro devra vérifier que la donnée de la colonne AF de la Matrice Principale (ligne 150) n'est pas présente qq part dans la colonne D de l'onglet 25. Là la vérification s'arrête lorsqu'il n'y a plus de donnée dans la colonne G de l'onglet 25.
Si dans l'onglet 25, pas de donnée de la colonne AF de la Matrice Principale (ligne 150) alors on ajoute les données AD/AE/AF/AG de la ligne 150 de la Matrice Principale à la suite du tableau de cet Onglet (sans perturber l'ordre des autres données).
Si dans l'onglet 25, il y a la donnée AF de la matrice principale (ligne 150), alors on vérifie aussi que la donnée AG de la ligne 150 de la matrice principale est également présente dans l'onglet 25 :
- si il est également présent alors on ne fait rien (c'est à dire on n'ajoute pas les données de la ligne 150)
- si il n'est pas présent alors on ajoute la ligne de donnée 150 de la matrice principale dans cet onglet 25
Je suis obligé de procéder comme cela parce que dès fois mes données en AF sont similaires et dès fois je n'ai pas de donnée en AG.....
donc je dois passer par un double test ....
Mais comment traduire tout ça et l’intégrer correctement dans ma Macro « Remplir » ???
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….. Au travers éventuellement d’une Macro VBA distincte de « Mise à Jour » que je ne vais exécuter que de temps en temps et qui va tester/ vérifier inversement pour chaque onglet numéroté de 1 à 27 si :
Pour l'onglet 1 :
Ligne 3 : A partir des données B3/C3/D3/E3 de l’onglet 1, on va chercher dans la «Matrice Principale» la Ligne « x » ou les données B3/C3/D3/E3 de l’onglet 1 sont égales aux données des colonnes AD/AE/AF/AG. Une fois cette Ligne « x » identifiée, alors je vais voir la colonne B (colonne correspondant à l’onglet 1) de la Ligne "x" si c’est bien écrit « 1 » :
- si « Oui » je ne fais rien et je passe à la vérification de la ligne 4,
- si « NON » alors j’efface les données B3/C3/D3/E3 de la ligne 3 de l’onglet 1 et je remonte les données qui sont en dessous d’une ligne. Parce que si il n’y a pas de « 1 » ça veut dire qu’une donnée de la matrice principale a été modifié et qu’il faut faire une mise à jour, qui va consister à effacer la ligne de donnée vérifiée de l’onglet 1, et à remonte les données qui sont en-dessous d’une ligne (pour avoir un tableau uniforme).
- Et le traitement de vérification / mise à jour pour l’Onglet s’arrête lorsque les données B3=rien et C3=rien et D3=rien et E3 = rien
- On passe alors à l’onglet 2 etc …. Jusqu’au dernier onglet N° 27.
Merci pour votre aide et éventuel conseil de plateforme pouvant me faire ça ....bonne journée à tous et toutes !!!Test 3 -03MAR2015.xlsm
Partager