INVERSER L'ORDRE D'UNE COLONE DANS EXCEL

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 21 sept. 2006 à 01:07
barockeuse Messages postés 23 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 30 janvier 2011 - 25 mars 2009 à 17:44
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39623-inverser-l-ordre-d-une-colone-dans-excel

barockeuse Messages postés 23 Date d'inscription lundi 24 mars 2008 Statut Membre Dernière intervention 30 janvier 2011
25 mars 2009 à 17:44
Mais sous excel, il y a plus simple !

Ajouter une colonne à dte ou à gauche du tableau à inverser.
Dans cette colonne, numéroter de 1 à 0 (en tirant avec Ctrl sur le coin inf droit de la cellule où on a marqué 1.

Sélectionner tout le tableau y compris la colonne de numérotation.

Données .. trier .. donner la lettre de cette colonne comme critère de tri et choisir ordre inverse.

Voilà, ya plus qu'à effacer la colonne de numérotation.
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
20 juil. 2007 à 10:36
De rien Butagaz
(j'aime bien ton pseudo) :D

@++
cs_butagaz Messages postés 1 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 20 juillet 2007
20 juil. 2007 à 10:31
Bonjour à tous.
J'ai essayé vos trois codes.
Pour ma part les 3 fonctionnent très bien dans ce que je cherchais à faire.
Merci à vous 3.

J'ai gardé le code de mortalino car c'est celui qui met le moins de temps (c'est presque invisible la différence, mais quand même un chouilla).
Merci à lui.

Bonne journée à tous
musbenm Messages postés 1 Date d'inscription jeudi 11 mai 2006 Statut Membre Dernière intervention 25 septembre 2006
25 sept. 2006 à 16:57
Bonjour tout le monde!

Personnellement, je n'est pas testé vos 2 codes mais je vous propose le mien qui permet d'inverser le contenu de toutes les colonnes d'une sélection? Je l'utilise souvent et je voudrais le partager avec vous. Notez que j'ai commenté toutes les lignes pour expliquer leur rôle.

Biensûr vos commentaires et questions sont les bienvenus.

Voici le code :


Option Base 1 ' On précise que les indices des tableaux commencent à partir de 1!
Option Explicit ' Toutes les variables doivent être déclarées avant d'être utilisées!

Sub InverteCellsInColumn()
Application.ScreenUpdating = False ' On désactive l'actualisation de l'affichage pour aller plus vite!

Dim MyData() As Variant ' Tableau pour contenir la sélection
Dim tampon As Variant ' Variable tampon

Dim nbLignes As Long, nbColonnes As Long ' Nombre de lignes et de colonnes dans la sélection

Dim i As Long, j As Long

On Error Resume Next ' Permet d'éviter les boîtes de dialogues de VBA en cas d'erreur

nbLignes = Selection.Rows.Count ' On récupère le nombre de lignes dans la sélection
nbColonnes = Selection.Columns.Count ' On récupère le nombre de colonnes dans la sélection

ReDim MyData(nbLignes, nbColonnes) ' On donne les bonnes dimensions à notre tableau de données

MyData = Selection.Value ' On transfert les données sélectionnées vers le tableau

For i = 1 To Fix(nbLignes / 2) ' On parcourt la moitié superieure de la sélection ligne par ligne
For j = 1 To nbColonnes ' On boucle sur les colonnes
tampon = MyData(i, j) ' On permute
MyData(i, j) = MyData(nbLignes - i + 1, j) ' de part et d'autre
MyData(nbLignes - i + 1, j) = tampon ' du centre (pivot) de la sélection
Next j
Next i

Selection.Value = MyData ' On transfert le contenu du tableau vers la sélection
Application.ScreenUpdating = True ' On remet l'affichage en place!
End Sub
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
22 sept. 2006 à 16:27
Voici la correction de mon code :

Sub test()
Dim PLV As Long, lCol As Long, i As Long, lCounter As Long
Dim sDonnees() As String

lCol = Selection.Column ' ** remplacer Columns par Selection
PLV = Columns(lCol).Find("", Cells(1, lCol), , , xlByRows, xlNext).Row - 1
lCounter = 0
ReDim sDonnees(PLV - 1)

For i = PLV To 1 Step -1
sDonnees(lCounter) = Cells(i, lCol).Value
lCounter = lCounter + 1
Next i
For i = 1 To PLV
Cells(i, lCol).Value = sDonnees(i - 1)
Next i
End Sub

Par contre j'ai toujours l'erreur sur la même ligne de ton code, dès que j'aurai un peu de temps, je verrai pour te la corriger.
(peut-être ce soir).

++
monjal26 Messages postés 45 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 21 septembre 2006
21 sept. 2006 à 16:59
salut mortalino,
j'ai bien retesté mon code en faisant un copier coller et ça marche.
par contre le tien il inverse seulement la première colone et pas la colone seléctionée. Donc je sais pas tiens moi au courant.
tchou
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 sept. 2006 à 01:07
Salut,

1/ dans ton code, j'ai une erreur ici :

'calcule le nombre de cellules de la colone
difference = (numeroDerniereCellule(2) - numeroPremiereCellule(2) + 1)
*** l'indice n'appartient pas à la sélection.

2/ Ton code vaut (si il fonctionne) plus pour un snippet qu'une source

3/ voici le code que je te propose, plus court comme tu peux le constater :

Sub test()
Dim PLV As Long, lCol As Long, i As Long, lCounter As Long
Dim sDonnees() As String

lCol = Columns.Column
PLV = Columns(lCol).Find("", Cells(1, lCol), , , xlByRows, xlNext).Row - 1
lCounter = 0
ReDim sDonnees(PLV - 1)

For i = PLV To 1 Step -1
sDonnees(lCounter) = Cells(i, lCol).Value
lCounter = lCounter + 1
Next i
For i = 1 To PLV
Cells(i, lCol).Value = sDonnees(i - 1)
Next i
End Sub

@++