Recopier une cellule dans un feuille Excel sous condition en en vba.

Xibole Messages postés 2 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 22 août 2009 - 22 août 2009 à 08:40
yjulien88 Messages postés 20 Date d'inscription vendredi 22 décembre 2006 Statut Membre Dernière intervention 8 mars 2010 - 23 août 2009 à 00:06
Bonjour @ tous ,
Je recherche un moyen en vba d’effectuer l’opération suivante :
Dans une feuille Excel sur la première colonne :
(..) cellule vide
..
F312
..
..
..
F286
..
..
F520
..
..
Fin de colonne

Je souhaite remplir les cellules vides par la valeur de la cellule du dessus.

Début de colonne.
..
F312
F312
F312
F312
F286
F286
F286
F520
F520
Fin de colonne.

J’ai du mal à concrétiser une fonction qui pourrait convenir (tant que , si… ???)
Merci d’avance pour le coup de main.


Aidons-nous les uns les autres pour la liberté d'échange...

4 réponses

yjulien88 Messages postés 20 Date d'inscription vendredi 22 décembre 2006 Statut Membre Dernière intervention 8 mars 2010
22 août 2009 à 10:18
Salut,
C'est facile, suffit d'une variable en mémoire, d'un test de cellule vide, et d'une boucle.

Sub remplir_cells_dessus ()
Dim ligne
For i = 1 to 2000
if cells(i, "F")="" then
if ligne<>"" then cells(i, "F") = cells(ligne, "F")
else
ligne=i
end if
next
end sub

tu peux aussi faire avec une boucle while, mais seulement si tu as une cellule particulière où tu dois arreter (du genre, une cellule avec marquer "FIN" ou de couleur)
Perso, je mets le numéro de ligne de la dernière cellule qui m'interresse d'une colonne dans une autre cellule. et je l'utilise pour le for. c'est peut-être pas la meilleur solution, mais pour ce que j'en fait, ça me suffit.
Après tu fais comme tu le sens.



Y@nnPerceval
0
Xibole Messages postés 2 Date d'inscription lundi 5 mars 2007 Statut Membre Dernière intervention 22 août 2009
22 août 2009 à 10:53
Merci beaucoup Y@nnPerceval.

De ta rapidité et de l'exactitude de ta réponse.
Cela fonctionne avec une modification ce n'est pas la colonne F mais A.
Par contre peux tu commenter les lignes de codes je ne comprends pas tout, le résultat compte mais j'aimerais comprendre le raisonnement.

D’avance merci.
Tu as raison je vais faire englober le tout dans un while car il est inutile d'aller jusqu’a la fin de la feuille.

En tout cas c'est top ! :D Bravo


Aidons-nous les uns les autres pour la liberté d'échange...
0
yjulien88 Messages postés 20 Date d'inscription vendredi 22 décembre 2006 Statut Membre Dernière intervention 8 mars 2010
22 août 2009 à 23:52
j'ai pas l'habitude de commenter des bouts de code simple, mais si ça peut aider... pourquoi pas.
J'ai vraiment l'impression que tu débutes, donc j'ai essayé de commenter...


Dim ligne 'on déclare une variable qui n'a pas de valeur (ligne=""), je t'apprend rien je suppose ^^
For i = 1 to 1000 ' début de la boucle For (on commence avec la valeur i=1)
if cells(i, "A")="" then 'on test si la cellule Ai est vide (si c'est le cas on voit la ligne suivante, sinon on va directement après le else
if ligne<>"" then cells(i, "A") = cells(ligne, "A") 'si on a déjà trouver une cellule non vide au dessus, on copie cette dernière sur la cellule vide
else 'traduc: sinon
ligne=i 'on donne à ligne la valeur de la ligne de la cellule qui n'est pas vide
end if
next 'fin de la boucle for, on recommence juste après le For pour i = i+1 (le suivant en gros, et ce jusqu'à 1000)


Globalement, on utilise une boucle FOR TO STEP NEXT, voici un exemple du genre tuto:
FOR variable = 1 TO 7 STEP 2
'code à executer
NEXT
Le code à executer est exécuté (désolé pour les répétitions) pour les valeurs de 1 à 7 par pas de 2 (cad que variable va d'abord avoir 1 comme valeur, puis 3 puis 5 et enfin 7). on peut quitter une boucle for à n'importe quel moment simplement en marquant EXIT FOR
(Note: STEP est facultatif, s'il n'est pas ecrit, on considère que le pas est 1, globalement, variable aura comme valeur 1, puis 2, puis 3... et ça jusqu'à 7)


IF condition
'code à exécuter si la condition est vrai
ELSE
'code à éxécuter si ce n'est pas le cas
END IF



Y@nnPerceval
0
yjulien88 Messages postés 20 Date d'inscription vendredi 22 décembre 2006 Statut Membre Dernière intervention 8 mars 2010
23 août 2009 à 00:06
Manque un THEN:

IF condition THEN
'code à exécuter si la condition est vrai
ELSE
'code à éxécuter si ce n'est pas le cas
END IF

j'ai oublier de dire que ELSE n'est pas obligatoire bien sur.
autre chose, j'ai utilser dans mon code (celui de tout en haut) une facon d'ecrire qui peut préter à confusion quand on y connait pas grand chose: si le code à exécuter est sur la même ligne que IF condition THEN, alors le code à exécuter doit tenir sur une seule ligne et END IF n'est pas à ecrire (du coup le else de mon exemple est pour le 1er if, c'est à dire si la cellule Ai n'est pas vide)
IF condition THEN'code à exécuter si la condition est vrai



Y@nnPerceval
0
Rejoignez-nous