Copier et insérer des données à partir de plages variables
Bonjour tout le monde,
Pour un projet de classe, je souhaiterais insérer le nombre de ligne dans le tableau 2 correspondant au nombre de ligne pour lesquelles le numéro de compte en année 1 dans le tableau 1 commence par 512. Il faudrait également garder le même format que la première ligne déjà existante dans le tableau 2. Puis copier et coller les numéros de comptes, les libelles et les montants correspondants dans les bonnes colonnes dans le tableau 2.
Par ailleurs, si il y a une différence dans les montants entre l'année 1 et l'année 2 sur un même compte, on copie et on colle le numéro de compte, le libellé et on calcule l'écart entre les 2 montants sur un troisième tableau.
J'ai essayé d'être le plus clair possible mais je vous invite à regarder le fichier Excel pour que vous puissiez un peu mieux comprendre ce que je veux dire. J'ai essayé beaucoup de choses et je vous invite à regarder les 2 programmes que j'ai tenté de mettre en place bien qu'ils ne fonctionnent pas...
Je vous remercie par avance pour vos réponses qui, j'en suis sûr, me seront d'une très grande aide.
Bonjour,
Si je comprends bien, s'agissant du tableau 1 on ne s'occupe (dans un premier temps que de l'année 1), on prélève les 3 cellules (n°, libellé, montant) pour l'année 1 si compte 512....
Et on va replacer ces année1-cpte 512... dans le tableau 2 qui comporte lui 5 cellules par ligne, dont 2 nouvelles intercalées...
L'autre cellule nouvelle est une date, où la prend-on ?
Dans un second temps on chercherait donc la ligne équivalente en année 2 et on comparerait les montants de façon à en indiquer s'il y a lieu l'écart (année2-année1) dans le tableau 3 ?
Petite difficulté avec tes tableaux superposés alors qu'il y a des lignes à insérer... on devrait s'en tirer avec des noms...
Il serait bon de donner les précisions manquantes...
NB- Je ne lirai pas ton code : non indenté, délayé avec un tas de lignes sautées, et truffé de commentaires...
Cordialement.
Bonjour JO9 et bienvenue sur le forum
Bonjour MFerrand
MFerrand a toujours un temps d'avance, tant sur la rapidité de la réponse que sur la réflexion.
Un essai malgré tout où j'ai essayé de répondre strictement à la demande, sans trop me poser de questions.
Bye !
Salut GMB ! La rapidité, c'est relatif et aléatoire
Pas vu ta solution, mais pour ma part j'ai joué avec les hypothèses de mon post précédent : extension du OUI, pas de date (? là...), sens de l'écart), et mis des noms pour référencer les tableaux qui vont bouger avec les insertions.
Et également conservé la ligne modèle des tableaux de façon à pouvoir ajouter à la suite... (?)
Sub Test()
Dim tbl(), n%, i%, j%, h%
With Worksheets("Feuil1")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 6 To n
If Left(CStr(.Cells(i, 1)), 3) = "512" Then
ReDim Preserve tbl(3, h)
For j = 1 To 3
tbl(j - 1, h) = .Cells(i, j)
Next j
h = h + 1
End If
Next i
n = .Cells(.Rows.Count, 4).End(xlUp).Row
For i = 6 To n
For j = 0 To h - 1
If tbl(0, j) = .Cells(i, 4) Then
If tbl(2, j) <> .Cells(i, 6) Then
tbl(3, j) = .Cells(i, 6) - tbl(2, j)
End If
Exit For
End If
Next j
Next i
End With
n = 1
With [Tablo2]
Do
n = n + 1
Loop While .Cells(n, 1) <> ""
.Rows(n & ":" & n + h - 1).Insert xlShiftDown, xlFormatFromRightOrBelow
For i = n To n + h - 1
.Cells(i, 4) = .Cells(n + h, 4)
Next i
For i = 0 To h - 1
For j = 0 To 2
.Cells(n + i, j * 2 + 1) = tbl(j, i)
Next j
Next i
End With
n = 1: h = 0: j = 0
For i = 0 To UBound(tbl, 2)
If tbl(3, i) <> "" Then h = h + 1
Next i
If h > 0 Then
With [Tablo3]
Do
n = n + 1
Loop While .Cells(n, 1) <> ""
.Rows(n & ":" & n + h - 1).Insert xlShiftDown, xlFormatFromRightOrBelow
For i = n To n + h - 1
Do While tbl(3, j) = ""
j = j + 1
Loop
.Cells(i, 1) = tbl(0, j): .Cells(i, 2) = tbl(1, j)
.Cells(i, 3) = tbl(3, j): j = j + 1
Next i
.Worksheet.Activate
End With
End If
End SubCordialement.
NB- Un bouton sur Feuil1 pour tester.