Macro Excel -Copie de cellules de bas en haut
Résolu
Yannmrt
-
vincent -
vincent -
Bonjour,
J'ai un tableau qui resemble a ca :
-
-
-
- A
-
-
- B
-
-
-
-
-
- C
-
- D
Les "-" sont des cellules.
Je voudrait copier les celulles de bas en haut quand celle ci sont vide, mais des que dans une celulles il y as un quelque chose, il faut copier cette nouvelle cellule dans les cellules du haut vide etc...
Vue que cela est pour differente colonne je voudrait faire une selection est lancer une macro baser sur cette selection pour copier. La selection peut etre assaz grande 15000 a 20000 cellules.
Resultat (cellules en gras est la cellules d'origine)
- A
- A
- A
- A
- B
- B
- B
- C
- C
- C
- C
- C
- C
- D
- D
J'espere que je me suis bien exprime.
Merci
Yann
J'ai un tableau qui resemble a ca :
-
-
-
- A
-
-
- B
-
-
-
-
-
- C
-
- D
Les "-" sont des cellules.
Je voudrait copier les celulles de bas en haut quand celle ci sont vide, mais des que dans une celulles il y as un quelque chose, il faut copier cette nouvelle cellule dans les cellules du haut vide etc...
Vue que cela est pour differente colonne je voudrait faire une selection est lancer une macro baser sur cette selection pour copier. La selection peut etre assaz grande 15000 a 20000 cellules.
Resultat (cellules en gras est la cellules d'origine)
- A
- A
- A
- A
- B
- B
- B
- C
- C
- C
- C
- C
- C
- D
- D
J'espere que je me suis bien exprime.
Merci
Yann
Configuration: Windows Vista / Internet Explorer 7.0
6 réponses
-
bonjour
Après la sélection d'une plage sur une colonne, tu peux utiliser la macro suivante :Public Sub col_bas_en_haut() Dim lig As Long With Selection For lig = .Rows.Count + .Row - 1 To 1 Step -1 If IsEmpty(Cells(lig, .Column).Value) Then Cells(lig, .Column).Value = Cells(lig + 1, .Column).Value End If Next lig End With End Sub -
Merci pour ta reponse.
Ca marche assez bien, le seul souci c'est que la copie ne s'arrete pas un niveau de la selection en haut et meme tout en haut.
Merci
Yann -
Bonsoir,
On va supposer que gb est dans les bras de morphée ;-)
Modifie sa macro en remplaçant par :
For lig = .Rows.Count + .Row - 1 To .Row Step -1
si tu veux qu'elle s'arrete à la 1ère cellule sélectionnée et non à la ligne 1
eric -
bonsoir Yannmrt,
de haut en bas ?Public Sub col_haut_en_bas() Dim lig As Long With Selection For lig = .Row To .Rows.Count + .Row - 1 If IsEmpty(Cells(lig, .Column).Value) Then Cells(lig, .Column).Value = Cells(lig - 1, .Column).Value End If Next lig End With End Sub
Bonsoir Éric,
Merci pour la judicieuse correction : j'avais bien besoin de Morphée ! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-
Messieurs,
Et pour que la macro s'exécute sur une plage plus grande qu'une seule colonne ?
Merci d'avance!!