Récuperer la valeur dans les lignes précedentes

Résolu/Fermé
Statisticien Messages postés 26 Date d'inscription mardi 25 novembre 2014 Statut Membre Dernière intervention 14 janvier 2015 - Modifié par pijaku le 3/12/2014 à 12:37
Statisticien Messages postés 26 Date d'inscription mardi 25 novembre 2014 Statut Membre Dernière intervention 14 janvier 2015 - 3 déc. 2014 à 12:08
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

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
Modifié par Zoul67 le 3/12/2014 à 11:39
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
Statisticien Messages postés 26 Date d'inscription mardi 25 novembre 2014 Statut Membre Dernière intervention 14 janvier 2015
3 déc. 2014 à 11:59
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
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
3 déc. 2014 à 12:01
Pardon, il faut commencer à la ligne 2 (il ne trouve pas la ligne 0, forcément)
For i=2...
0
Statisticien Messages postés 26 Date d'inscription mardi 25 novembre 2014 Statut Membre Dernière intervention 14 janvier 2015 > Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023
3 déc. 2014 à 12:08
je suis bête :D !! Merci beaucoup Zoul67 !! Merci infiniment !! et à la prochaine !!
0