Récuperer la valeur dans les lignes précedentes [Résolu/Fermé]

Signaler
Messages postés
26
Date d'inscription
mardi 25 novembre 2014
Statut
Membre
Dernière intervention
14 janvier 2015
-
Messages postés
26
Date d'inscription
mardi 25 novembre 2014
Statut
Membre
Dernière intervention
14 janvier 2015
-
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

Messages postés
1941
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
23 août 2020
142
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+
Messages postés
26
Date d'inscription
mardi 25 novembre 2014
Statut
Membre
Dernière intervention
14 janvier 2015

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.
Messages postés
1941
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
23 août 2020
142
Pardon, il faut commencer à la ligne 2 (il ne trouve pas la ligne 0, forcément)
For i=2...
Messages postés
26
Date d'inscription
mardi 25 novembre 2014
Statut
Membre
Dernière intervention
14 janvier 2015
>
Messages postés
1941
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
23 août 2020

je suis bête :D !! Merci beaucoup Zoul67 !! Merci infiniment !! et à la prochaine !!