Bonjour à toutes et à tous,
Heureux de pouvoir enfin vous retrouver après une longue période de convalescence.
Voici mon problème : Avec le code ci-joint, je rapatrie des données venant d'un tableau général selon une lettre, pour ce code, c'est la lettre "P" inscrite dans la cellule A2 qui déclenche tout. Cependant je rencontre un petit soucis, après la dernière ligne, il m'inscrit le nombre de lignes rapatriées, comme avec un filtre automatique et ça je n'en veut pas. Le tableau doit se terminer par le dernier rapatriement trouvé, dans ce cas, la dernière ligne du tableau général comportant la lettre "P" dans la colonne "G".
J'espère avoir été clair dans mon explication, sinon n'hésitez pas à me le dire.
Merci par avance pour votre aide car je n'arrive pas à trouver la solution
Bonjour,
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 Private Sub Worksheet_Change(ByVal Target As Range) Dim LastLig As Long, NewLig As Long, Nb As Long If Target.Address = "$A$2" Then Union(Range("A4:H" & Rows.Count), Range("J4:K" & Rows.Count), Range("M4:M" & Rows.Count)).ClearContents If Target <> "" Then With Sheets("Général") .Range("A3").AutoFilter LastLig = .Cells(Rows.Count, "G").End(xlUp).Row If LastLig < 4 Then If .Range("A3").AutoFilter = True Then .Range("A3").AutoFilter Exit Sub End If With .Range("A3:N" & LastLig) .AutoFilter .AutoFilter field:=7, Criteria1:=Target End With Nb = .Range("A3:A" & LastLig).SpecialCells(xlCellTypeVisible).Count - 1 If Nb > 0 Then Application.EnableEvents = False .Range("A4:F" & LastLig).SpecialCells(xlCellTypeVisible).Copy Range("A4") .Range("I4:J" & LastLig).SpecialCells(xlCellTypeVisible).Copy Range("G4") .Range("L4:M" & LastLig).SpecialCells(xlCellTypeVisible).Copy Range("J4").PasteSpecial xlPasteValues Application.CutCopyMode = False Application.EnableEvents = True End If .Range("A3").AutoFilter Range("A3").Select End With Range("A3").Select ActiveWorkbook.Worksheets("J").Sort.SortFields.Clear ActiveWorkbook.Worksheets("J").Sort.SortFields.Add Key:=Range("K4:K299"), _ SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("J").Sort.SortFields.Add Key:=Range("B4:B299"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("J").Sort .SetRange Range("A3:L500") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A3").Select End If End If AutoFitSheet End Sub
Apparemment je n'inspire personne, peut-être me suis-je mal expliqué ???
Donc, j'ai une feuille dans laquelle se trouve un tableau de données saisies les unes à la suite des autres, cette feuille se nomme "Général". Ensuite, dans le même classeur j'ai d'autres feuilles dans lesquelles je rapatrie des données selon un critère précis saisi dans la cellule A2. Pour mon exemple, c'est la lettre P, et la feuille se nomme "P", lettre qui se trouve également dans le tableau de la feuille "Général" dans la colonne G. A partir de là, toutes les lignes où il y a un P sont copiées dans le tableau de la deuxième feuille, celle nommée "P". La macro devrait s'arrêter là, mais à la suite de la dernière ligne copiée, elle me met le nombre de ligne copiée et c'est ça que je souhaite supprimer.
Merci par avance pour vos réponse
Amicalement
René
Partager