[Résolu par job75] Copier des lignes du bas vers le haut mais une à une

Lone-wolf

XLDnaute Barbatruc
Bonsoir le Forum,


avec la macro suivante j'arrive à copier des lignes du haut vers le bas (une à une).

Code:
Sub Haut_Bas()
Dim lig As Integer, col As Long

With Feuil1
lig = .Range("A65536").End(xlUp).Row + 1
For col = 1 To 2
.Cells(lig, col) = Feuil2.Cells(lig, col)
Next col
End With
End Sub

J'aimerais maintenant les copier du bas vers le haut ligne par ligne, ce que je n'arrive pas à faire. Merci pour votre aide.


Amicalement Lone-wolf :cool:
 
Dernière édition:

CPk

XLDnaute Impliqué
Re : Copier des lignes du bas vers le haut mais une à une

for lig = .Range("A65536").End(xlUp).Row to 2 step -1

--> cela signifie de la dernière ligne non vide à la ligne 2 en remontant. Donc du bas vers le haut.

J'aimerais maintenant les copier du bas vers le haut ligne par ligne, ce que je n'arrive pas à faire. Merci pour votre aide.


Bonsoir CPk,

non, malheureusement ce n'est pas ça. En tout cas, merci pour être intervenu.

???
 
Dernière modification par un modérateur:

job75

XLDnaute Barbatruc
Re : Copier des lignes du bas vers le haut mais une à une

Bonjour Lone-wolf, CPk,

Je pense Lone-wolf que tu parles d'incrémentation parce que chaque fois qu'on exécute ta macro une ligne est copiée vers le bas.

Alors la même chose en remontant vers le haut :

Code:
Sub Bas_Haut()
Dim lig As Long, col As Integer
With Feuil1
  For lig = Feuil2.Range("A65536").End(xlUp).Row To 1 Step -1
    If .Cells(lig, 1) = "" Then
      For col = 1 To 2
        .Cells(lig, col) = Feuil2.Cells(lig, col)
      Next col
      Exit Sub
    End If
  Next lig
End With
End Sub
Fichier joint.

Bonne journée.
 

Pièces jointes

  • Copie(1).xlsm
    20.1 KB · Affichages: 49

Lone-wolf

XLDnaute Barbatruc
Re : Copier des lignes du bas vers le haut mais une à une

Bonjour job,

et bien tu vois que mon premier intitulé était correct. ;). Est-ce que on peut avoir les deux macro avec un seul bouton? Si ce n'est pas possible, ce n'est pas grave.

Amicalement, Lone-wolf (Dodo pour les intimes ;))
 

job75

XLDnaute Barbatruc
Re : Copier des lignes du bas vers le haut mais une à une

Re,

D'accord pour un seul bouton, et avec Find je trouve que c'est plus amusant :

Code:
Sub Haut_Bas_Haut()
Dim test As Boolean, c As Range, col As Integer
With Feuil1
  test = .DrawingObjects("Bouton 1").Text = "Haut_Bas"
  .DrawingObjects("Bouton 1").Text = IIf(test, "Bas_Haut", "Haut_Bas")
  Set c = .[A1].Resize(Feuil2.Cells(Rows.Count, 1).End(xlUp).Row) _
    .Find("", , xlValues, , xlByColumns, IIf(test, xlNext, xlPrevious))
  If c Is Nothing Then Exit Sub
  For col = 1 To 2
    c(1, col) = Feuil2.Cells(c.Row, col)
  Next col
End With
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Copie(2).xlsm
    21.1 KB · Affichages: 56

job75

XLDnaute Barbatruc
Re : Copier des lignes du bas vers le haut mais une à une

Bonjour le forum,

Lone-wolf tu dors ??? Alors pour te réveiller :

Code:
Sub Haut_Bas_Haut()
Dim test As Boolean, c As Range
With Feuil1
  test = .DrawingObjects("Bouton 1").Text = "Haut_Bas"
  .DrawingObjects("Bouton 1").Text = IIf(test, "Bas_Haut", "Haut_Bas")
  With .[A1].Resize(Feuil2.Cells(Rows.Count, 1).End(xlUp).Row)
    Set c = .Find("", , xlValues, , xlByColumns, IIf(test, xlNext, xlPrevious))
    If c Is Nothing Then .Offset(1).EntireRow = "": Set c = .Cells(IIf(test, 2, .Count))
    Feuil2.Rows(c.Row).Copy c
  End With
End With
End Sub
Bonne journée.
 

Pièces jointes

  • Copie(3).xlsm
    21.6 KB · Affichages: 54

Lone-wolf

XLDnaute Barbatruc
Re : Copier des lignes du bas vers le haut mais une à une

Bonjour job,

je me suis peut-être mal exprimé. Avec le même bouton, les lignes doivent être insérée de 2 à 23, quand 23ème cellule est remplie, éffacer, puis remonter de 23 à 2; et non une fois en haut-une fois en bas comme le montre l'exemple.


A+ :cool:
 

job75

XLDnaute Barbatruc
Re : Copier des lignes du bas vers le haut mais une à une

Re,

Code:
Sub Haut_Bas_Haut()
Dim test As Boolean, c As Range
test = Feuil1.DrawingObjects("Bouton 1").Text = "Haut_Bas"
With Feuil1.[A1].Resize(Feuil2.Cells(Rows.Count, 1).End(xlUp).Row)
  Set c = .Find("", , xlValues, , xlByColumns, IIf(test, xlNext, xlPrevious))
  If c Is Nothing Then
    .Parent.DrawingObjects("Bouton 1").Text = IIf(test, "Bas_Haut", "Haut_Bas")
    .Offset(1).EntireRow = ""
    Exit Sub
  End If
  Feuil2.Rows(c.Row).Copy c
End With
End Sub
Fichier (4).

A+
 

Pièces jointes

  • Copie(4).xlsm
    21.6 KB · Affichages: 49

Discussions similaires

Réponses
2
Affichages
294

Membres actuellement en ligne

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette