Deplacer une ligne entiere d'une feuille a une autre

Salut Salut

j'ai passe toute la nuit a chercher une methode...

j'ai une liste de clients dans ma 1ere feuille que je nomme ACHAT. Une fois la transaction d'un client (disons Paul) de ma liste est faite, je voudrais deplacer la ligne contenant ses info vers une autre feuille que je nomme "TERMINE" en selectionnant "Done" dans une liste deroulante.

Please comment faire? quelqu'un a t il une reponse pour moi SVP?

voici le fichier pour etre explicite

Merci

22book3.xlsx (26.35 Ko)

Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim n%
    If Target.Row > 6 And Target.Column = 15 Then
        With Worksheets("TERMINE")
            n = .Cells(.Rows.Count, 15).End(xlUp).Row + 1
            If n < 7 Then n = 7
            .Range("A" & n).Resize(, 15).Value = Me.Range("A" & Target.Row).Resize(, 15).Value
        End With
        Application.EnableEvents = False
        Me.Rows(Target.Row).Delete
        Application.EnableEvents = True
    End If
End Sub

A placer dans le module de la feuille ACHAT.

Attention ! Dès que Done est inscrit le transfert est opéré...

Cordialement.

Salut MFerrand

Merci pour ton aide. c'est formidable...

il est vrais que je ne me connais pas en VBA, j'ai neanmoins lu avant d'appliquer. je constate que, quel que soit ce que je selectionne dans le menu deroulant (Done, No yet ...) le transfert de la ligne est effectue.

une autre problematique, c'est que je ne suis plus capable de ramener la ligne transferee Comment faire?.

Pourriez vous jetter un coup d'oeil? voici le fichier en piece jointe

Merci

23book3-1.xlsx (25.90 Ko)

C'est moi qui suis confus !

J'ai juste oublié de mettre la condition "Done" !!!

Je l'ai pourtant pensée, c'était l'objectif, mais ça n'a pas suffi...

Je l'ajoute et te la remet.


Voilà :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim n%
    If Target.Row > 6 And Target.Column = 15 Then
        If Target.Value = "Done" Then
            With Worksheets("TERMINE")
                n = .Cells(.Rows.Count, 15).End(xlUp).Row + 1
                If n < 7 Then n = 7
                .Range("A" & n).Resize(, 15).Value = Me.Range("A" & Target.Row).Resize(, 15).Value
            End With
            Application.EnableEvents = False
            Me.Rows(Target.Row).Delete
            Application.EnableEvents = True
        End If
    End If
End Sub

NB- Il te faut enregistrer ton fichier en .xlsm dès lors qu'il contient des macros.

Tu veux pouvoir ramener les lignes qui auraient été déportées par erreur ?

Yessss cool ca marche 8)

Avec vous, j'apprends beaucoup Merciii!

Par contre, je n'arrive pas a ramener les lignes comme il faut. j'ai reproduit la formule en changeant quelques donnees.

Voici le phenomene qui se produit: lorsque je ramene la ligne (de "TERMINE" pour "ACHAT"), cette ligne revient a sa position initiale et surpprime toutes les lignes qui sont en dessous d'elle.

comment faire please?

voici le script utilise:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim n%

If Target.Row > 6 And Target.Column = 15 Then

If Target.Value = "Back TMD" Then

With Worksheets("ACHAT")

n = .Cells(.Rows.Count, 15).End(xlUp).Row + 1

If n < 7 Then n = 7

.Range("A" & n).Resize(, 15).Value = Me.Range("A" & Target.Row).Resize(, 15).Value

End With

Application.EnableEvents = False

Me.Rows(Target.Row).Delete

Application.EnableEvents = True

End If

End If

End Sub

en pj le nouveau fichier

15book3-2.xlsm (32.48 Ko)

Bonjour,

Pour avoir le "symétrique" ramener dans ACHAT, tu reprends la même procédure et tu la colles sur le module de la feuille TERMINE.

Et juste deux modifications à faire :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim n%
    If Target.Row > 6 And Target.Column = 15 Then
        If Target.Value <> "Done" Then
            With Worksheets("ACHAT")
                n = .Cells(.Rows.Count, 15).End(xlUp).Row + 1
                If n < 7 Then n = 7
                .Range("A" & n).Resize(, 15).Value = Me.Range("A" & Target.Row).Resize(, 15).Value
            End With
            Application.EnableEvents = False
            Me.Rows(Target.Row).Delete
            Application.EnableEvents = True
        End If
    End If
End Sub

Elles sont surlignées : ACHAT remplace TERMINE, logique ! Et au lieu de = "Done", tu mets <>

Et pour la déclencher, il suffit d'enlever Done dans la dernière colonne.

Si Done => TERMINE ; si pas Done => ACHAT.

Cordialement.

salut MFerrand

je me rends compte que, avec cet encodage, le deplacement de la ligne de "ACHAT" vers "TERMINE" vice versa entraine la suppression de la ligne ou elle est transferee. Ainsi, je perds les donnees de certains clients en dessous de la ligne.

il serait mieux de faire une insertion. j'ai essaye changer, mais je n'y arrive pas.

please help me

En principe, pas de perte ! une ligne est tranférée et effacée telle qu'elle est, elle se trouve toujours donc sur une des deux feuilles !

Tu peux la balader à plusieurs reprises d'une feuille à l'autre, elle ne devrait subir aucune modification, ni interférer avec les lignes restantes, étant à chaque fois ajoutée à la fin.

Rechercher des sujets similaires à "deplacer ligne entiere feuille"