Cheyenne_2021
XLDnaute Junior
Ce que je cherche à faire :
Dans un onglet, chaque ligne entière avec le statut « ASUPP », la copier et la coller dans un autre onglet . Et le « coller » ne fonctionne pas. J'ai une erreur 438 sur mon Paste.
J’ai essaye de faire des set comme quelqu’un l’a conseillé sur ce forum, mais ça ne marche pas toujours. Ca marche avec le with mais je n’ai pas réussi à le faire fonctionner pour le Paste.
Voici ma macro :
Sub Supprimer_ASUPP()
Dim r As Integer ' indice des lignes dans le tableau T_suivi_DI
Dim sup As Integer ' indice des lignes dans le tableau des tw supprimés
Dim F_src As Worksheet
Dim F_cbl As Worksheet
Dim T_src As ListObject
Dim T_cbl As ListObject
Call Deverrouiller_feuille(ActiveWorkbook.Worksheets("1- Suivi des DI & avis n+1"))
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Di_Ligne = Range("T_suiviDi").Rows.Count
Set F_src = Worksheets("1- Suivi des DI & avis n+1")
Set F_cbl = Worksheets("7-TW supprimés")
Set T_src = F_src.ListObjects("T_SuiviDi")
Set T_cbl = F_cbl.ListObjects("T_SUPP") ' =Worksheets("7-TW supprimés").ListObject("T_SUPP")
'For r = 1 To Di_Ligne
For r = 16 To 26
col_statut = Worksheets("1- Suivi des DI & avis n+1").ListObjects("T_SuiviDi").ListColumns("Statut").Index
col_num = Worksheets("1- Suivi des DI & avis n+1").ListObjects("T_SuiviDi").ListColumns("NumL").Index
If Worksheets("1- Suivi des DI & avis n+1").ListObjects("T_SuiviDi").DataBodyRange(r, col_statut).Value = "ASUPP" Then
Num_S = Worksheets("1- Suivi des DI & avis n+1").ListObjects("T_SuiviDi").DataBodyRange(r, col_num).Value
Worksheets("1- Suivi des DI & avis n+1").Range("T_SuiviDi").Rows(r).Copy
With F_cbl
derniere_ligne = Range("T_SUPP").Rows.Count
.Select
.Range("T_SUPP").Rows(derniere_ligne).Select
MsgBox ("ligne suiviDI : " & r)
MsgBox ("derniere ligne T_SUPP : " & derniere_ligne)
MsgBox ("nUML : " & Num_S)
' Selection.ListObject("T_SUPP").ListRows.Add (derniere_ligne)
.Range("T_SUPP").ListObject.ListRows.Add (derniere_ligne)
'Selection.EntireRow.Insert Shift:=xlUp
'T_cbl.ListRows(derniere_ligne).PasteSpecial Paste:=xlPasteValues, Paste:=xlPasteFormats
Worksheets("7-TW supprimés").Range("T_SUPP").ListObject.ListRows(derniere_ligne).PasteSpecial Paste:=xlPasteValues, Paste:=xlPasteFormats : Erreur 438
' Worksheets("7-TW supprimés").Range("T_SUPP").PasteSpecial Paste:=xlPasteValues, Paste:=xlPasteFormats
' T_cbl.PasteSpecial
End With
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Call Verouiller_feuille(ActiveWorkbook.Worksheets("1- Suivi des DI & avis n+1"))
End Sub
Je me mélange aussi les pinceaux : J’utilise maintenant beaucoup les tableaux structurés, donc j’essaye d’utiliser les ListObjects mais parfois Range marche mieux et je ne sais pas pourquoi.
Pourriez-vous m’expliquer la différence entre :
PS : Je ne peux pas mettre mon fichier, il est trop lourd.
Dans un onglet, chaque ligne entière avec le statut « ASUPP », la copier et la coller dans un autre onglet . Et le « coller » ne fonctionne pas. J'ai une erreur 438 sur mon Paste.
J’ai essaye de faire des set comme quelqu’un l’a conseillé sur ce forum, mais ça ne marche pas toujours. Ca marche avec le with mais je n’ai pas réussi à le faire fonctionner pour le Paste.
Voici ma macro :
Sub Supprimer_ASUPP()
Dim r As Integer ' indice des lignes dans le tableau T_suivi_DI
Dim sup As Integer ' indice des lignes dans le tableau des tw supprimés
Dim F_src As Worksheet
Dim F_cbl As Worksheet
Dim T_src As ListObject
Dim T_cbl As ListObject
Call Deverrouiller_feuille(ActiveWorkbook.Worksheets("1- Suivi des DI & avis n+1"))
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Di_Ligne = Range("T_suiviDi").Rows.Count
Set F_src = Worksheets("1- Suivi des DI & avis n+1")
Set F_cbl = Worksheets("7-TW supprimés")
Set T_src = F_src.ListObjects("T_SuiviDi")
Set T_cbl = F_cbl.ListObjects("T_SUPP") ' =Worksheets("7-TW supprimés").ListObject("T_SUPP")
'For r = 1 To Di_Ligne
For r = 16 To 26
col_statut = Worksheets("1- Suivi des DI & avis n+1").ListObjects("T_SuiviDi").ListColumns("Statut").Index
col_num = Worksheets("1- Suivi des DI & avis n+1").ListObjects("T_SuiviDi").ListColumns("NumL").Index
If Worksheets("1- Suivi des DI & avis n+1").ListObjects("T_SuiviDi").DataBodyRange(r, col_statut).Value = "ASUPP" Then
Num_S = Worksheets("1- Suivi des DI & avis n+1").ListObjects("T_SuiviDi").DataBodyRange(r, col_num).Value
Worksheets("1- Suivi des DI & avis n+1").Range("T_SuiviDi").Rows(r).Copy
With F_cbl
derniere_ligne = Range("T_SUPP").Rows.Count
.Select
.Range("T_SUPP").Rows(derniere_ligne).Select
MsgBox ("ligne suiviDI : " & r)
MsgBox ("derniere ligne T_SUPP : " & derniere_ligne)
MsgBox ("nUML : " & Num_S)
' Selection.ListObject("T_SUPP").ListRows.Add (derniere_ligne)
.Range("T_SUPP").ListObject.ListRows.Add (derniere_ligne)
'Selection.EntireRow.Insert Shift:=xlUp
'T_cbl.ListRows(derniere_ligne).PasteSpecial Paste:=xlPasteValues, Paste:=xlPasteFormats
Worksheets("7-TW supprimés").Range("T_SUPP").ListObject.ListRows(derniere_ligne).PasteSpecial Paste:=xlPasteValues, Paste:=xlPasteFormats : Erreur 438
' Worksheets("7-TW supprimés").Range("T_SUPP").PasteSpecial Paste:=xlPasteValues, Paste:=xlPasteFormats
' T_cbl.PasteSpecial
End With
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Call Verouiller_feuille(ActiveWorkbook.Worksheets("1- Suivi des DI & avis n+1"))
End Sub
Je me mélange aussi les pinceaux : J’utilise maintenant beaucoup les tableaux structurés, donc j’essaye d’utiliser les ListObjects mais parfois Range marche mieux et je ne sais pas pourquoi.
Pourriez-vous m’expliquer la différence entre :
- .cells(L,c).entirerow.copy
- .Range(« tableau »).Rows(l).copy
PS : Je ne peux pas mettre mon fichier, il est trop lourd.