5/5 (7 avis)
Snippet vu 22 724 fois - Téléchargée 28 fois
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
25 mars 2009 à 17:44
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.
20 juil. 2007 à 10:36
(j'aime bien ton pseudo) :D
@++
20 juil. 2007 à 10:31
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
25 sept. 2006 à 16:57
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
22 sept. 2006 à 16:27
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.