Couper et coller des lignes VBA

Justine56

XLDnaute Nouveau
Bonjour à tous,

Je travaille actuellement sur une macro qui pourrait me permettre de couper et coller des lignes dans une feuille nommée "Actions clôturées à mettre DU" dont les actions sont "clôturées" afin de les voir disparaître de mon plan d'action en cours (feuille nommée "Plan d'action").
Je pense que je ne suis pas loin d'y arriver car le code que j'ai écris me copie la ligne dans mon autre feuille cependant elle reste présente dans mon tableau de base "Plan d'action" et je dois donc les supprimer manuellement.

Voici le code :
VB:
Sub Essai_macro_export_actions_cloturées()
'
' Essai_macro_export_actions_cloturées Macro
'
Sheets("Plan d'action").Range("$B$8:$I$500").AutoFilter Field:=8, Criteria1:="<>"
    Range("A10:I500" & Range("I65563").End(xlUp).Row).Select
    Selection.Copy
    Sheets("Actions clôturées à mettre DU").Select
    Range("A1048576").End(xlUp).Offset(1, 0).Select
    ActiveSheet.Copy
    Sheets("Plan d'action").Range("$B$8:$I$500").AutoFilter Field:=8
    ActiveWindow.SmallScroll Down:=-9
    Range("A8:A9").Select
MsgBox "Déplacement et suppression du ou des action(s) clôturée(s)."
End Sub

Pouvez-vous m'indiquer ce qu'il me manque pour que les lignes soient coupées et non copiées ? Et comment faire en sorte que les lignes vides présentes dans mon tableau "Plan d'action" soient également supprimées ?

Je vous remercie d'avance de votre aide :)
 

Jacky67

XLDnaute Barbatruc
Bonjour à tous,

Je travaille actuellement sur une macro qui pourrait me permettre de couper et coller des lignes dans une feuille nommée "Actions clôturées à mettre DU" dont les actions sont "clôturées" afin de les voir disparaître de mon plan d'action en cours (feuille nommée "Plan d'action").
Je pense que je ne suis pas loin d'y arriver car le code que j'ai écris me copie la ligne dans mon autre feuille cependant elle reste présente dans mon tableau de base "Plan d'action" et je dois donc les supprimer manuellement.

Voici le code :
VB:
Sub Essai_macro_export_actions_cloturées()
'
' Essai_macro_export_actions_cloturées Macro
'
Sheets("Plan d'action").Range("$B$8:$I$500").AutoFilter Field:=8, Criteria1:="<>"
    Range("A10:I500" & Range("I65563").End(xlUp).Row).Select
    Selection.Copy
    Sheets("Actions clôturées à mettre DU").Select
    Range("A1048576").End(xlUp).Offset(1, 0).Select
    ActiveSheet.Copy
    Sheets("Plan d'action").Range("$B$8:$I$500").AutoFilter Field:=8
    ActiveWindow.SmallScroll Down:=-9
    Range("A8:A9").Select
MsgBox "Déplacement et suppression du ou des action(s) clôturée(s)."
End Sub

Pouvez-vous m'indiquer ce qu'il me manque pour que les lignes soient coupées et non copiées ? Et comment faire en sorte que les lignes vides présentes dans mon tableau "Plan d'action" soient également supprimées ?

Je vous remercie d'avance de votre aide :)
Bonjour,
Cela pourrait ressembler à ceci
VB:
Sub Essai_macro_export_actions_cloturées()
    Dim plage
    ' Essai_macro_export_actions_cloturées Macro
    Set plage = Sheets("Plan d'action").Range("$B$8:$I$500")
    plage.AutoFilter Field:=8, Criteria1:="<>"
    Set plage = plage.Offset(1).Resize(plage.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    With Sheets("Actions clôturées à mettre DU")
        plage.Copy .Range("a" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1)
    End With
    plage.AutoFilter
    plage.EntireRow.Delete
    MsgBox "Déplacement et suppression du ou des action(s) clôturée(s)."
End Sub

**Non testé par défaut de classeur
 

Justine56

XLDnaute Nouveau
Bonjour,
Cela pourrait ressembler à ceci
VB:
Sub Essai_macro_export_actions_cloturées()
    Dim plage
    ' Essai_macro_export_actions_cloturées Macro
    Set plage = Sheets("Plan d'action").Range("$B$8:$I$500")
    plage.AutoFilter Field:=8, Criteria1:="<>"
    Set plage = plage.Offset(1).Resize(plage.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    With Sheets("Actions clôturées à mettre DU")
        plage.Copy .Range("a" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1)
    End With
    plage.AutoFilter
    plage.EntireRow.Delete
    MsgBox "Déplacement et suppression du ou des action(s) clôturée(s)."
End Sub

**Non testé par défaut de classeur

Bonjour,

Il y a un problème sur la ligne :
plage.Copy .Range("a" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1)
Il me dit que "erreur définie par l'application ou par l'objet". Je n'arrive pas à comprendre par quoi je dois remplacer les "a" et "A" sur cette ligne.

Je vous remercie pour votre retour :)
 

Jacky67

XLDnaute Barbatruc
Re..
Cette instruction copy la plage filtrée "Plage" dans la plage de la feuille "Actions clôturées à mettre DU" (défini dans With Sheets) à la première cellule vide de la colonne A
Cela peut-être testé par
VB:
MsgBox .Range("a" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1).Address

Voir aussi le nom de la feuille, il semble bizarre.
 
Dernière édition:

Justine56

XLDnaute Nouveau
Bonjour,

Je comprend pourquoi ça ne fonctionne pas.. s'il me cherche la première cellule vide dans la colonne A de la feuille "Actions clôturées à mettre DU" il tombe sur mon en-tête de tableau de A1 à A9.
Comment écrire le code pour qu'il m'insère la plage de cellule copiée à partir de la colonne A10 en prenant la première cellule vide ?

Je vous remercie de votre retour :)
 

