Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…