Invertion de lignes d'une feuille à une autre.

bobylaroche

XLDnaute Occasionnel
XLDnautes, bonsoir,

Un nouveau truc qui me titille !

J'ai une feuille "classements" qui comporte un nombre de lignes évoluant dans le temps et je souhaiterai les inverser dans une seconde feuille 'Inverse"à l'aide d'un bouton et d'une macro.

=INDEX($j$5:$ac$5;NBVAL($j$5:$ac$5)-NBVAL($j$5:Ac$5)+1) ou d'autres formules ont été essayées sans obtenir le résultat escompté. Et lorsque je m'en approche, je me retrouve avec des cellules vides en tête de ligne à cause des longueurs différentes.

Si quelqu'un a une idée, merci.


Pièce jointe pour l'exemple.
 

Pièces jointes

  • Exemple.xlsx
    17.4 KB · Affichages: 27
  • Exemple.xlsx
    17.4 KB · Affichages: 28

Chris401

XLDnaute Accro
Re : Invertion de lignes d'une feuille à une autre.

Bonsoir

Peux-tu essayer :
Edit pour légère modif de formule
Code:
=SI(NB.SI(classements!$J10:$AC10;">0")>COLONNE(A1)-1;DECALER(classements!$J10;;NB.SI(classements!$J10:$AC10;">0")-COLONNE(A$1));"")
Cordialement
Chris
 
Dernière édition:

bobylaroche

XLDnaute Occasionnel
Re : Invertion de lignes d'une feuille à une autre.

Bonsoir Chris,

Merci bien, c'est nickel :)
Tu penses qu'il y a moyen d'intégrer la formule dans une macro pour que cela se fasse automatiquement lorsque je clique sur un bouton ? C'est pour gagner du temps car j'ai environ 50 feuilles ou je dois effectuer la manipulation.

Bien cordialement, merci pour l'aide apportée :)
 

Chris401

XLDnaute Accro
Re : Invertion de lignes d'une feuille à une autre.

Re

Je ne sais pas si je trouverai le code adéquat, mais il serait bon de savoir :

- Tu as 50 feuilles de type "Classements" et donc 50 feuilles de types "Inverse" ?
- Si oui, les feuilles ont les données dans les mêmes lignes/colonnes ?

Chris
 

bobylaroche

XLDnaute Occasionnel
Re : Invertion de lignes d'une feuille à une autre.

Re
Merci pour ta réponse.
Le nom de la feuille "classement" change mais pas la feuille "Inverse".
Autrement, oui même ligne, même colonne. Un exemple pour une feuille suffirait, je pourrais modifier le nom des feuilles pour les autres macros.

Merci bien
 

Chris401

XLDnaute Accro
Re : Invertion de lignes d'une feuille à une autre.

Re
Je ne comprends pas.
Une seule feuille Inverse avec 50 feuilles de type Classement.
Cela veut-il dire que tu te sers de la même feuille Inverse ? C'est juste la feuille "Classement" choisie qui change les réponses dans cette feuille Inverse ?
Si pas ça, explique STP et envoie un fichier avec 3/4 feuilles.

Chris
 
Dernière édition:

bobylaroche

XLDnaute Occasionnel
Re : Invertion de lignes d'une feuille à une autre.

Re
C'est exactement cela. 50 feuilles "classements" de même structure mais portant un nom différent et une seule feuille "Inverse"
Il faut que je laisse l'ordi à ma fille un moment, je verrai ensuite pour le fichier.
Mais si tu arrives à faire une macro pour une feuille classement et la feuille indice, ce sera largement suffisant, j'arriverai à adapter pour le reste. En tout cas, un grand merci pour ton aide, c'est sympa.

Laurent
 

Chris401

XLDnaute Accro
Re : Invertion de lignes d'une feuille à une autre.

Re

Essaye ce code que tu lances en étant sur une des feuilles "Classement"
Code:
Sub Inverse()
Dim sh As String
Dim Derlg As Integer

sh = ActiveSheet.Name
Derlg = Sheets(sh).Range("J" & Sheets(sh).Rows.Count).End(xlUp).Row

