mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
21 sept. 2006 à 01:07
barockeuse
Messages postés23Date d'inscriptionlundi 24 mars 2008StatutMembreDernière intervention30 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.
barockeuse
Messages postés23Date d'inscriptionlundi 24 mars 2008StatutMembreDernière intervention30 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és6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 20 juil. 2007 à 10:36
De rien Butagaz
(j'aime bien ton pseudo) :D
@++
cs_butagaz
Messages postés1Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention20 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és1Date d'inscriptionjeudi 11 mai 2006StatutMembreDernière intervention25 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és6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
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és45Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention21 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és6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
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
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).
++
21 sept. 2006 à 16:59
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
21 sept. 2006 à 01:07
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
@++