Récuperer la valeur dans les lignes précedentes

Résolu
Statisticien Messages postés 26 Statut Membre -  
Statisticien Messages postés 26 Statut Membre -
Bonjour à toutes et à tous,

De nouveau je suis confronté à un nouveau problème, après une multitude d'essais je me suis tourné vers vous, vous les experts en VBA excel.

Alors voila, j'ai un fichier excel (plusieurs lignes et plusieurs colonnes) qui comporte dans la première colonne :"Devise" et "845625". Si la cellule (i,1) = "845625", la celulle(i,3) sera vide. Si la cellule(j,1)= :"Devise" la celulle(i,3) sera remplie par la devise (USD, EUR ...).
Moi je voudrais qu'excel fasse les choses comme ça :
Il cherche dans la première colonne, une fois il trouve "845625", il remonte dans la même colonne jusqu'à ce qu'il trouve :"Devise" et il prend la devise qui figure dans la cellule(j,1) et il la colle dans la cellule(i,3).
C'est à dire que, à chaque fois qu'il trouve cellule (i,1) = "845625", il doit necessairement remonter en arrière (jusqu'à ce qu'il trouve cellule(j,1)= :"Devise") et non pas cherche au dessus de la ligne i.

Un petit exemple pour schématiser:

1- devise
2- devise
3-845625
4-845625
5-845625
6-devise
7-devise
la cellule(3,3) doit prendre la valeur de la cellule(2,3)
la cellule (4,3) doit prendre la valeur de la cellule(2,3)
la cellule (5,3) doit prendre la valeur de la cellule(2,3) et non pas celle de cellule(6,3).

Alors bien evidemment j'ai fais plusieurs essais, le plus présentable est le suivant :

Sub recuperer()

for i=1 to 20000


if cells(i,1) ="845625" then
    if cells(i,3)=" " then 
        do until cells(j,1)="Devise"
cells(j,3).select
selection.copy
cells(i,3).paste
loop
end if
end if
Next
end sub


Mais ça n'a pas marché. J'espère que vous allez m'aider, je vous remercie d'avance.

Cordialement,

1 réponse

  1. Zoul67 Messages postés 2001 Statut Membre 149
     
    Bonjour,

    Fais-le en formule Excel plutôt qu'en VBA en ajoutant une colonne (en D3:"=SI(C3<>"";C3;D2)" et tu tires la formule vers le bas).

    Dans ton énoncé, tu t'es mélangé les pinceaux sur certains i/j.
    Si tu tiens au vba :
    Dim DernLigne As Long 
    DernLigne = Range("A65536").End(xlUp).Row
    For i=1 To DernLigne
    If Cells(i,3).Value="" Then
       Cells(i,3).Value=Cells(i-1,3).Value
    End If
    Next i


    A+
    0
    1. Statisticien Messages postés 26 Statut Membre
       
      Merc Zoul67 pour ta réponse. Néanmoins, la ligne : Cells(i, 3).Value = Cells(i - 1, 3).Value
      me génére l'erreur :Cells(i, 3).Value = Cells(i - 1, 3).Value. Une idée ? j'ai vérifié s'il y a un espace de trop mais en vain.
      0
    2. Zoul67 Messages postés 2001 Statut Membre 149
       
      Pardon, il faut commencer à la ligne 2 (il ne trouve pas la ligne 0, forcément)
      For i=2...
      0
      1. Statisticien Messages postés 26 Statut Membre > Zoul67 Messages postés 2001 Statut Membre
         
        je suis bête :D !! Merci beaucoup Zoul67 !! Merci infiniment !! et à la prochaine !!
        0