Récupération de valeur - position relative

Bonjour à toutes et à tous,

Étant plus que débutant en VBA, j'ai passé un certain nombre d'heures à chercher une solution à mon problème, sans succès. C'est pourquoi je me permet de poster ici, à la recherche d'une solution ou d'un début de solution.

Je vous invite à ouvrir le fichier joint, cela sera plus simple de comprendre ce qui suit :

Lorsqu'un "2" est trouvé dans la colonne "D", il faut que la valeur surlignée en rouge (simplement à titre d'information, ce n'est pas comme ça dans le fichier réel) soit reportée dans la colonne "A" sur la même ligne que le "2".

Par exemple :

400001 006557 1 1

400001 001466 920 2

400001 215001 0.06 2

400001 215001 0.05 2

devient :

400001 006557 1 1

006557 001466 920 2

006557 215001 0.06 2

006557 215001 0.05 2

Voici le code que j'ai trouvé sur un forum d'entr'aide, et que j'ai adapté à mon cas, mais je ne parviens pas à faire exactement ce que je veux :

Sub sc()
Dim cellule As Range, v As Integer
    For Each cellule In Range("D1:D51")
        Select Case cellule.Value
            Case "2"
            cellule.Offset(0, -3) = cellule.Offset(-1, -2)
        End Select
    Next cellule
End Sub

Dans ce code, j'ai indiqué les coordonnées relatives de la valeur à reporter

cellule.Offset(-1, -2)

donc cela fonctionne mais ... que pour la première ligne où il trouve "2".

Comment puis-je arriver à dire en VBA :

dès que tu trouves un "2" dans la colonne "D", tu récupères seulement la valeur situé en Offset(-1, -2) par rapport à la première cellule qui comporte un "2", puis tu la reportes dans la colonne "A" jusqu'à ce qu'il y ai un "1" dans la colonne "D". Puis tu répètes l'opération sur l'ensemble de la feuille.

Désolé pour la "longueur" du post, j'ai tenté d'être clair, je reste bien sur à disposition pour toutes questions.

Merci à vous et bonne fin d'après-midi,

Alex911

19test-macro.xlsm (13.49 Ko)

Bonjour

Si j'ai compris

Sub sc()
Dim cellule As Range, Report
  For Each cellule In Range("D1:D51")
    If cellule = 1 Then
      Report = cellule.Offset(0, -2)
    ElseIf cellule = 2 Then
      With cellule.Offset(0, -3)
        .NumberFormat = "@"
        .Value = Report
      End With
    End If
  Next cellule
End Sub

Merci beaucoup, c'est exactement ça !

Je vais l'adapter au fichier complet, merci pour cette rapidité, c'est vraiment sympa !

Bonne soirée et à bientôt !

Rechercher des sujets similaires à "recuperation valeur position relative"