1 2 3 4 5
| Sheets("Feuil1").Cells(NoDeLaDernLig + 1, 3).Select
'On colle les données dans la page active
'ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteAllExceptBorders |
La colonne dans laquelle tu colles est définie ici (en l'occurence la colonne 3 donc la colonne C). Si tu veux coller dans une autre colonne, il suffit de changer le numéro.
Au passage, il est inutile de sélectionner ta cellule de destination et de faire le collage sur la cellule de destination. C'est ce que fait l'enregistreur de macro (vu que tu cliques sur la cellule avant de coller) mais en VBA ça peut se raccourcir comme ça:
Sheets("Feuil1").Cells(NoDeLaDernLig + 1, 3).PasteSpecial Paste:=xlPasteAllExceptBorders
Pour ton problème d'évènement modification de cellules/clic sur bouton, il n'y a évidemment pas d'évènement correspondant dans VBA (qui ne gère que des évènements ponctuels sur un seul élément pour ce que j'en sais).
Une solution à ton problème est de déclarer un tableau de taille dynamique avec une portée globale qui va contenir les valeurs des cellules modifiées (par exemple, mais si tu veux copier plusieurs cellules, il vaudra mieux stocker directement les 'Range' si c'est possible):
1 2
| Public monTableau() As Variant 'si le contenu de tes cellules est toujours du même type (chaine de caractères, entiers, flottants) adapte le type en conséquence, c'est plus propre
Redim monTableau(0 To 0) 'je choisis d'indicer à partir de 0 mais en VBA tu peux choisir ce que tu veux |
Avec ce tableau accessible depuis n'importe quelle objet, tu peux décomposer le problème en 2 parties:
1°/ Sur l'évènement 'Worksheet_change", rajouter un élément au tableau:
Redim Preserve monTableau (0 To UBound(monTableau)+1) 'si tu as choisi d'indicer les éléments en démarrant de 0, UBound() est une fonction renvoyant le plus grand indice du tableau
et stocke la valeur de la cellule modifiée
2°/Sur l'évènement 'CommandButton_Click', tu copies une à une toutes les valeurs stockées dans le tableau en n'oubliant pas d'effacer le contenu du tableau une fois que c'est fini:
1 2 3 4 5
| For i=0 To UBound(monTableau)
Sheets("Feuil1").Cells(...).Value=monTableau(i)
Next i
Erase monTableau |
Partager