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
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 SubA 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
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 SubNB- 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
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 SubElles 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.