XL 2016 Macro pour renvoi d'une ligne dans un autre fichier

sallandm

XLDnaute Nouveau
Bonjour à tous !!!!
J'ai un fichier excel qui liste tout un stock de vetement.
En colonne E, j'ai la quantité acheté et en colonne F, je vais indiquer la quantité vendue.
A chaque fois que je fais une vente, j'aimerai que la ligne concernée soit copiée dans un autre onglet que j'appellerai "vente"

Par exemple, je mets 1 en F7 et je souhaite que la ligne entière soit collée dans un autre onglet (j'aimerai aussi que la date du jour apparaisse soit enregistrée pour chaque ligne copiée)
Si 10 jours après , je vends le meme article, je souhaite que cette ligne soit encore copiée dans l'onglet vente mais avec cette fois ci la nouvelle date (date du jour de vente)

Et pour compliquer un peu plus, j'ai plusieurss onglets (un pour chaque fournisseur)

Est ce que vous pensez que c'est faisable ??
MErci encore a tous !!!!
 

Pièces jointes

  • Book2.xlsx
    25.2 KB · Affichages: 10

sallandm

XLDnaute Nouveau
Bonjour à tous,

Je ne sais vraiment rien faire sous VBA mais j'ai essayé de me casser la tête pour commencer quelque chose...
Et je ne vous cacherez pas que je me suis largement inspiré de ce que j'ai pu trouvé en essayant de comprendre un minimum !
icon_biggrin.gif

mais j'ai du mal ... la preuve en est , je suis un peu coincé pour la suite.....
(cf fichier joint)

Ma macro est :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim wsCopy As Worksheet
Dim rngCopy As Range
Dim wsPaste As Worksheet
Dim rngPaste As Range

If Target.Column = 6 Then

If Target.Value = "1" Then
Set wsCopy = ActiveSheet
Set wsPaste = ActiveWorkbook.Worksheets("Ventes")
Set rngCopy = wsCopy.Range("a" & Target.Row & ":i" & Target.Row)
rngCopy.Select
Set rngPaste = wsPaste.Range("b" & wsPaste.Range("b" & Rows.Count).End(xlUp).Row + 1)

rngCopy.Copy
rngPaste.PasteSpecial

Application.CutCopyMode = False
Set rngCopy = Nothing
Set rngPaste = Nothing
Set wsCopy = Nothing
Set wsPaste = Nothing
End If


End If
End Sub

Le problème c'est que la macro me copie les 9 premières cellules de la ligne modifiée (la modif consiste à mettre un 1 en colonne 6)
J'aimerai qu'elle ne me copie que les 8 premières cellules de la ligne.
De plus je voudrai aussi que ça marche pour n'importe quel chiffre ! (une solution pourrait etre de copier la macro pour chaque chiffre mais c'est pas très propre !)
Enfin la ligne est collée dans la cellule B de la dernière ligne libre de la feuille "ventes" et j'aimerai que la date du jour soit indiquée en meme temps dans la cellule A de cette même dernière ligne.

Pouvez vous m'aider ?
icon_rolleyes.gif
icon_rolleyes.gif
icon_rolleyes.gif


Merki !!!!
 

Pièces jointes

  • Book10.xlsx
    19.6 KB · Affichages: 3

Temjeh

XLDnaute Accro
Supporter XLD
Bonjour
Un peu de patience, certain font la sieste!
1033591


Si j'ai compris, voici le code.
VB:
If ActiveCell.Column = 6 Then
    If ActiveCell.Value = "" Then Exit Sub 'Si elle est vide, EXIT
    Set wsCopy = ActiveSheet
    Set wsPaste = ActiveWorkbook.Worksheets("Ventes")
    Set rngCopy = wsCopy.Range("a" & ActiveCell.Row & ":H" & ActiveCell.Row) ' Mettre H pour 8ème colonne
    rngCopy.Select
    Set rngPaste = wsPaste.Range("b" & wsPaste.Range("b" & Rows.Count).End(xlUp).Row + 1)
   
    rngCopy.Copy
    rngPaste.PasteSpecial
    Worksheets("Ventes").Range("A" & wsPaste.Range("b" & Rows.Count).End(xlUp).Row) = Date 'Ta date
   
    Application.CutCopyMode = False
    Set rngCopy = Nothing
    Set rngPaste = Nothing
    Set wsCopy = Nothing
    Set wsPaste = Nothing
End If
/CODE]

A+
 

Pièces jointes

  • Screenshot_1.png
    Screenshot_1.png
    422.8 KB · Affichages: 7
Dernière édition:

Temjeh

XLDnaute Accro
Supporter XLD
Aussi moi perso je ne suis pas très fort sur les set range, set plage et la déclaration des variables.
Désolé pour les puristes.

Juste ceci est bon:
VB:
If ActiveCell.Value = "" Then Exit Sub 'Si elle est vide, EXIT
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 8)).Copy Destination:=Sheets("ventes").Range("B" & Sheets("ventes").Range("B" & Rows.Count).End(xlUp).Row + 1) 'Cells(ActiveCell.Row, 8), le 1 et le 8 sont tes colonnes selectionnées
Worksheets("Ventes").Range("A" & Worksheets("Ventes").Range("b" & Rows.Count).End(xlUp).Row) = Date 'Ta date

Aussi pour plus pratique en doubleclic ça serait encore mieux:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = true
...le code
End Sub

A+
 

Discussions similaires

Réponses
25
Affichages
640

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83