Code VBA pour copier cellules non vides en inversant le sens

tamatave33

XLDnaute Occasionnel
Bonjour le forum,

Je n'ai pas beaucoup de connaissances en VBA et je suis face à un petit problème, dont je ne trouve pas la solution dans d'autres discussions ayant déjà traité ce problème.

J'ai une colonne avec un certain nombre de cellules vides et non vides, du type :

A15: A15
A16: A16
A17: A17
A18: A18
A19: Vide
A20: Vide
A21: Vide
...
A39 : Vide

Mon objectif est générer un Sub permettant de reporter les cellules non vides l'une en dessous de l'autre en inversant l'ordre des cellules non vides, du type :

A61: A18
A62: A17
A63: A16
A64: A15
A65: Vide
A66: Vide
A67: Vide
...
A85 : Vide

Le nombre de cellules à copier est fixe (cellules A15 : A39) et je veux recopier le contenu dans les cellules (A61 : A85) en inversant le sens des cellules non vides uniquement.

Si vous avez une idée ?? Un grand merci par avance !!
 

Modeste

XLDnaute Barbatruc
Re : Code VBA pour copier cellules non vides en inversant le sens

Bonjour tamatave33,

Un petit pour se mettre en jambe, sans macro: avec une formule matricielle.
En A61:
Code:
=SIERREUR(INDEX($A$15:$A$39;GRANDE.VALEUR(SI($A$15:$A$39<>"";LIGNE($A$15:$A$39)-14);LIGNES($1:1)));"")
Valider avec Ctrl+Shift+Enter et recopier jusqu'en A85

... Bonne journée
 

Efgé

XLDnaute Barbatruc
Re : Code VBA pour copier cellules non vides en inversant le sens

Bonjour tamatave33, Salut Modeste :)

Avec plus de 30 Posts tu devrais savoir qu'un fichier exemple annonyme est toujours réclamé sur XLD...:rolleyes:

Une proposition avec les indications données:
VB:
Sub test()
Dim i&, j&
Dim TBase As Variant, Treport(1 To 25, 1 To 1) As Variant
With Sheets("Feuil1")
    TBase = .Range(.Cells(15, 1), .Cells(39, 1))
    For i = UBound(TBase) To LBound(TBase) Step -1
        If TBase(i, 1) <> "" Then
            j = j + 1
            Treport(j, 1) = TBase(i, 1)
        End If
    Next i
    .Cells(61, 1).Resize(UBound(Treport)) = Treport
End With
End Sub

Cordialement
 

tamatave33

XLDnaute Occasionnel
Re : Code VBA pour copier cellules non vides en inversant le sens

Bonsoir Modeste, bonsoir Efgé,
Merci pour votre aide.
Pour Modeste, la commande SIERREUR n'existant pas dans Excel 2003, je l'ai remplacée par SI(ESTERREUR, et cela fonctionne parfaitement.
Pour Efgé, je n'ai pas réussi à la faire fonctionner. Je joins un exemple comme suggéré.
Merci encore.
 

Pièces jointes

  • Exemple.xls
    18 KB · Affichages: 56
  • Exemple.xls
    18 KB · Affichages: 49

Modeste

XLDnaute Barbatruc
Re : Code VBA pour copier cellules non vides en inversant le sens

Bonsoir tamatave33,
Salut Fred :D (et pis tout sioux, maille frêne'd !)

Désolé pour le SIERREUR, pas vu le préfixe XL 2003!
Ceci devrait être un poil plus court que la solution avec SI(ESTERREUR(...
Code:
=SI(LIGNES($1:1)<=NBVAL($A$15:$A$39);INDEX($A$15:$A$39;GRANDE.VALEUR(SI($A$15:$A$39<>"";LIGNE($A$15:$A$39)-14);LIGNES($1:1)));"")
... mais c'est toujours une formule matricielle, bien sûr!

Quant au code de Efgé, je viens de le tester, sans y changer un iota ... et nos résultats sont identiques :confused:
 

tamatave33

XLDnaute Occasionnel
Re : Code VBA pour copier cellules non vides en inversant le sens

Bonsoir Modeste,

Merci encore pour ton aide. Cette nouvelle formule est effectivement plus courte et plus simple.
Pour le code de Efgé, désolé mais je n'y arrive pas (mes connaissances en VBA sont très limitées) Pourrais-tu éventuellement l'écrire dans le fichier Exemple envoyé précédemment, cela m'aidera beaucoup.
 

Modeste

XLDnaute Barbatruc
Re : Code VBA pour copier cellules non vides en inversant le sens

Re,

Pourrais-tu éventuellement l'écrire dans le fichier Exemple envoyé précédemment
J'eus préféré que l'intéressé le fît lui-même ... on ne le voit presque plus et quand il passe par ici, visez-moi la dégaine: avachi dans un transat, les pieds sur un guéridon, un barbe d'une semaine au moins, etc. Quel exemple pour nos enfants! :)

À voir ton exemple, je me demandais s'il arriverait (comme j'avais cru le comprendre) que des cellules vides "s'intercalent" entre les non-vides, ou si les cellules non-vides étaient toutes attenantes (et les vides en bas de la première liste)? Parce qu'alors, on peut peut-être se passer de formule matricielle, au cas où ça t'intéresserait!?
 

Pièces jointes

  • LaMacroàEfgé.xls
    40.5 KB · Affichages: 38

Efgé

XLDnaute Barbatruc
Re : Code VBA pour copier cellules non vides en inversant le sens

Bonjour à tous, salut Modeste :)

@Modeste
Tu as raison pour le coté "à la dégage", mais "j'attend la relève" * :D

Merci pour le code dans le fichier. Comme toi je ne savais pas si il y avait des trous ou pas, donc j'ai pris la méthode qui fonctionne dans les deux cas ;)

* Astérix en corse
Cordialement
 

tamatave33

XLDnaute Occasionnel
Re : Code VBA pour copier cellules non vides en inversant le sens

Bonjour Modeste, bonjour Efgé,
En principe il ne devrait pas de cellules non-vides intercalées avec des cellules vides, mais comme le classeur Excel doit être utilisé par plusieurs personnes, je vais considérer que cela peut arriver.
Merci encore pour votre aide, cela m'a bien dépanné.
Bon WE
 

job75

XLDnaute Barbatruc
Re : Code VBA pour copier cellules non vides en inversant le sens

Bonjour tamatave33, Modeste, Fred,

Histoire de faire autre chose :

Code:
Sub Copier()
Application.ScreenUpdating = False
With [A60:A85]
  [A14].Resize(.Count).Copy .Cells
  .Columns(2) = "=(RC[-1]<>"""")*ROW()"
  .Resize(, 2).Sort .Columns(2), xlDescending, Header:=xlYes
  .Columns(2).ClearContents
End With
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 237
Messages
2 086 486
Membres
103 232
dernier inscrit
logan035