VBA Couper/Coller les valeurs

Bonjour à tous,

Je n'arrive pas à modifier ma VBA pour coller uniquement les valeurs de ma feuille 1 (En cours) vers la feuille 2 (Clos) . Je souhaite faire coller les valeurs car dans ma feuille 1, certaines valeurs de cellule résultent d'une formule et lors d'un couper/coller basique, la formule n'est plus cohérente sur ma feuille 2.

Pour détailler rapidement le contexte de cette VBA : elle s’exécute lorsqu'une valeur précise ("Expédié") en saisie en colonne H (à partir de H7). Si cette condition est remplie, je dois couper la totalité de ma ligne (A7 --> O7) pour la coller sur ma feuille2. Ainsi je garde en feuille1, uniquement les lignes pour lesquelles des actions sont en cours.

Les colonnes A, B et O résultent d'une formule conditionnelle.

La colonne H est gérée en validation de données qui provient d'une liste.

Voici le VBA actuel :

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [H7:H75]) Is Nothing Then Exit Sub
If Target.Value = "Expédié" Then
If [Clos!B4] = "" Then
ligne = 7
Else
ligne = Sheets("Clos").Cells(Rows.Count, 2).End(xlUp).Row + 1
End If
Range(Cells(Target.Row, "A"), Cells(Target.Row, "O")).Copy _
Sheets("Clos").Cells(ligne, 1)
Application.EnableEvents = False
Range(Cells(Target.Row, "A"), Cells(Target.Row, "O")).Delete xlShiftUp
Application.EnableEvents = True
End If
End Sub

Si besoin, je vous mettrai le fichier en PJ.

Merci d'avance pour vos aides précieuses.

Cordialement.

Julien

bonjour et bienvenu,

sans fichier,c'est difficile à dire, mais vous avez besoin d'un "PasteSpecial", lequel, cela dépend de vos préférences.

Attention, ce sont 2 lignes au lieu de 1!!

Range(Cells(Target.Row, "A"), Cells(Target.Row, "O")).Copy 
Sheets("Clos").Cells(ligne, 1).pastespecial xlvalues

https://learn.microsoft.com/fr-fr/office/vba/api/excel.range.pastespecial

Merci beaucoup BsAlv ça fonctionne parfaitement votre solution.

Petite demande supplémentaire : comment faire pour que les données soient coller sur la ligne suivante ? Lorsque je saisis plusieurs lignes, dès que la condition "Expédié" est vraie, la ligne est toujours coller sur la ligne 7 alors que je souhaite conserver toutes mes lignes dans la feuille2 afin d'avoir une archive.

8fichier-test.xlsm (29.32 Ko)

Je sais pas si ma demande est assez claire.

re,

vous utilisez 2 tableaux structurés, donc, au début ils sont plus difficile, mais comme ça

Private Sub Worksheet_Change(ByVal Target As Range)
     Dim c, cClos, cEC, i
     With Me.ListObjects("Tableau1")  'ce tableau en "En Cours"
          If .ListRows.Count = 0 Then Exit Sub     'tableau est vide
          Set c = Intersect(.ListColumns("Etat de la commande").DataBodyRange, Target) 'cellules modifiées dans cette colonne
          If c Is Nothing Then Exit Sub
          If c.Cells.Count > 1 Then MsgBox "plusieurs cellules", vbExclamation: Exit Sub 'encore possible plus tard ....

          If c.Value = "Expédié" Then
               i = c.Row - .HeaderRowRange.Row 'numéro du listrow "Expédié"
               Set cClos = Sheets("clos").ListObjects("Tableau7").ListRows.Add.Range     'ajouter une nouvelle ligne en dessous ce tableau
               .ListRows(i).Range.Copy 'copier ce lsitrow
               cClos.PasteSpecial xlValues     'coller dans la nouvelle listrow

               Application.EnableEvents = False
               .ListRows(i).Delete 'delete votre listrow dans "En Cours"
               Application.EnableEvents = True
          End If
     End With
End Sub

Re,

J'ai toujours la même anomalie à savoir que les lignes s'écrasent et ne s'ajoutent pas à la suite.

re,

impossible ??? Vous êtes sûr ?

Oui oui je viens de tester et ça me fait toujours la même chose, ça écrase la première ligne.

Je vous laisse tester de votre côté avec le fichier que je vous ai joints voir si on a le même résultat.

Merci beaucoup en tout cas pour votre patience et votre aide.

Rechercher des sujets similaires à "vba couper coller valeurs"