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 Sub

Cette 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.

Rechercher des sujets similaires à "copier certaine plage"