Vba definir une plage 'remontante'

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
Je n'ai jamais été confronté à ce Pb : Peut on definir une plage ex :D10:D1 qui la figerait dans ses données de telle sorte que si par exemple on la copie
dans une feuille en A1 , on commence par la donnée de D10 ??
Ou peut être une autre méthode ?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bobsoir @herve62 ;),

Une piste avec la macro Sub copieinverse(source As Range, destination As Range) . Voir son utilisation dans le fichier joint.

nota: on recopie tout (valeur et format). Si seules les valeurs (sans les formats) sont à recopier, alors passer un tableau sera beaucoup plus rapide.

VB:
Sub copieinverse(source As Range, destination As Range)
  With source.Parent
    source.Copy .Cells(1, Columns.Count - source.Columns.Count)
    With .Columns(Columns.Count).Resize(source.Rows.Count)
      .Formula = "=row()"
      .Value = .Value
      With .Offset(0, -source.Columns.Count).Resize(, source.Columns.Count + 1)
        .Sort key1:=.Cells(1, .Columns.Count), order1:=xlDescending, Header:=xlNo
        .Columns.Resize(, source.Columns.Count).Copy destination(1, 1)
        .EntireColumn.Delete
      End With
    End With
  End With
  Application.Goto destination
End Sub
 

Pièces jointes

  • herve62- sens dessus dessous- v1.xlsm
    20.9 KB · Affichages: 4

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir , merci l'ami ;)
T'as réponse à tout !!! et rapide lucky Luc !!
Bon dans tout ce que j'ai vu , rien de DIRECT !! il faut une sub , je vais regarder pour adapter en 'function'
le truc qui m'intéresse est quand tu prends A1-A10 ( 1 à 10) pour copier à l'envers en J1 ( 10 à 1)
on verra demain !!
 

job75

XLDnaute Barbatruc
Bonsoir herve62, mapomme,

Avec des valeurs textes en colonne A, formule en J1 :
Code:
=SIERREUR(""&INDEX(A:A;EQUIV("zzz";A:A)-LIGNE()+1);"")
Avec des nombres en colonne B, formule en K1 :
Code:
=SIERREUR(--REPT(INDEX(B:B;EQUIV(9^9;B:B)-LIGNE()+1);INDEX(B:B;EQUIV(9^9;B:B)-LIGNE()+1)<>"");"")
Bonne nuit.
 

Pièces jointes

  • Classeur(1).xlsx
    14.9 KB · Affichages: 4

job75

XLDnaute Barbatruc
Merci bien à vous ; mais je dois insérer dans ma sub VBA
Alors du VBA :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, Q As Range, rc&, i&, n&
If Application.CutCopyMode = 0 Or Selection.Count = 1 Then Exit Sub
If MsgBox("Inverser l'odre des lignes ? La plage sera limitée à 100 x 100...", 4, "Coller") = 7 Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
Set P = Selection
With Workbooks.Add.Sheets(1) 'document auxiliaire
    P.Copy .[A1]
    If P.Rows.Count > 100 Then .Rows(101).Resize(.Rows.Count - 100).Delete
    If P.Columns.Count > 100 Then .Columns(101).Resize(, .Columns.Count - 100).Delete
    Set Q = .UsedRange
    rc = Q.Rows.Count
    For i = rc To 1 Step -1
        n = n + 1
        If P.Rows(n).Cells.Count > 100 Then P.Rows(n).Clear
        Q.Rows(i).Copy P(n, 1)
    Next
    .Parent.Close False 'fermeture du document auxiliaire
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
 

Pièces jointes

  • Copier-coller(1).xlsm
    23.4 KB · Affichages: 3

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
Désolé , mais après avoir répondu ,nous avons quitté la maison pour nos quartiers d'été ( mobil home) mais nous n'avons pas internet et en plus, ... très peu de réseau tel .!
J'ai donc adapté et refilé le fichier à mon neveu ... pas de nouvelles je pense que cela fonctionne
Encore mes excuses ( là je suis revenu mais juste 2 jours)
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16