Justine56

XLDnaute Nouveau
Re..
Cette instruction copy la plage filtrée "Plage" dans la plage de la feuille "Actions clôturées à mettre DU" (défini dans With Sheets) à la première cellule vide de la colonne A
Cela peut-être testé par
VB:
MsgBox .Range("a" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1).Address

Voir aussi le nom de la feuille, il semble bizarre.

Bonjour,

Alors j'ai fais quelques modifications et le code fonctionne très bien à un petit détail prés.. il me copie les lignes à partir de la ligne A29 et je ne comprend pas pourquoi :eek:

Voici le code actuel :
VB:
Sub Essai_macro_export_actions_cloturées()
'
' Essai_macro_export_actions_cloturées Macro
Dim plage
    ' Essai_macro_export_actions_cloturées Macro
    Set plage = Sheets("Plan d'action").Range("$A$8:$I$500")
    plage.AutoFilter Field:=9, Criteria1:="<>"
    Set plage = plage.Offset(1).Resize(plage.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    With Sheets("Actions clôturées à mettre DU")
        plage.Copy .Range("a" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1)
    End With
    plage.AutoFilter
    plage.EntireRow.Delete

MsgBox "Déplacement et suppression du ou des action(s) clôturée(s)."
End Sub

Merci d'avance de votre aide :)
 

Jacky67

XLDnaute Barbatruc
Bonjour,

Alors j'ai fais quelques modifications et le code fonctionne très bien à un petit détail prés.. il me copie les lignes à partir de la ligne A29 et je ne comprend pas pourquoi :eek:

Voici le code actuel :
VB:
Sub Essai_macro_export_actions_cloturées()
'
' Essai_macro_export_actions_cloturées Macro
Dim plage
    ' Essai_macro_export_actions_cloturées Macro
    Set plage = Sheets("Plan d'action").Range("$A$8:$I$500")
    plage.AutoFilter Field:=9, Criteria1:="<>"
    Set plage = plage.Offset(1).Resize(plage.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    With Sheets("Actions clôturées à mettre DU")
        plage.Copy .Range("a" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1)
    End With
    plage.AutoFilter
    plage.EntireRow.Delete

MsgBox "Déplacement et suppression du ou des action(s) clôturée(s)."
End Sub

Merci d'avance de votre aide :)
Re..
Sans voir le classeur avec cette erreur, il sera difficile de donner suite.
 

Justine56

XLDnaute Nouveau
Finalement j'ai trouvé le problème qui venait de la ligne suivante du code :
plage.Copy .Range("a" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1)
Il ne voulait pas me coller mes lignes dans mon tableau car il y a des en-têtes à mon tableau excel.
Pour cela j'ai donc modifié totalement cette ligne et j'obtiens le code suivant :
VB:
Sub Essai_macro_export_actions_cloturées()
'
' Essai_macro_export_actions_cloturées Macro
Dim plage
    ' Essai_macro_export_actions_cloturées Macro
    Set plage = Sheets("Plan d'action").Range("$A$8:$I$500")
    plage.AutoFilter Field:=9, Criteria1:="<>"
    Set plage = plage.Offset(1).Resize(plage.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
    With Sheets("Actions clôturées à mettre DU")
        plage.Copy .Range("A1048576").End(xlUp).Offset(1, 0)
    End With
    plage.AutoFilter
    plage.EntireRow.Delete

MsgBox "Déplacement et suppression du ou des action(s) clôturée(s)."
End Sub

Je vous remercie de vos réponses qui m'ont bien aidé :)

Bonne journée !
 

Jacky67

XLDnaute Barbatruc
Re..
Ces deux instructions
plage.Copy .Range("A1048576").End(xlUp).Offset(1, 0)
plage.Copy .Range("a" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1)
Font exactement la même chose
La première n'est valable qu'à partir de Xl 2007 :rolleyes:
La deuxième, toute version :)
 

Justine56

XLDnaute Nouveau
D'accord alors dans ce cas je ne comprend pas d'où pouvait provenir le problème avec le premier code. Surtout que j'ai une version 2013 cela aurait dû tout aussi bien fonctionner o_O
En tout cas la macro fonctionne à merveille, merci pour votre aide :)

Bonne journée à vous !
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa