Macro selection de données avec tableau
Bonjour,
Je viens solliciter le forum pour une question qui me travaille l'esprit...
J'ai fais une macro (enregistrement) qui, lorsque l'on clique sur le bouton, va aller copier des données et les collés sur une ligne que l'on appellera historique. L'historique s'incrémente d'une ligne à chaque clique pour y copier les données. Pour cela j'ai créer une ligne historique avec les titres d'items qui m'intéressent
1er cas : j'ai lancé l'enregistrement et j'ai été copié/collé une à une les valeurs dans cette fameuse ligne historique.
en gros j'ai : Date / Produit / LIBELLE TACHE ..................... ça c'est ma ligne de titre
et en dessous je vais copier la date qui correspond, le produit qui correspond etc...
Ces valeurs, issus de formule, sont copié/collé avec collage spécial selon leur valeur (et non formule) pour conserver les données dans l'historique (sinon l'historique prend les valeurs des nouvelles données à chaque fois...). Cette méthode marche.
2ème cas :Avant cela, j'avais procédé différemment, avant de faire mon copier collé, j'ai sélectionné la ligne de titre ainsi qu'une ligne vierge au dessous et j'ai mis sous forme de tableau. J'ai fais mes copiés collés mais cette fois-ci, en activant la macro, cela rajoutait une ligne avec l'ensemble des données mais chaque ligne incrémentée prenait les données de la dernière. En gros l'ensemble de mes lignes historiques existantes prenait les valeurs de la dernière.
En comparant les macros, j'ai remarqué que la seule différence était l'appellation des cellules sélectionnées :
dans le cas ou la macro fonctionnait les cellules étaient de ce type :
Range("B1").Select
Selection.Copy
ActiveWindow.SmallScroll Down:=9
Range("A36").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A16").Select
Application.CutCopyMode = False
Selection.Copy
Range("B36").SelectDans le cas qui ne marchait pas, les données étaient de ce type :
ActiveWindow.SmallScroll Down:=-3
Range("B1").Select
Selection.Copy
ActiveWindow.SmallScroll Down:=6
Range("Tableau2[Date]").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=Falsequelqu'un aurait une explication ?
Mon fichier joint vous présente ce qui marche : il suffit de cliquer sur l'onglet enregistrer
Merci beaucoup
voici le lien :
Bonjour,
à tester,
Sub test1()
dest = Array("B1", "A16", "B16", "A20", "A1", "A1", "F20", "G20", "C7", "J20", "B9", "B11", "B13", "A1", "A1")
Set NewRow = ActiveSheet.ListObjects("Tableau2").ListRows.Add
For i = 1 To ActiveSheet.ListObjects("Tableau2").ListColumns.Count
With NewRow
.Range(i) = Range(dest(i - 1)).Value
If i = 1 Then .Range(i).NumberFormat = "dd/mm/yyyy hh:mm:ss"
End With
Next i
'Tri : montant ou descendant (ascending or descending)
With ActiveWorkbook.Worksheets("Budget").ListObjects("Tableau2").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("Tableau2[[#All],[DATE]]"), SortOn:=xlSortOnValues, Order _
:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End SubBonjour,
Tout d'abord merci pour la réponse je vais m'empresser de l'essayer.
Il s'agit d'une version simplifié de ce que j'ai déjà fait c'est bien cela ?
(Oui car ce que j'avais bidouillé marchait, je souhaitais comprendre pourquoi la mise en forma d'un tableau avant l'enregistrement de la macro empêchait celle ci de fonctionner correctement mais mon explication était peu être un peu fouilli)
Merci, j'apprécie tellement ce forum,
Fred