Macro Excel -Copie de cellules de bas en haut

Résolu/Fermé
Yannmrt - 23 févr. 2010 à 20:56
 vincent - 30 déc. 2013 à 11:56
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
A voir également:

6 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
23 févr. 2010 à 22:37
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
0
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
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
23 févr. 2010 à 23:15
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
0
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
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
24 févr. 2010 à 22:33
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 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut,

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

A plus
Yann
0
Messieurs,

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

Merci d'avance!!
0