Bonjour tout le monde
Je viens chercher un peu d'aide apres avoir passe plusieurs a chercher en vain une solution...J'ai une liste de valeurs (codes names) dans une sheet C. Dans une sheet A, j ai en premiere colonne une liste de code names puis des donnees dans les autres colonnes. L'idee est de creer une macro qui va m'extraire toutes les lignes de la sheet A dans la sheet B, si l'on retrouve la valeur de la liste (presente dans la sheet C) dans la premiere colonne de la sheet A.
Je voulais faire un vlookup au debut, mais je vais avoir besoin de repeter l'operation pour differents sets de donnees et je trouve cela plus simple de "copier si". Par ailleurs la suite de mon code est base sur ce format de fichier.
J'ai trois feuilles excel :
"Main": contient dans la colonne M une liste code names (la list de codes names pour lesquels je souhaite recuperer les donnes de l extract)
"Extract" : contient toues les donnees relatives a chaque code source (plusieurs colonne de donnees). En colonne 2, les codes name.
"Final" : Feuille finale ou je veux copier mes donnees.
J'ai construit la macro ci dessous mais j 'ai deux problemes :
1/ La macro ne lit que la premier code name, va bien chercher la ligne corresondante et la copie dans le fichier final mais elle ne lit pas tous les codes names de la colonne de reference. J ai besoin de creer une sorte de boucle qui lit les 223 codes names, puis va verifier si oui ou non on retrouve ce code name dans le fichier extract, puis colle la ligne entiere corresondante dans le fichier final. Pour l instant elle s arrete au premier de la liste..
2/ Si le code name n'est pas trouve, la macro ajoute une ligne de 0 puis passe au code name suivant.
Ici mon code...
Si vous avez des idees n'hesitez pas ! Merci bcp.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 Sub recherchV() Dim ws_check As Worksheet Dim ws_extract As Worksheet Dim ws_final As Worksheet Dim cell_check As Range Dim cell_extract As Range Dim cell_final As Range Dim zone_check As Range Dim zone_extract As Range Dim zone_final As Range Set ws_check = Worksheets("MAIN") Set ws_extract = Worksheets("SPIExtract") Set ws_final = Worksheets("SPIExtractfinal") ' // Codes names are on every rows in the column M of "Check" Set zone_check = ws_check.Range(ws_check.Range("M2"), _ ws_check.Range("M228")) ' // I want to compare the codes names of the list in the column M of "Main" to the ones contained in the column "b" of Extract" Set zone_extract = ws_extract.Range(ws_extract.Range("B7"), _ ws_extract.Range("B228")) '// Here are the first cells of the rows where I want the entire row of "Extract" to be copied in the "final" sheet if the codes names match Set zone_final = ws_final.Range(ws_final.Range("B7"), _ ws_final.Range("B228")) '// If codes names match then copy the entire rows.. For Each cell_check In zone_check For Each cell_extract In zone_extract For Each cell_final In zone_final If cell_check.Value = cell_extract.Value Then cell_extract.EntireRow.Copy zone_final.EntireRow ' if code names do not match then value =0 for the entire row Else: zone_final.EntireRow.Value = 0 End If Next Next Next End Sub
Partager