Macro pour coller à la suite.

Résolu
François87 -  
 François87 -
Bonjour,

Dans un classeur excel avec un première feuille pour rentrer des données, en validant, ces données doivent être copiées sur une autre feuille à la suite des données précédentes.

J'essaye de réaliser une macro qui quand je clique sur "valider", copie les cellules voulues dans une autre feuille mais dans la ligne suivante à chaque fois.

J'ai essayé avec ce code :

Sub essai()

Dim wb As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet


Set wb = ThisWorkbook
Set ws1 = wb.Worksheets("DATA INPUT")
Set ws2 = wb.Worksheets("Nuité, PLat, Dessert")



ws2.Range("b1").End(xlDown).Offset(1, 0) = ws1.Range("b8")
ws2.Range("c1").End(xlDown).Offset(1, 0) = ws1.Range("b9")
ws2.Range("d1").End(xlDown).Offset(1, 0) = ws1.Range("b10")
ws2.Range("k1").End(xlDown).Offset(1, 0) = ws1.Range("b15")
ws2.Range("l1").End(xlDown).Offset(1, 0) = ws1.Range("b19")


End Sub

Mais à chaque fois il écrase les données précédemment validées.

D'avance merci pour vos conseils.

PS : Comment faut-il faire pour mettre le classeur en pièce jointe, ce serait plus simple.



A voir également:

1 réponse

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

With ws2
     lig = .Cells.Find("*", , , , , xlPrevious).Row + 1
     .Cells(lig, "B") = ws1.Range("B8")
     '.... la suite
End With

pour les messages suivant

1/
pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
et faire un clic droit sur le lien proposé puis "copier l'adresse du lien" et coller dans le message de réponse

2/
mettre tes codes entre les balises <> du bouton à droite en haut du message. Merci d'avance
0
françois87
 
Bonjour Michel,

Tout d'abord merci de votre réponse rapide. J'ai modifié ma macro en suivant vos conseils et cela me donne :

Sub essai ()
Dim wb As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet


Set wb = ThisWorkbook
Set ws1 = wb.Worksheets("DATA INPUT")
Set ws2 = wb.Worksheets("Nuité, PLat, Dessert")



With ws2
     lig = .Cells.Find("*", , , , , xlPrevious).Row + 1
     .Cells(lig, "B") = ws1.Range("B8")
End With

With ws2
    lig = .Cells.Find("*", , , , , xlPrevious).Row + 1
    .Cells(lig, "c") = ws1.Range("b9")
End With

With ws2
    lig = .Cells.Find("*", , , , , xlPrevious).Row + 1
    .Cells(lig, "d") = ws1.Range("b10")
End With

With ws2
    lig = .Cells.Find("*", , , , , xlPrevious).Row + 1
    .Cells(lig, "k") = ws1.Range("b15")
End With

With ws2
    lig = .Cells.Find("*", , , , , xlPrevious).Row + 1
    .Cells(lig, "l") = ws1.Range("b19")
End With



End Sub


Mais cela ne fonctionne pas car le collage se fait en dessous de mon tableau et décalé sur chaque colonne..

Veuillez trouver ci-joint le classeur sur lequel je travail :
http://cjoint.com/?ALqj2Dv4Kcl

D'avance merci pour vos conseils.
François
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,
Salut michel,
Excusez l'incruste...
Il est tout à fait normal que ça te décale tes données puisque pour chaque colonne tu recalcules la dernière ligne saisie. L'exemple de michel concernait une seule donnée, il suffit de mettre les autres dessous dans le même bloc with sans recalculer le numéro de la ligne :
With ws2
     lig = .Cells.Find("*", , , , , xlPrevious).Row + 1
     .Cells(lig, "B") = ws1.Range("B8")
    .Cells(lig, "c") = ws1.Range("b9")
    .Cells(lig, "d") = ws1.Range("b10")
    .Cells(lig, "k") = ws1.Range("b15")
    .Cells(lig, "l") = ws1.Range("b19")
End With

ça devrait le faire...
0
françois87
 
Une fois de plus merci pour la rapidité de la réponse. J'avais effectivement mal compris comment cela fonctionne, maintenant il me copie tout sur la même ligne mais il commence en dessous de mon tableau (la dernière ligne du tableau étant utilisée. Est-il possible que la macro prenne en compte la première cellule vide à l'intérieure du tableau et non à la fin du tableau.
D'avance merci
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Je vois ce que tu veux dire. Cependant, ne voyant pas l'intérêt de faire des "tableaux" je ne vois pas de différence...
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Sinon, le code pour la première ligne vide colonne A :
lig = Range("A1").End(xlDown).Row + 1
A la condition expresse que toutes les cellules soient "remplies"...
0