With Sheets("inverse")
    .Range("J10:AC" & Derlg).FormulaR1C1 = _
       "=IF(COUNTIF(" & sh & "!RC10:RC29,"">0"")>COLUMN(R[-9]C[-9])-1," _
       & " OFFSET(" & sh & "!RC10,,COUNTIF(" & sh & "!RC10:RC29,"">0"")-COLUMN(R1C[-9])),"""")"

    .Range("J10:AC" & Derlg) = .Range("J10:AC" & Derlg).Value
    .Select
End With
End Sub
Chris
 

job75

XLDnaute Barbatruc
Re : Invertion de lignes d'une feuille à une autre.

Bonsoir bobylaroche, Chris401,

Voyez le fichier joint et cette macro dans le code de la feuille "Inverse" :

Code:
Private Sub Worksheet_Activate()
Dim P As Range, dest As Range, ncol%, i&, col%, j%
Set P = Feuil1.[J10].CurrentRegion 'à adapter
Set dest = [J10] 'à adapter
ncol = P.Columns.Count
Application.ScreenUpdating = False
dest.CurrentRegion.Clear 'RAZ
For i = 1 To P.Rows.Count
  For col = ncol To 1 Step -1
    If Val(P(i, col)) <> 0 Or col = 1 Then Exit For
  Next col
  For j = 1 To col
    P(i, j).Copy dest(i, col + 1 - j)
Next j, i
End Sub
Bonne nuit.
 

Pièces jointes

  • Exemple(1).xlsm
    19.7 KB · Affichages: 26
  • Exemple(1).xlsm
    19.7 KB · Affichages: 29

job75

XLDnaute Barbatruc
Re : Invertion de lignes d'une feuille à une autre.

RE,

J'oubliais qu'il y a plusieurs feuilles sources possibles, alors cette macro :

Code:
Sub Inverse()
'se lance par Ctrl+A
Dim P As Range, dest As Range, ncol%, i&, col%, j%
Set P = ActiveSheet.[J10].CurrentRegion 'à adapter
Set dest = Sheets("inverse").[J10] 'à adapter
ncol = P.Columns.Count
Application.ScreenUpdating = False
dest.CurrentRegion.Clear 'RAZ
For i = 1 To P.Rows.Count
  For col = ncol To 1 Step -1
    If Val(P(i, col)) <> 0 Or col = 1 Then Exit For
  Next col
  For j = 1 To col
    P(i, j).Copy dest(i, col + 1 - j)
Next j, i
dest.Parent.Activate
End Sub
Fichier (2).

Re-bonne nuit.
 

Pièces jointes

  • Exemple(2).xlsm
    20 KB · Affichages: 30
  • Exemple(2).xlsm
    20 KB · Affichages: 27

job75

XLDnaute Barbatruc
Re : Invertion de lignes d'une feuille à une autre.

Bonjour bobylaroche, Chris401, le forum,

Si l'on ne copie que les valeurs l'exécution est très rapide avec des tableaux VBA :

Code:
Sub Inverse()
'se lance par Ctrl+A
Dim P As Range, dest As Range, ncol%, t, rest(), i&, col%, j%
Set P = ActiveSheet.[J10].CurrentRegion 'à adapter
Set dest = Sheets("inverse").[J10] 'à adapter
ncol = P.Columns.Count
t = P.Resize(P.Rows.Count + 1) 'au moins 2 éléments
ReDim rest(1 To P.Rows.Count, 1 To ncol)
For i = 1 To UBound(rest)
  For col = ncol To 1 Step -1
    If Val(t(i, col)) <> 0 Or col = 1 Then Exit For
  Next col
  For j = 1 To col
    rest(i, col + 1 - j) = t(i, j) 'copie la valeur
Next j, i
Application.ScreenUpdating = False
With dest
  .CurrentRegion.ClearContents 'RAZ
  .Resize(UBound(rest), ncol) = rest
  With .Parent.UsedRange: End With 'actualisation des barres de défilement
  .Parent.Activate
End With
End Sub
Chez moi sur sur Win 8 - Excel 2013 un tableau de 80000 lignes et 20 colonnes est traité en 2,9 secondes.

Bonne journée.
 

Pièces jointes

  • Exemple(3).xlsm
    22.6 KB · Affichages: 28
  • Exemple(3).xlsm
    22.6 KB · Affichages: 29

bobylaroche

XLDnaute Occasionnel
Re : Invertion de lignes d'une feuille à une autre.

Bonjour Chris, Job75,

Job75,désolé, je n'ai pas remarqué qu'il y avait un second pseudo, oups.
Merci à vous deux pour le temps passé et donné, je mange un bout et je m'y colle.

Bon après midi à vous.
 

Discussions similaires

Statistiques des forums

Discussions
312 165
Messages
2 085 880
Membres
103 009
dernier inscrit
dede972