Copier une cellule sur une certaine plage
Bonjour à tous,
Je rencontre depuis quelques semaines un problème sur VBA qu'il m'est impossible de résoudre seul. Je vais essayer d'être précis dans la descritpion de celui-ci :
J'ai en cellule A2 une certaine valeur.
Je veux la copier sur une certaine plage, disons L5:L20.
La première fois que je lance ma macro, A2 va donc se copier en L5.
Cependant, comme la valeur en A2 sera amenée à changer au cours du temps, je veux qu'au prochain lancement de ma macro, la valeur en A2 ne se copie plus en L5 mais en L6. Puis la prochaine fois en L7, etc.
Une fois que la "plage de destination" (L5:L20) sera pleine, il faudrait que les trois dernières valeurs (L18:L20) remontent en début de plage (L5:L7) et que ma valeur en A2 se copie donc en L8.
Pouvez-vous m'aider en proposant un code s'il vous plait ?
J'ai déjà essayé de mon coté pour une partie du code mais sans succès (la macro tourne en boucle et fait planter Excel). De plus, je n'arrive pas à définir ma plage de destination :
Sub Macro1()
Range("A2").Copy
x = 5
If Range("L" & x) = "" Then
Range("L" & x).PasteSpecial
Else
Do x = x + 1
Loop
End If
End Sub
Merci d'avance !
bonjour
à quoi sert ton fichier ? car ta demande est étrange
ma proposition : ne pas effacer les valeurs ni décaler les 3 dernières vers le haut
à chaque nouvelle saisie en A2 :
- insérer une ligne entre ligne 4 et ligne 5
- coller la valeur de A2 en L5
l'ordre de la colonne est inversée, mais le collage est toujours en L5
ça devait pouvoir s'enregistrer en macro, et ça devrait marcher
tu auras des milliers de lignes dans 5 ans !
est-ce gênant ?
Bonjour, Re jmd !
Private Sub Worksheet_Change(ByVal Target As Range)
Dim n%
If Target.Address = "$A$2" Then
If Target = "" Then Exit Sub
n = Me.Range("L21").End(xlUp).Row
Select Case n
Case 1 To 4
Me.Range("L5") = Target
Case 5 To 19
Me.Range("L" & n + 1) = Target
Case 20
Application.ScreenUpdating = False
Me.Range("L5:L7").Value = Me.Range("L18:L20").Value
Me.Range("L8") = Target
Me.Range("L9:L20").ClearContents
End Select
End If
End SubCette macro est à placer dans le module de la feuille concernée. Elle réagira automatiquement à chaque changement de valeur de A2, et si elle contient une valeur, celle-ci sera insérée dans la plage L5:L20 selon tes spécifications.
Cordialement.