Inverser l'ordre d'une colone dans excel

Soyez le premier à donner votre avis sur cette source.

Snippet vu 21 388 fois - Téléchargée 26 fois

Contenu du snippet

bonjour
cette source permet d'inverser les éléments des cellules d'une colone sur excel.

exemple : cell1:salut cell2:oui cell3:avec cell4: sortie
resultat---->>>
cell1:sortie
cell2:avec
cell3:oui
cell4:salut

le mieux c'est de créer un bouton personalisé et de lui attribuer la macro, comme ça vous séléctionnez votre colone et vous cliquez sur votre bouton.(aller dans affichage-->barres d'outils-->personnaliser...)

Source / Exemple :


Sub Inverse()

Dim derniereCellule As Variant
Dim premiereCellule As Variant
Dim temp As Variant
Dim i As Integer
Dim numeroPremiereCellule As Variant
Dim numeroDerniereCellule As Variant
Dim difference As Integer
Dim valeurCellule As Variant

Dim coloneSelectionne As Variant
coloneSelectionne = ActiveWindow.RangeSelection.Address

temp = Split(coloneSelectionne, ":")
premiereCellule = temp(0)
derniereCellule = temp(UBound(temp))

'sert à recuperer l'indice de la ligne des cellules
numeroPremiereCellule = Split(premiereCellule, "$")
numeroDerniereCellule = Split(derniereCellule, "$")

'calcule le nombre de cellules de la colone
 difference = (numeroDerniereCellule(2) - numeroPremiereCellule(2) + 1)
Range(premiereCellule, premiereCellule).Select
' Déclare un tableau dynamique.
Dim valeurColone() As Variant

ReDim valeurColone(difference)  'aloue une taille au tableau
i = 0
While i <> difference
   valeurCellule = ActiveCell.Offset(i, 0).Value
    ' Initialise le tableau avec
    'les valeur de chaque cellule de la selection
    valeurColone(i) = valeurCellule
    i = i + 1
Wend

Dim j As Integer
j = 0
'je place dans la colone selectionnée
'les valeurs du tableau valeurColone en partant de la fin.

For i = UBound(valeurColone) - 1 To 0 Step -1

ActiveCell.Offset(j, 0).Select

ActiveCell.Value = valeurColone(i)

j = 1
Next i

End Sub

A voir également

Ajouter un commentaire

Commentaires

barockeuse
Messages postés
23
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
30 janvier 2011

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
16
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

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

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
16
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).

++

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.