Déplacer une ligne sous conditions vers une autre page
Bonjour,
J'ai besoin de me faire une macro qui me permettrait de déplacer une ligne d'un tableau vers un autre tableau sur une autre feuille une fois la condition rempli.
Je sais que la demande a été posée plusieurs fois, mais je n'ai pas réussi à adapter les macros proposées.
J'ai 2 tableaux comptas, l'un "a payer" et l'autre "payé", j'aimerai qu'une fois la date de payement est renseignée sur le tableau "a payer", je puisse déplacer la ligne vers le second tableau.
J'avais réussi à trouver une macro qui fonctionnait bien mais depuis peu elle ne fonctionne plus, vu que je l'ai copié je ne la comprends pas et donc ai du mal à trouver le problème.
Sub Macro2()
Range("I2:I999").Select
ActiveWindow.SmallScroll ToRight:=0
ActiveWorkbook.Worksheets("A PAYER").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("A PAYER").Sort.SortFields.Add Key:=Range("I2:I999") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("A PAYER").Sort.SortFields.Add Key:=Range("G2:G999") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("A PAYER").Sort
.SetRange Range("A2:K999")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B3").Select
End SubMerci de votre aide
Bonne journée
Cdt
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
1/:je ne comprend pas I2:I999 ?
2: pour la Macro 3 peut-être de "PAYER" au lieu de "feuille2" et with & end with
Sub Macro3()
ActiveCell.EntireRow.Select
Selection.Cut
With Sheets("A PAYER")
ActiveSheet.Range("C:C").End(xlDown)(2).EntireRow.Select
Activatesheet.Paste
Selection.End(xlToLeft).Select '(être sûr de se trouver dans la 1e col.)
Rows(ActiveCell.Row).Select '(sélection de la ligne à déplacer)
Selection.Cut '(couper la ligne)
Selection.End(xlDown).Select '(se déplacer en fin de tableau, dernière ligne avec contenu)
Rows(ActiveCell.Row).Offset(1, 0).Select '(descendre d'1 ligne)
ActiveSheet.Paste '(coller)
Selection.End(xlUp).Select '(remonter jusqu'à la 1e ligne du tableau, celle juste après celle qu'on vient de vider)
Rows(ActiveCell.Row).Offset(-1, 0).Select '(on remonte d'1 ligne)
Selection.Delete Shift:=xlUp '(on la détruit)
Selection.End(xlToLeft).Select '(se trouver dans la 1e col.)
End With
End SubJ'pense que, tu as sans doute ajouter/supprimer des colonnes
crdlt,
André
Bonjour,
Une proposition à étudier.
Lorsque l'on active la feuille PAYE, les factures payées sont copiées dans cet onglet et supprimées de l'onglet A PAYER
(doublons inutiles ?).
Cdlt.
Private Sub Worksheet_Activate()
Dim lo As ListObject, lo2 As ListObject
Dim rCell As Range, rng As Range, rng2 As Range
Dim lCol As Integer: lCol = 7
Set lo = Me.ListObjects(1)
With lo
If .InsertRowRange Is Nothing Then
Set rCell = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
Else
Set rCell = .InsertRowRange.Cells(1)
End If
End With
Set lo2 = Worksheets("A PAYER").ListObjects(1)
With lo2
If .ShowAutoFilter Then .AutoFilter.ShowAllData
.Range.AutoFilter field:=lCol, Criteria1:="<>"
With .AutoFilter.Range
On Error Resume Next
Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
End With
End With
If Not rng Is Nothing Then
Set rng2 = lo2.AutoFilter.Range
rng2.Offset(1, 0).Resize(rng2.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).Copy Destination:=rCell
Application.DisplayAlerts = False
rng2.Offset(1, 0).Resize(rng2.Rows.Count - 1).Delete
Application.DisplayAlerts = True
End If
lo2.Range.AutoFilter field:=lCol
End Sub