Macro Excel -Copie de cellules de bas en haut

Résolu/Fermé
Signaler
-
 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

6 réponses

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 563
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
Messages postés
24222
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
29 novembre 2021
6 974
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
Eriiic,

Merci ca marche !
Je ne voudrait pas abuser mais si je veut le faire le meme system de haut en bas ? (j'ai essayer de changer les - en + sans avoir de chance)

Merci
Yann
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 563
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 !
Salut,

Merci Eric et GB pour ces macro qui vont me faciliter pas mal de chose.

A plus
Yann
Messieurs,

Et pour que la macro s'exécute sur une plage plus grande qu'une seule colonne ?

Merci d'avance!!